05-kubectl 命令之高级命令

  • kubectl-diff:对比本地json/yaml文件与kube-apiserver中运行的配置文件是否有差异
  • kubectl-apply:通过json/yaml文件 标准输入对资源进行配置更新或者创建
  • kubectl-patch:通过patch方式修改资源对象字段(补丁式)
  • kubectl-replace:通过json/yaml文件或者标准输入来替换资源对象
  • kubectl-wait:在一个或者多个资源上等待条件达成
  • kubectl-convert:转换json/yaml文件为不同的资源版本
  • kubectl-kustomize:定制kubernetes配置

kubectl diff

官方文档

kubectl apply

通过文件名或控制台输入,对资源进行配置。 如果资源不存在,将会新建一个。可以使用 JSON 或者 YAML 格式。

官方文档

语法:

1
kubectl apply -f FILENAME

选项

  • -f, --filename=[]: 包含配置信息的文件名,目录名或者URL。
  • -o, --output="": 输出格式,使用“-o name”来输出简短格式(资源类型/资源名)。
  • --schema-cache-dir="/tmp/kubectl.schema": 如果不为空,将API schema缓存为指定文件,默认缓存到“/tmp/kubectl.schema”。
  • --validate[=true]: 如果为true,在发送到服务端前先使用schema来验证输入。

继承自父命令的选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--alsologtostderr[=false]: 同时输出日志到标准错误控制台和文件。
--api-version="": 和服务端交互使用的API版本。
--certificate-authority="": 用以进行认证授权的.cert文件路径。
--client-certificate="": TLS使用的客户端证书路径。
--client-key="": TLS使用的客户端密钥路径。
--cluster="": 指定使用的kubeconfig配置文件中的集群名。
--context="": 指定使用的kubeconfig配置文件中的环境名。
--insecure-skip-tls-verify[=false]: 如果为true,将不会检查服务器凭证的有效性,这会导致你的HTTPS链接变得不安全。
--kubeconfig="": 命令行请求使用的配置文件路径。
--log-backtrace-at=:0: 当日志长度超过定义的行数时,忽略堆栈信息。
--log-dir="": 如果不为空,将日志文件写入此目录。
--log-flush-frequency=5s: 刷新日志的最大时间间隔。
--logtostderr[=true]: 输出日志到标准错误控制台,不输出到文件。
--match-server-version[=false]: 要求服务端和客户端版本匹配。
--namespace="": 如果不为空,命令将使用此namespace。
--password="": API Server进行简单认证使用的密码。
-s, --server="": Kubernetes API Server的地址和端口号。
--stderrthreshold=2: 高于此级别的日志将被输出到错误控制台。
--token="": 认证到API Server使用的令牌。
--user="": 指定使用的kubeconfig配置文件中的用户名。
--username="": API Server进行简单认证使用的用户名。
--v=0: 指定输出日志的级别。
--vmodule=: 指定输出日志的模块,格式如下:pattern=N,使用逗号分隔。

使用kubectl create 和 kubectl apply创建资源对象的区别

序号 kubectl apply kubectl create
1 根据yaml文件中包含的字段(yaml文件可以只写需要改动的字段),直接升级集群中的现有资源对象 首先删除集群中现有的所有资源,然后重新根据yaml文件(必须是完整的配置信息)生成新的资源对象
2 yaml文件可以不完整,只写需要的字段 yaml文件必须是完整的配置字段内容
3 kubectl apply只工作在yaml文件中的某些改动过的字段 kubectl create工作在yaml文件中的所有字段
4 在只改动了yaml文件中的某些声明时,而不是全部改动,你可以使用kubectl apply 在没有改动yaml文件时,使用同一个yaml文件执行命令kubectl replace,将不会成功(fail掉),因为缺少相关改动信息

示例

1
2
3
4
5
# 将pod.json中的配置应用到pod
kubectl apply -f ./pod.json

# 将控制台输入的JSON配置应用到Pod
cat pod.json | kubectl apply -f -

kubectl patch

使用补丁修改,更新资源的字段,也就是修改资源的部分内容

官方文档

语法

1
kubectl patch (-f FILENAME | TYPE NAME) -p PATCH

选项

  • -f, --filename=[]: 包含配置信息的文件名,目录名或者URL。
  • --include-extended-apis[=true]: If true, include definitions of new APIs via calls to the API server. [default true]
  • -o, --output="": 输出格式,使用“-o name”来输出简短格式(资源类型/资源名)。
  • --record[=false]: 在资源注释中记录当前 kubectl 命令。
  • -R, --recursive[=false]: Process the directory used in -f, –filename recursively. Useful when you want to manage related manifests organized within the same directory.
  • --schema-cache-dir="/tmp/kubectl.schema": 如果不为空,将API schema缓存为指定文件,默认缓存到“/tmp/kubectl.schema”。
  • --validate[=true]: 如果为true,在发送到服务端前先使用schema来验证输入。

示例

1
2
3
4
5
# 部分更新节点
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'

# 更新容器镜像;spec.containers[*].name 是必须的,因为这是合并的关键字
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

kubectl replace

通过文件或者标准输入替换原有资源

官方文档

语法

1
kubectl replace -f FILENAME

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 重启pod
kubectl get pod nginx2 -n default -o yaml|kubectl replace --force -f -


# Replace a pod using the data in pod.json.
[root@master ~]# kubectl replace -f ./pod.json


# Replace a pod based on the JSON passed into stdin.
[root@master ~]# cat pod.json | kubectl replace -f -


# Update a single-container pod’s image version (tag) to v4
[root@master ~]# kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*[root@master ~]#/\1:v4/' | kubectl replace -f -


# Force replace, delete and then re-create the resource
[root@master ~]# kubectl replace --force -f ./pod.json

kubectl wait

官方文档

kubectl convert

转换配置文件为不同的API版本,支持YAML和JSON格式。

该命令将配置文件名,目录或URL作为输入,并将其转换为指定的版本格式,如果目标版本未指定或不支持,则转换为最新版本。

默认输出将以YAML格式打印出来,可以使用- o选项改变输出格式。

官方文档

语法

1
convert -f FILENAME

示例

1
2
3
4
5
6
7
8
9
10
11

# 将“pod.yaml”转换为最新版本并打印到stdout。
kubectl convert -f pod.yaml


# 将“pod.yaml”指定的资源的实时状态转换为最新版本#,并以json格式打印到stdout。
kubectl convert -f pod.yaml --local -o json


# 将当前目录下的所有文件转换为最新版本,并将其全部创建。
kubectl convert -f . | kubectl create -f -

kubectl kustomize

官方文档


05-kubectl 命令之高级命令
https://flepeng.github.io/042-云原生-02-kubernetes-13-命令-kubectl-05-kubectl-命令之高级命令/
作者
Lepeng
发布于
2023年3月1日
许可协议