php网站开发案例pdf,如何对现有的网站改版,广东工程建设监理有限公司网站,网络组建管理与维护kubectl 在 k8s 集群中作为 客户端 CLI 工具#xff0c;可以让用户使用 kubectl 工具执行命令行#xff0c;并通过使用 k8s API 与 k8s 集群的控制面#xff08;kube-controller-manager#xff09;进行通信。kubectl 语法格式kubectl 命令行的语法格式如下#xff1a;kub…kubectl 在 k8s 集群中作为 客户端 CLI 工具可以让用户使用 kubectl 工具执行命令行并通过使用 k8s API 与 k8s 集群的控制面kube-controller-manager进行通信。kubectl 语法格式kubectl 命令行的语法格式如下kubectl [command] [TYPE] [NAME] [flags]其中 command、TYPE、NAME 和 flags 的含义分别如下• command子命令用于操作 k8s 集群资源对象的命令例如 create、get、describe、delete。• TYPEk8s 集群中资源对象的类型区分大小写能以单数、复数或者简写形式表示。例如以下三种类型是等效的。kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1• NAMEk8s 集群中资源对象的名称区分大小写。如果不指定名称系统则返回属于 TYPE 的全部资源对象列表例如# 返回所有 Pod 列表
kubectl get pods• flagskubectl 子命令的可选参数。例如使用 -s 指定 API Server 的 URL 地址而不用默认值。kubectl 可操作资源对象类型kubectl 可操作的资源对象类型和缩写别名如下清单所示Resource type资源类型Abbreviated alias缩写别名apiservicescertificatesigningrequestscsrclustersclusterrolebindingsclusterrolescomponentstatusescsconfigmapscmcontrollerrevisionscronjobscustomresourcedefinitioncrddaemonsetsdsdeploymentsdeployendpointsepeventsevhorizontalpodautoscalershpaingressesingjobslimitrangeslimitsnamespacesnsnetworkpoliciesnetpolnodesnopersistentvolumeclaimspvcpersistentvolumespvpoddisruptionbudgetpdbpodpresetpodspopodsecuritypoliciespsppodtemplatesreplicasetsrsreplicationcontrollersrcresourcequotasquotarolebindingsrolessecretsserviceaccountssaservicessvcstatefulsetsstorageclasses在一个命令行中也可以同时操作多个资源对象以多个 TYPE 和 NAME 的组合表示例如• 获取多个Pod的信息kubectl get pods pod1 pod2• 获取多种对象的信息kubectl get pod/pod1 rc/rc1• 同时应用多个 yaml 文件以多个 -f file 参数表示kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
kubectl apply -f pod1.yaml -f rc1.yaml -f service1.yamlkubectl 连接到 k8s 集群环境kubectl 想要连接到 k8s 集群必须有 kubeconfig 配置文件的里面配置了连接哪个集群以什么身份进入等信息。拷贝 kubectl 工具用的 kubeconfig 到默认路径下# 在当前目录$HOME下创建子目录 /.kube 参数-p 确保目录名称存在不存在的就建一个。
mkdir -p $HOME/.kube
# 拷贝文件到目标目录并提示用户是否覆盖文件输入 y 时目标文件将被覆盖。
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 给目标文件目录设定权限
sudo chown $(id -u):$(id -g) $HOME/.kube/configkubeconfig.yaml 文件结构如下多个 k8s 集群环境切换只需把【集群】、【上下文】和【客户认证】信息配置好然后调整【当前上下文】确定使用哪个集群环境。• 【集群cluster】配置集群的相关信息集群服务器访问IP地址集群名称• 【上下文contexts】集群名称进入的用户名用户角色• 【当前上下文current-context】确定使用哪个集群环境。• 【客户认证】用户的名称CA 证书配置。使用 --kubeconfig 指定该 config 文件即可使用 kubectl 查看对应的集群信息如下所示kubectl --kubeconfig/config get nodekubectl 子命令操作Operations详解kubectl 的子命令非常丰富涵盖了对 k8s 集群的主要操作包括资源对象的创建、删除、查看、配置、运行等详细命令如下表kubectl 子命令参数列表kubectl 每个子命令如 createdeleteget 等还有特定的 flags 参数可以通过 kubectl [command] --help 命令查看。参数列表参数名称说明--add-dir-header设置为 true 表示添加文件目录到日志信息头中--alsologtostderr表示将日志输出到文件的同时输出到 stderr--as string以指定用户的身份执行操作--as-group stringArray模拟指定的组来执行操作可以使用这个标志来指定多个组。--azure-container-registry-config string包含 Azure 容器仓库配置信息的文件的路径。--cache-dir string默认值: $HOME/.kube/cache 默认缓存目录--certificate-authority string指向证书机构的 cert 文件路径--client-certificate stringTLS 使用的客户端证书路径--client-key stringTLS 使用的客户端密钥文件路径--cloud-provider-gce-l7lb-src-cidrs cidrs 默认值: 130.211.0.0/22,35.191.0.0/16在 GCE 防火墙中开放的 CIDR用来进行 L7 LB 流量代理和健康检查。--cloud-provider-gce-lb-src-cidrs cidrs 默认值: 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16在 GCE 防火墙中开放的 CIDR用来进行 L4 LB 流量代理和健康检查。--cluster string要使用的 kubeconfig 集群的名称--context string要使用的 kubeconfig 上下文的名称--default-not-ready-toleration-seconds int 默认值: 300表示 notReady 状态的容忍度秒数默认情况下NoExecute 被添加到尚未具有此容忍度的每个 Pod 中。--default-unreachable-toleration-seconds int 默认值: 300表示 unreachable 状态的容忍度秒数默认情况下NoExecute 被添加到尚未具有此容忍度的每个 Pod 中。-h, --helpkubectl 操作的帮助命令--insecure-skip-tls-verify设置为 true则表示不会检查服务器证书的有效性。这样会导致你的 HTTPS 连接不安全。--kubeconfig stringCLI 请求使用的 kubeconfig 配置文件的路径。--log-backtrace-at traceLocation 默认值: 0当日志机制运行到指定文件的指定行file:N时打印调用堆栈信息--log-dir string如果不为空则将日志文件写入此目录--log-file string如果不为空则将使用此日志文件--log-file-max-size uint 默认值: 1800定义日志文件的最大尺寸。单位为兆字节。如果值设置为 0则表示日志文件大小不受限制。--log-flush-frequency duration 默认值: 5s两次日志刷新操作之间的最长时间秒--logtostderr 默认值: true日志输出到 stderr 而不是文件中--match-server-version要求客户端版本和服务端版本相匹配-n, --namespace string如果存在CLI 请求将使用此命名空间--one-output如果为 true则只将日志写入初始严重级别而不是同时写入所有较低的严重级别。--password stringAPI 服务器进行基本身份验证的密码--profile string 默认值: none要记录的性能指标的名称。可取 (none--profile-output string 默认值: profile.pprof用于转储所记录的性能信息的文件名--request-timeout string 默认值: 0放弃单个服务器请求之前的等待时间非零值需要包含相应时间单位例如1s、2m、3h。零值则表示不做超时要求。-s, --server stringKubernetes API 服务器的地址和端口--skip-headers设置为 true 则表示跳过在日志消息中出现 header 前缀信息--skip-log-headers设置为 true 则表示在打开日志文件时跳过 header 信息--stderrthreshold severity 默认值: 2等于或高于此阈值的日志将输出到标准错误输出stderr--token string用于对 API 服务器进行身份认证的持有者令牌--user string指定使用 kubeconfig 配置文件中的用户名--username string用于 API 服务器的基本身份验证的用户名-v, --v Level指定输出日志的日志详细级别--version version[true]打印 kubectl 版本信息并退出--vmodule moduleSpec以逗号分隔的 patternN 设置列表用于过滤文件的日志记录环境变量参数说明KUBECONFIGkubectl 的配置 (kubeconfig) 文件的路径。默认值: $HOME/.kube/configKUBECTL_COMMAND_HEADERS设置为 false 时关闭用于详细说明被调用的 kubectl 命令的额外 HTTP 标头 (Kubernetes 版本为 v1.22 或者更高)kubectl 命令基本分类命令补全配置1. 安装依赖包yum install bash-completion1. 重新载入下终端bash1. 执行指令source (kubectl completion bash)输出选项Output options格式化输出Formatting output所有 kubectl 命令的默认输出格式都是人类可读的纯文本格式。要以特定格式在终端窗口输出详细信息 可以将 -o 或 --output 参数添加到受支持的 kubectl 命令中。语法kubectl [command] [TYPE] [NAME] -o output_format取决于具体的 kubectl 操作支持的输出格式如下示例在此示例中以下命令将单个 Pod 的详细信息输出为 YAML 格式的对象kubectl get pod web-pod-13je7 -o yaml提示有关每个命令支持哪种输出格式的详细信息请参阅 kubectl 参考文https://kubernetes.io/zh-cn/docs/reference/kubectl/kubectl/自定义列Custom columns要定义自定义列并仅将所需的详细信息输出到表中可以使用 custom-columns 选项。你可以选择内联定义自定义列或使用模板文件-o custom-columnsspec 或 -o custom-columns-filefilename。示例1. 内联Inline方式kubectl get pods pod-name -o custom-columnsNAME:.metadata.name,RSRC:.metadata.resourceVersion1. 模板文件方式kubectl get pods pod-name -o custom-columns-filetemplate.txt其中template.txt 文件包含NAME RSRC
metadata.name metadata.resourceVersion上面这两个命令的运行结果类似如下NAME RSRC
submit-queue 610995Server-side 列kubectl 支持从服务器接收关于对象的特定列信息。这意味着对于任何给定的资源服务器将返回与该资源相关的列和行以便客户端打印。通过让服务器封装打印的细节这允许在针对同一集群使用的客户端之间提供一致的人类可读输出。此功能默认启用。要禁用它请将该 --server-printfalse 参数添加到 kubectl get 命令中。例子要打印有关 Pod 状态的信息请使用如下命令kubectl get pods pod-name --server-printfalse输出信息NAME AGE
pod-name 1m排序列表对象Sorting list objects要将对象排序后输出到终端窗口可以将 --sort-by 参数添加到支持的 kubectl 命令。通过使用 --sort-by 参数指定任何数字或字符串字段来对对象进行排序。要指定字段请使用 jsonpath 表达式。语法kubectl [command] [TYPE] [NAME] --sort-byjsonpath_exp示例要打印按名称排序的 Pod 列表请运行kubectl get pods --sort-by.metadata.nameJSONPath 支持kubectl 支持 JSONPath 模板。JSONPath 模板由 {} 包起来的 JSONPath 表达式组成。kubectl 使用 JSONPath 表达式来过滤 JSON 对象中的特定字段并格式化输出。除了原始的 JSONPath 模板语法以下函数和语法也是有效的1. 使用双引号将 JSONPath 表达式内的文本引起来。2. 使用 rangeend 运算符来迭代列表。3. 使用负片索引后退列表。负索引不会“环绕”列表并且只要 -index listLength 0 就有效。说明• $ 运算符是可选的因为默认情况下表达式总是从根对象开始。• 结果对象将作为其 String() 函数输出。关于 JSONPath 更多的信息请查看https://kubernetes.io/zh-cn/docs/reference/kubectl/jsonpath/kubectl 常用命令操作使用以下示例集来帮助你熟悉运行常用 kubectl 操作• kubectl apply - 以文件或标准输入为准应用或更新资源。# 使用 example-service.yaml 中的定义创建服务。
kubectl apply -f example-service.yaml# 使用 example-controller.yaml 中的定义创建 replication controller。
kubectl apply -f example-controller.yaml# 使用 directory 路径下的任意 .yaml、.yml 或 .json 文件 创建对象。
kubectl apply -f directory• kubectl get - 列出一个或多个资源。# 以纯文本输出格式列出所有 Pod。
kubectl get pods# 以纯文本输出格式列出所有 Pod并包含附加信息(如节点名)。
kubectl get pods -o wide# 以纯文本输出格式列出具有指定名称的副本控制器。提示你可以使用别名 rc 缩短和替换 replicationcontroller 资源类型。
kubectl get replicationcontroller rc-name# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services# 以纯文本输出格式列出所有守护程序集包括未初始化的守护程序集。
kubectl get ds --include-uninitialized# 列出在节点 server01 上运行的所有 Pod
kubectl get pods --field-selectorspec.nodeNameserver01• kubectl describe - 显示一个或多个资源的详细状态默认情况下包括未初始化的资源。# 显示名为 pod-name 的 Pod 的详细信息。
kubectl describe nodes node-name# 显示名为 pod-name 的 Pod 的详细信息。
kubectl describe pods/pod-name# 显示由名为 rc-name 的副本控制器管理的所有 Pod 的详细信息。
# 记住副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
kubectl describe pods rc-name# 描述所有的 Pod
kubectl describe pods说明 kubectl get 命令通常用于检索同一资源类别的一个或多个资源。它具有丰富的参数允许你使用 -o 或 --output 参数自定义输出格式。你可以指定 -w 或 --watch 参数以开始监测特定对象的更新。 kubectl describe 命令更侧重于描述指定资源的许多相关方面。它可以调用对 API 服务器 的多个 API 调用来为用户构建视图。例如该 kubectl describe node 命令不仅检索有关节点的信息还检索在其上运行的 Pod 的摘要为节点生成的事件等。• kubectl delete - 基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源来删除资源。# 使用 pod.yaml 文件中指定的类型和名称删除 Pod。
kubectl delete -f pod.yaml# 删除所有带有 label-keylabel-value 标签的 Pod 和服务。
kubectl delete pods,services -l label-keylabel-value# 删除所有 Pod包括未初始化的 Pod。
kubectl delete pods --all• kubectl exec - 对 Pod 中的容器执行命令。# 从 Pod pod-name 中获取运行 date 的输出。默认情况下输出来自第一个容器。
kubectl exec pod-name -- date# 运行输出 date 获取在 Pod pod-name 中容器 container-name 的输出。
kubectl exec pod-name -c container-name -- date# 获取一个交互 TTY 并在 Pod pod-name 中运行 /bin/bash。默认情况下输出来自第一个容器。
kubectl exec -ti pod-name -- /bin/bash• kubectl logs - 打印 Pod 中容器的日志。# 返回 Pod pod-name 的日志快照。
kubectl logs pod-name# 从 Pod pod-name 开始流式传输日志。这类似于 tail -f Linux 命令。
kubectl logs -f pod-name• kubectl diff - 查看集群建议更新的差异。# “pod.json”中包含的差异资源。
kubectl diff -f pod.json# 从标准输入读取的差异文件。
cat service.yaml | kubectl diff -f -关于 kubectl 更多的信息请查看https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commandskubectl 插件的创建和使用使用以下示例来帮助你熟悉编写和使用 kubectl 插件。Linux 环境下 .sh 可执行文件创建 kubectl 插件之前先了解下 linux下执行 .sh 文件的方法举个例子• 创建文件 kubectl-hello.sh以前缀 kubectl- 开始为 kubectl 创建插件铺垫里面输入下面信息1. 编辑 kubectl-hello.sh 文件vi kubectl-hello.sh2. 添加如下内容#!/bin/sh
# 打印单词 hello world
echo hello world• 查看 kubectl-hello.sh 文件内容cat ./kubectl-hello• 给 kubectl-hello.sh 可执行权限sudo chmod ax kubectl-hello.sh• 执行命令本身目录下运行sh kubectl-hello.sh• 输出信息hello world编写 kubectl 插件你可以用任何编程语言或脚本编写插件允许你编写命令行命令。不需要安装插件或预加载插件可执行程序从 kubectl 二进制文件接收继承的环境 插件根据其名称确定它希望实现的命令路径。例如名为 kubectl-foo 的插件提供了命令 kubectl foo。必须将插件的可执行文件安装在 PATH 中的某个位置。kubectl 插件编写示例通过上面的例子接下来我们继续修改 kubectl-hello.sh 文件为了区分 kubectl-hello.sh新建一个 kubectl-foo 文件步骤和上面类似在 kubectl-foo 文件中编写如下信息#!/bin/bash# 可选的参数处理
if [[ $1 version ]]
thenecho 1.0.0exit 0
fi# 可选的参数处理
if [[ $1 config ]]
thenecho $KUBECONFIGexit 0
fiecho I am a plugin named kubectl-foo使用 kubectl 插件• 授权可执行文件要使用某插件先要使其可执行sudo chmod x ./kubectl-foo• 设置环境变量并将它放在你的 PATH 中的任何地方sudo mv ./kubectl-foo /usr/local/bin• kubectl 插件调用kubectl foo输出信息I am a plugin named kubectl-foo查看所有可用的 kubectl 插件查看可用的所有 kubectl 插件kubectl plugin list输出类似信息The following kubectl-compatible plugins are available:/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
/usr/local/bin/kubectl-barkubectl plugin list 指令也可以向你告警哪些插件被运行或是被其它插件覆盖了例如sudo chmod -x /usr/local/bin/kubectl-foo # 删除执行权限
kubectl plugin listThe following kubectl-compatible plugins are available:/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo- warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
/usr/local/bin/kubectl-barerror: one plugin warning was found你可以将插件视为在现有 kubectl 命令之上构建更复杂功能的一种方法。关于 kubectl 插件的更多信息请查看https://kubernetes.io/zh-cn/docs/tasks/extend-kubectl/kubectl-plugins/