本文章仍在施工中。。。。

http://docs.kubernetes.org.cn/669.html

# 概览

命令描述
create创建资源
delete删除资源
get获取资源信息
expose创建 Service 并暴露端口
set配置或修改应用资源
explain显示资源文档信息
edit编辑资源信息
label更新资源标签
annotate更新资源注解信息
completion设置命令自动补全
rollout管理资源的版本与滚动更新
scale扩容或缩容 Pod 数量
autoscale自动弹性伸缩 Pod 数量
certificate管理证书资源与授权
cluster-info显示集群信息
top查看资源 CPU、内存使用率
cordon标记节点不可调度
uncordon标记节点可调度
drain维护期间排除节点(驱逐 Pod + 标记不可调度)
taint给节点设置污点
describe显示资源详细信息
logs打印容器日志
exec进入容器执行命令
attach连接到正在运行的容器
cp在 Pod 与本地之间拷贝文件
api-versions打印支持的 API 版本
help查看命令帮助
config修改 kubeconfig 配置文件
version打印客户端和服务端版本
apply应用资源配置(不存在则创建)
patch补丁方式修改资源部分字段
replace替换原有资源
convert在不同 API 版本间转换配置文件

# 基础命令

# create

create 命令用于根据文件或者输入来创建资源

创建 Deployment 和 Service 资源

[root@master ~]# kubectl create -f demo-deployment.yaml
[root@master ~]# kubectl create -f demo-service.yaml

create 和 apply 的差异:create 用于全新创建,第二次执行会报错资源已经存在,apply 支持新建和更新,第二次执行,若配置文件修改,则会增量更新差异

不要先用 create 创建资源,再用 apply 更新(可能导致注解缺失, apply 无法正确对比差异);建议统一用 apply 管理资源。

# delete

delete 命令用于删除资源

根据 yaml 文件删除对应的资源,但是 yaml 文件并不会被删除,这样更加高效

[root@master ~]# kubectl delete -f demo-deployment.yaml 
[root@master ~]# kubectl delete -f demo-service.yaml

也可以通过具体的资源名称来进行删除,使用这个删除资源,同时删除 deployment 和 service 资源

[root@master ~]# kubectl delete < 资源类型 > < 资源名称 >
# 删除单个 pod,若有控制器则会重建
[root@kubernetes-master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS      AGE
nginx-85b98978db-lhmzl   1/1     Running   2 (19h ago)   10d
[root@kubernetes-master ~]# kubectl delete pod nginx-85b98978db-lhmzl
pod "nginx-85b98978db-lhmzl" deleted
[root@kubernetes-master ~]# kubectl get pod
NAME                     READY   STATUS              RESTARTS   AGE
nginx-85b98978db-spnb2   0/1     ContainerCreating   0          2s
# 若 pod 由 deployment 管理,需要删除控制器
[root@kubernetes-master ~]# kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   0/1     1            0           10d
[root@kubernetes-master ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
[root@kubernetes-master ~]# kubectl get pod
NAME                     READY   STATUS        RESTARTS   AGE
nginx-85b98978db-spnb2   0/1     Terminating   0          103s		# 优雅退出机制
[root@kubernetes-master ~]# kubectl delete svc nginx
service "nginx" deleted

# get

get 命令用于获取资源信息

# 查看所有命名空间的 pod

kubectl get pod --all-namespaceskubectl get pods -A 一样效果,都是查看所有命名空间的 pod,可以加上 -owide ,查看运行在哪个主机上。

[root@kubernetes-master ~]# kubectl get all
NAME                         READY   STATUS    RESTARTS      AGE
pod/nginx-85b98978db-lhmzl   1/1     Running   2 (17m ago)   10d
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT (S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        10d
service/nginx        NodePort    10.101.21.137   <none>        80:32639/TCP   10d
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   1/1     1            1           10d
NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-85b98978db   1         1         1       10d
[root@kubernetes-master ~]# kubectl get pod -A
NAMESPACE      NAME                                        READY   STATUS    RESTARTS      AGE
default        nginx-85b98978db-lhmzl                      1/1     Running   2 (17m ago)   10d
kube-flannel   kube-flannel-ds-qqg7p                       1/1     Running   2 (18m ago)   10d
kube-flannel   kube-flannel-ds-vt655                       1/1     Running   2 (18m ago)   10d
kube-flannel   kube-flannel-ds-zj5xl                       1/1     Running   2 (17m ago)   10d
kube-system    coredns-6d8c4cb4d-2jffp                     1/1     Running   2 (18m ago)   10d
kube-system    coredns-6d8c4cb4d-lwcpw                     1/1     Running   2 (18m ago)   10d
kube-system    etcd-kubernetes-master                      1/1     Running   3 (18m ago)   10d
kube-system    kube-apiserver-kubernetes-master            1/1     Running   3 (18m ago)   10d
kube-system    kube-controller-manager-kubernetes-master   1/1     Running   3 (18m ago)   10d
kube-system    kube-proxy-2dd5k                            1/1     Running   2 (18m ago)   10d
kube-system    kube-proxy-8tcp2                            1/1     Running   3 (18m ago)   10d
kube-system    kube-proxy-dljq6                            1/1     Running   2 (17m ago)   10d
kube-system    kube-scheduler-kubernetes-master            1/1     Running   3 (18m ago)   10d
[root@kubernetes-master ~]# kubectl get pod --all-namespaces
NAMESPACE      NAME                                        READY   STATUS    RESTARTS      AGE
default        nginx-85b98978db-lhmzl                      1/1     Running   2 (18m ago)   10d
kube-flannel   kube-flannel-ds-qqg7p                       1/1     Running   2 (18m ago)   10d
kube-flannel   kube-flannel-ds-vt655                       1/1     Running   2 (18m ago)   10d
kube-flannel   kube-flannel-ds-zj5xl                       1/1     Running   2 (18m ago)   10d
kube-system    coredns-6d8c4cb4d-2jffp                     1/1     Running   2 (18m ago)   10d
kube-system    coredns-6d8c4cb4d-lwcpw                     1/1     Running   2 (18m ago)   10d
kube-system    etcd-kubernetes-master                      1/1     Running   3 (18m ago)   10d
kube-system    kube-apiserver-kubernetes-master            1/1     Running   3 (18m ago)   10d
kube-system    kube-controller-manager-kubernetes-master   1/1     Running   3 (18m ago)   10d
kube-system    kube-proxy-2dd5k                            1/1     Running   2 (18m ago)   10d
kube-system    kube-proxy-8tcp2                            1/1     Running   3 (18m ago)   10d
kube-system    kube-proxy-dljq6                            1/1     Running   2 (18m ago)   10d
kube-system    kube-scheduler-kubernetes-master            1/1     Running   3 (18m ago)   10d

# 查看命名空间的所有资源

kubectl get all -n <namespace> 查看某一个命名空间下的所有资源。

[root@kubernetes-master ~]# kubectl get all -n kube-system
NAME                                            READY   STATUS    RESTARTS        AGE
pod/coredns-6d8c4cb4d-m8lv8                     1/1     Running   5 (3h57m ago)   9d
pod/coredns-6d8c4cb4d-p8qqm                     1/1     Running   5 (3h57m ago)   9d
pod/etcd-kubernetes-master                      1/1     Running   5 (3h57m ago)   9d
pod/kube-apiserver-kubernetes-master            1/1     Running   5 (3h57m ago)   9d
pod/kube-controller-manager-kubernetes-master   1/1     Running   5 (3h57m ago)   9d
pod/kube-proxy-74bt9                            1/1     Running   5 (3h57m ago)   9d
pod/kube-proxy-cdkjc                            1/1     Running   5 (3h57m ago)   9d
pod/kube-proxy-ph76x                            1/1     Running   6 (3h57m ago)   9d
pod/kube-scheduler-kubernetes-master            1/1     Running   5 (3h57m ago)   9d
pod/metrics-server-7c4866c4fd-h25jh             1/1     Running   5 (3h57m ago)   8d
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT (S)                  AGE
service/kube-dns         ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   9d
service/metrics-server   ClusterIP   10.111.183.10   <none>        443/TCP                  8d
NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/kube-proxy   3         3         3       3            3           kubernetes.io/os=linux   9d
NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/coredns          2/2     2            2           9d
deployment.apps/metrics-server   1/1     1            1           8d
NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/coredns-6d8c4cb4d           2         2         2       9d
replicaset.apps/metrics-server-5568dcfc59   0         0         0       8d
replicaset.apps/metrics-server-7c4866c4fd   1         1         1       8d

# 查看 pod 列表

  • 查看指定命名空间的 pod kubectl get pod -n kube-system ,在 -n 后指定命名空间,若不指定,则 kubectl get pod 默认查看的命名空间是 default
[root@kubernetes-master ~]# kubectl get pod -n kube-system
NAME                                        READY   STATUS    RESTARTS      AGE
coredns-6d8c4cb4d-2jffp                     1/1     Running   2 (21m ago)   10d
coredns-6d8c4cb4d-lwcpw                     1/1     Running   2 (21m ago)   10d
etcd-kubernetes-master                      1/1     Running   3 (21m ago)   10d
kube-apiserver-kubernetes-master            1/1     Running   3 (21m ago)   10d
kube-controller-manager-kubernetes-master   1/1     Running   3 (21m ago)   10d
kube-proxy-2dd5k                            1/1     Running   2 (21m ago)   10d
kube-proxy-8tcp2                            1/1     Running   3 (21m ago)   10d
kube-proxy-dljq6                            1/1     Running   2 (21m ago)   10d
kube-scheduler-kubernetes-master            1/1     Running   3 (21m ago)   10d

# 实时监控 Pod 状态

-w--watch 的缩写,作用是实时监控 Kubernetes 资源(这里是 Pod)的状态变化,并持续输出变化日志。

[root@kubernetes-master ~]# kubectl get pod -w
NAME                     READY   STATUS              RESTARTS   AGE
nginx-85b98978db-8z46s   0/1     ContainerCreating   0          10s
nginx-85b98978db-c64jw   0/1     ContainerCreating   0          10s
nginx-85b98978db-c64jw   1/1     Running             0          13s
nginx-85b98978db-8z46s   1/1     Running             0          13s

# 查看 pod 所在的命名空间

kubectl get pod --all-namespaces -o wide 或者 kubectl get pod -A -o wide

[root@kubernetes-master ~]# kubectl get pod --all-namespaces -o wide
NAMESPACE      NAME                                        READY   STATUS    RESTARTS      AGE   IP              NODE                NOMINATED NODE   READINESS GATES
default        nginx-85b98978db-lhmzl                      1/1     Running   2 (26m ago)   10d   10.244.2.5      kubernetes-node2    <none>           <none>
kube-flannel   kube-flannel-ds-qqg7p                       1/1     Running   2 (26m ago)   10d   192.168.0.201   kubernetes-node1    <none>           <none>
kube-flannel   kube-flannel-ds-vt655                       1/1     Running   2 (26m ago)   10d   192.168.0.200   kubernetes-master   <none>           <none>
kube-flannel   kube-flannel-ds-zj5xl                       1/1     Running   2 (26m ago)   10d   192.168.0.202   kubernetes-node2    <none>           <none>
kube-system    coredns-6d8c4cb4d-2jffp                     1/1     Running   2 (26m ago)   10d   10.244.0.7      kubernetes-master   <none>           <none>
kube-system    coredns-6d8c4cb4d-lwcpw                     1/1     Running   2 (26m ago)   10d   10.244.0.6      kubernetes-master   <none>           <none>
kube-system    etcd-kubernetes-master                      1/1     Running   3 (26m ago)   10d   192.168.0.200   kubernetes-master   <none>           <none>
kube-system    kube-apiserver-kubernetes-master            1/1     Running   3 (26m ago)   10d   192.168.0.200   kubernetes-master   <none>           <none>
kube-system    kube-controller-manager-kubernetes-master   1/1     Running   3 (26m ago)   10d   192.168.0.200   kubernetes-master   <none>           <none>
kube-system    kube-proxy-2dd5k                            1/1     Running   2 (26m ago)   10d   192.168.0.201   kubernetes-node1    <none>           <none>
kube-system    kube-proxy-8tcp2                            1/1     Running   3 (26m ago)   10d   192.168.0.200   kubernetes-master   <none>           <none>
kube-system    kube-proxy-dljq6                            1/1     Running   2 (26m ago)   10d   192.168.0.202   kubernetes-node2    <none>           <none>
kube-system    kube-scheduler-kubernetes-master            1/1     Running   3 (26m ago)   10d   192.168.0.200   kubernetes-master   <none>           <none>

# 查看 pod 节点标签信息

  • 显示 pod 节点的标签信息 kubectl get pod --show-labels
[root@kubernetes-master ~]# kubectl get pod --show-labels
NAME                     READY   STATUS    RESTARTS      AGE   LABELS
nginx-85b98978db-lhmzl   1/1     Running   2 (32m ago)   10d   app=nginx,pod-template-hash=85b98978db
  • 根据指定标签匹配到具体的 pod kubectl get pods -l app=example
[root@kubernetes-master ~]# kubectl get pod -A -l component=etcd
NAMESPACE     NAME                     READY   STATUS    RESTARTS      AGE
kube-system   etcd-kubernetes-master   1/1     Running   3 (35m ago)   10d

# 查看 pod 详细信息

kubectl get pod -o wide 可以查看 pod 具体运行在哪个节点上(ip 地址信息)

[root@kubernetes-master ~]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS      AGE   IP           NODE               NOMINATED NODE   READINESS GATES
nginx-85b98978db-lhmzl   1/1     Running   2 (40m ago)   10d   10.244.2.5   kubernetes-node2   <none>           <none>

# 查看 node 列表

kubectl get node 或者 kubectl get nodes

[root@kubernetes-master ~]# kubectl get nodes
NAME                STATUS   ROLES                  AGE   VERSION
kubernetes-master   Ready    control-plane,master   10d   v1.23.6
kubernetes-node1    Ready    <none>                 10d   v1.23.6
kubernetes-node2    Ready    <none>                 10d   v1.23.6

# 查看 node 节点的标签信息

kubectl get nodes --show-labels

[root@kubernetes-master ~]# kubectl get nodes --show-labels
NAME                STATUS   ROLES                  AGE   VERSION   LABELS
kubernetes-master   Ready    control-plane,master   10d   v1.23.6   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubernetes-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
kubernetes-node1    Ready    <none>                 10d   v1.23.6   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubernetes-node1,kubernetes.io/os=linux
kubernetes-node2    Ready    <none>                 10d   v1.23.6   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubernetes-node2,kubernetes.io/os=linux

# 查看服务详情信息

kubectl get svc 显示了服务名称,类型,集群 ip,端口,时间等信息

[root@kubernetes-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT (S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        10d
nginx        NodePort    10.101.21.137   <none>        80:32639/TCP   10d
[root@kubernetes-master ~]# kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT (S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   10d

# 查看所有命名空间

kubectl get nskubectl get namespaces 都可以查看所有的命名空间

[root@kubernetes-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   10d
kube-flannel      Active   10d
kube-node-lease   Active   10d
kube-public       Active   10d
kube-system       Active   10d

# 查看目前所有的 replica set

kubectl get rs 显示了所有的 pod 的副本数,pod 的可用数量和状态等信息

[root@kubernetes-master ~]# kubectl get rs
NAME               DESIRED   CURRENT   READY   AGE
nginx-85b98978db   1         1         1       10d

# 查看已部署的所有应用

kubectl get deploykubectl get deployments 可以看到容器,以及容器所用的镜像,标签等信息

[root@kubernetes-master ~]# kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           10d
[root@kubernetes-master ~]# kubectl get deploy -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
nginx   1/1     1            1           10d   nginx        nginx    app=nginx

# 查看事件

kubectl get ev 可以查看 K8S 事件

[root@kubernetes-master ~]# kubectl get ev | tail -n5
51m         Warning   FailedCreatePodSandBox    pod/nginx-85b98978db-lhmzl   Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "0f577ca11cceb88b4b8f74199a903ef590cc2888209fd4c49e8ae5dc5854554b" network for pod "nginx-85b98978db-lhmzl": networkPlugin cni failed to set up pod "nginx-85b98978db-lhmzl_default" network: open /run/flannel/subnet.env: no such file or directory
51m         Normal    Pulling                   pod/nginx-85b98978db-lhmzl   Pulling image "nginx"
50m         Normal    Pulled                    pod/nginx-85b98978db-lhmzl   Successfully pulled image "nginx" in 46.606575516s
50m         Normal    Created                   pod/nginx-85b98978db-lhmzl   Created container nginx
50m         Normal    Started                   pod/nginx-85b98978db-lhmzl   Started container nginx

# expose

expose 命令:创建一个 service 服务,并且暴露端口让外部可以访问

# 创建一个 nginx 服务并且暴露端口让外界可以访问
[root@master ~]# kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service

# set

set 命令:配置应用的一些特定资源,也可以修改应用已有的资源

[root@master ~]# set SUBCOMMAND	# 使用 kubectl set --help 查看

子命令

  • env
  • image
  • resources
  • selector
  • serviceaccount
  • subject

kubectl set resources

resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]

这个命令用于设置资源的一些范围限制。

资源对象中的 Pod 可以指定计算资源需求(CPU - 单位 m、内存 - 单位 Mi),即使用的最小资源请求(Requests),限制(Limits)的最大资源需求,Pod 将保证使用在设置的资源数量范围。

对于每个 Pod 资源,如果指定了 Limits(限制)值,并省略了 Requests(请求),则 Requests 默认为 Limits 的值。

可用资源对象包括 (支持大小写):replicationcontroller、deployment、daemonset、job、replicaset。

# 将 deployment 的 nginx 容器 cpu 限制为 “200m”,将内存设置为 “512Mi”
[root@master ~]# kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
# 设置所有 nginx 容器中 Requests 和 Limits
[root@master ~]# kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
# 删除 nginx 中容器的计算资源值
[root@master ~]# kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

kubectl set selector

selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]

设置资源的 selector(选择器)。如果在调用 "set selector" 命令之前已经存在选择器,则新创建的选择器将覆盖原来的选择器。

selector 必须以字母或数字开头,最多包含 63 个字符,可使用:字母、数字、连字符 "-" 、点 ".“和下划线” _"。如果指定了–resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。

注意:目前 selector 命令只能用于 Service 对象。

kubectl set image

image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

用于更新现有资源的容器镜像。可用资源对象包括:pod (po)、replicationcontroller (rc)、deployment (deploy)、daemonset (ds)、job、replicaset (rs)。

# 将 deployment 中的 nginx 容器镜像设置为 “nginx:1.9.1”
[root@master ~]# kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
# 所有 deployment 和 rc 的 nginx 容器镜像更新为 “nginx:1.9.1”
[root@master ~]# kubectl set image deployments,rc nginx=nginx:1.9.1 --all
# 将 daemonset abc 的所有容器镜像更新为 “nginx:1.9.1”
[root@master ~]# kubectl set image daemonset abc *=nginx:1.9.1
# 从本地文件中更新 nginx 容器镜像
[root@master ~]# kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml

# explain

explain 命令:用于显示资源文档信息

[root@master ~]# kubectl explain rs

# edit

edit 命令:用于编辑资源信息

Kubernetes YAML 对缩进极其严格,必须用 2 个空格,不能用 Tab,层级必须匹配。

kubectl edit deployment <deployment_name> -n <namespace>
kubectl edit service <service_name> -n <namespace>
# 查看 deployment 信息
[root@kubernetes-master ~]# kubectl get deployment -n kube-system
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
coredns          2/2     2            2           114m
metrics-server   0/0     0            0           36m
# 编辑 deployment metrics-server
[root@kubernetes-master ~]# kubectl edit deployment -n kube-system metrics-server
# 编辑 service 类型的 nginx 的一些信息
[root@master ~]# kubectl edit service/nginx
# 例 1:扩容 / 缩容
[root@kubernetes-master ~]# kubectl get deployment nginx
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           131m
# 编辑 deploymen,将副本数(spec:  replicas: 0)设置为 0
[root@kubernetes-master ~]# kubectl edit deployment nginx
deployment.apps/nginx edited
[root@kubernetes-master ~]# kubectl get pod
No resources found in default namespace.
# 例 2:Pod metrics-server 一直构建失败,将 Deployment 换国内源
# 1. 删除故障 Pod(删除后 Deployment 会重建 Pod)
kubectl delete rs -n kube-system metrics-server-6c49cf6978
# 2. 编辑 metrics-server 的 Deployment,修改 image: k8s.gcr.io/metrics-server/metrics-server:v0.5.2
kubectl edit deployment -n kube-system metrics-server
# 3. 用 patch 命令编辑 metrics-server 部署配置,添加跳过证书验证参数
kubectl patch deployment metrics-server -n kube-system --type='json' -p='[{"op":"add","path":"/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]'
kubectl get deployment metrics-server -n kube-system -o jsonpath='{.spec.template.spec.containers [0].args}'
# 4. 保存退出后,Deployment 会自动重建 Pod
[root@kubernetes-master ~]# kubectl get pod -n kube-system
NAME                                        READY   STATUS    RESTARTS       AGE
coredns-6d8c4cb4d-m8lv8                     1/1     Running   0              125m
coredns-6d8c4cb4d-p8qqm                     1/1     Running   0              125m
etcd-kubernetes-master                      1/1     Running   0              125m
kube-apiserver-kubernetes-master            1/1     Running   0              125m
kube-controller-manager-kubernetes-master   1/1     Running   0              125m
kube-proxy-74bt9                            1/1     Running   0              112m
kube-proxy-cdkjc                            1/1     Running   0              125m
kube-proxy-ph76x                            1/1     Running   1 (103m ago)   111m
kube-scheduler-kubernetes-master            1/1     Running   0              125m
metrics-server-7c4866c4fd-h25jh             1/1     Running   0              3m42s

# 设置命令

# label

label 命令:用于更新(增加、修改或删除)资源上的 label(标签)

label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长 63 个字符。
如果 --overwrite 为 true,则可以覆盖已有的 label,否则尝试覆盖 label 将会报错。
如果指定了 --resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。

给名为 foo 的 Pod 添加 label unhealthy=true

[root@master ~]# kubectl label pods foo unhealthy=true

给名为 foo 的 Pod 修改 label 为 ‘status’ /value ‘unhealthy’,且覆盖现有的 value

[root@master ~]# kubectl label --overwrite pods foo status=unhealthy

给 namespace 中的所有 pod 添加 label

[root@master ~]# kubectl label  pods --all status=unhealthy

仅当 resource-version=1 时才更新 名为 foo 的 Pod 上的 label

[root@master ~]# kubectl label pods foo status=unhealthy --resource-version=1

删除名为 “bar” 的 label 。(使用 “ - ” 减号相连)

[root@master ~]# kubectl label pods foo bar-

# annotate

annotate 命令:更新一个或多个资源的 Annotations 信息。也就是注解信息,可以方便的查看做了哪些操作。

annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

Annotations 由 key/value 组成。
Annotations 的目的是存储辅助数据,特别是通过工具和系统扩展操作的数据,更多介绍在这里。
如果–overwrite 为 true,现有的 annotations 可以被覆盖,否则试图覆盖 annotations 将会报错。
如果设置了–resource-version,则更新将使用此 resource version,否则将使用原有的 resource version。

更新 Pod “foo”,设置 annotation “description” 的 value “my frontend”,如果同一个 annotation 多次设置,则只使用最后设置的 value 值

[root@master ~]# kubectl annotate pods foo description=‘my frontend’

根据 “pod.json” 中的 type 和 name 更新 pod 的 annotation

[root@master ~]# kubectl annotate -f pod.json description='my frontend'

更新 Pod"foo",设置 annotation “description” 的 value “my frontend running nginx”,覆盖现有的值

[root@master ~]# kubectl annotate --overwrite pods foo description='my frontend running nginx'

更新 namespace 中的所有 pod

[root@master ~]# kubectl annotate pods --all description='my frontend running nginx'

只有当 resource-version 为 1 时,才更新 pod ‘foo’

[root@master ~]# kubectl annotate pods foo description='my frontend running nginx' --resource-version=1

通过删除名为 “description” 的 annotations 来更新 pod ‘foo’。 不需要 -overwrite flag。

[root@master ~]# kubectl annotate pods foo description-

# completion

completion 命令:用于设置 kubectl 命令自动补全

  • bash
# 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包
[root@master ~]# source <(kubectl completion bash)
# 在 bash shell 中永久的添加自动补全
[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
  • ZSH
# 在 zsh 中设置当前 shell 的自动补全
[root@master ~]# source <(kubectl completion zsh)  
# 在 zsh shell 中永久的添加自动补全
[root@master ~]# echo "if [ [root@master ~]#commands [kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc

# 部署命令

# rollout

rollout 命令:用于对资源进行管理

可用资源包括:deployments,daemonsets。

[root@master ~]# kubectl rollout SUBCOMMAND

子命令:

  • history (查看历史版本)
  • pause (暂停资源)
  • resume (恢复暂停资源)
  • status (查看资源状态)
  • undo (回滚版本)

回滚到之前的 deployment

[root@master ~]# kubectl rollout undo deployment/abc

查看 daemonet 的状态

[root@master ~]# kubectl rollout status daemonset/foo

滚动更新

[root@master ~]# kubectl rollout restart deployment/nginx

# scale

scale 命令:扩容或缩容 Deployment、ReplicaSet、Replication Controller 或 Job 中 Pod 数量

kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

scale 也可以指定多个前提条件,如:当前副本数量或 --resource-version ,进行伸缩比例设置前,系统会先验证前提条件是否成立。这个就是弹性伸缩策略。

将名为 foo 中的 pod 副本数设置为 3。

[root@master ~]# kubectl scale --replicas=3 rs/foo
kubectl scale deploy/nginx --replicas=30

将由 “foo.yaml” 配置文件中指定的资源对象和名称标识的 Pod 资源副本设为 3

[root@master ~]# kubectl scale --replicas=3 -f foo.yaml

如果当前副本数为 2,则将其扩展至 3。

[root@master ~]# kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

设置多个 RC 中 Pod 副本数量

[root@master ~]# kubectl scale --replicas=5 rc/foo rc/bar rc/baz

# autoscale

autoscale 命令:这个比 scale 更加强大,也是弹性伸缩策略 ,它是根据流量的多少来自动进行扩展或者缩容。

kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]

指定 Deployment、ReplicaSet 或 ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的 pod 数量。

使用 Deployment “foo” 设定,使用默认的自动伸缩策略,指定目标 CPU 使用率,使其 Pod 数量在 2 到 10 之间

[root@master ~]# kubectl autoscale deployment foo --min=2 --max=10

使用 RC “foo” 设定,使其 Pod 的数量介于 1 和 5 之间,CPU 使用率维持在 80%

[root@master ~]# kubectl autoscale rc foo --max=5 --cpu-percent=80

# 集群管理命令

查看集群的初始化信息【pod 使用镜像和网段等】

[root@kubernetes-master ~]# kubectl get cm -o yaml -n kube-system kubeadm-config
apiVersion: v1
data:
  ClusterConfiguration: |
    apiServer:
      extraArgs:
        authorization-mode: Node,RBAC
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta3
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controllerManager: {}
    dns: {}
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: registry.aliyuncs.com/google_containers
    kind: ClusterConfiguration
    kubernetesVersion: v1.23.6
    networking:
      dnsDomain: cluster.local
      podSubnet: 10.244.0.0/16
      serviceSubnet: 10.96.0.0/12
    scheduler: {}
kind: ConfigMap
metadata:
  creationTimestamp: "2026-01-01T17:29:25Z"
  name: kubeadm-config
  namespace: kube-system
  resourceVersion: "201"
  uid: 3cccfdce-d0bc-4cea-b55b-9b6e8c12554e
[root@kubernetes-master ~]#

# certificate

certificate 命令:用于证书资源管理,授权等

当有 node 节点要向 master 请求,那么是需要 master 节点授权的

[root@master ~]# kubectl certificate approve node-csr-81F5uBehyEyLWco5qavBsxc1GzFcZk3aFM3XW5rT3mw node-csr-Ed0kbFhc_q7qx14H3QpqLIUs0uKo036O2SnFpIheM18

# cluster-info

cluster-info 命令:显示集群信息

[root@kubernetes-master ~]# kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.200:6443
CoreDNS is running at https://192.168.0.200:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

# top

top 命令:用于查看资源的 cpu,内存磁盘等资源的使用率

需要安装 metrics-serverkubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.2/components.yaml

查看 pod 使用情况

# 查看所有 pod
[root@master ~]# kubectl top pod --all-namespaces
# 查看指定 pod
[root@master ~]# kubectl top pod -n < 命名空间 >

查看 node 的使用情况

[root@master ~]# kubectl top nodes

# cordon

cordon 命令:用于标记某个节点不可调度,执行完后,对应节点状态变为 SchedulingDisabled

标记 my-node 为 unschedulable, 禁止 pod 被调度过来。注意这时现有的 pod 还会继续运行,不会被驱逐。

[root@kubernetes-master ~]# kubectl cordon kubernetes-node1
node/kubernetes-node1 cordoned
[root@kubernetes-master ~]# kubectl get nodes
NAME                STATUS                     ROLES                  AGE   VERSION
kubernetes-master   Ready                      control-plane,master   83m   v1.23.6
kubernetes-node1    Ready,SchedulingDisabled   <none>                 69m   v1.23.6
kubernetes-node2    Ready                      <none>                 69m   v1.23.6

# uncordon

uncordon 命令:用于标签节点可以调度

与 cordon 相反,标记 my-node 为 允许调度。

[root@master ~]# kubectl uncordon my-node

# drain

drain 命令: 用于在维护期间排除节点。

drain 字面意思为排水,实际就是把 my-node 的 pod 平滑切换到其他 node,同时标记 pod 为 SchedulingDisabled ,也就是包含了 cordon 命令。

[root@master ~]# kubectl drain my-node

使用时注意以下几点:

  1. drain 只会驱逐 ** 非 DaemonSet** 的 Pod,DaemonSet Pod 会保留(因为 DaemonSet 要求每个节点必须运行);
  2. emptyDir 是临时存储,删除 Pod 后数据会丢失,确认业务无状态再执行 --delete-emptydir-data
  3. 生产环境建议先缩容业务 Deployment/StatefulSet,再执行 drain,减少业务中断时间;
  4. StatefulSet 类型的 Pod 若使用持久化存储(PVC),drain 时会正常驱逐,数据不会丢失。
kubectl drain kubernetes-node2 \
  --ignore-daemonsets \       # 忽略 DaemonSet 管理的 Pod
  --force 			\		  # 直接删除不由 workload 对象(Deployment、Job 等)管理的 pod
  --delete-local-data \       # 允许删除含 emptyDir 本地存储的 Pod
  --timeout=120s \            # 超时时间(可选)
  --grace-period=30           # 优雅终止时间(可选)

# taint

taint 命令:用于给某个 Node 节点设置污点

污点 (Taint) 的组成

使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,甚至将 Node 已经存在的 Pod 驱逐出去

每个污点的组成如: key=value:effect
每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。

当前 taint effect 支持如下三个选项:

  • NoSchedule :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上

  • PreferNoSchedule :表示 k8s 将尽量避免将 Pod 调度到具有该污点的 Node 上

  • NoExecute :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去

污点的设置、查看和去除

设置污点

kubectl taint nodes k8s-node2 check=yuanzhang:NoExecute

节点说明中,查找 Taints 字段

kubectl describe nodes k8s-node2

去除污点

kubectl taint nodes k8s-node2 check:NoExecute-

# 调试命令

# describe

describe 命令:显示特定 pod 资源的详细信息

kubectl describe pod -n <namespace>  <podename>
[root@kubernetes-master ~]# kubectl describe pod  -n kube-system  etcd-kubernetes-master
Name:                 etcd-kubernetes-master
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Node:                 kubernetes-master/192.168.0.200
Start Time:           Fri, 02 Jan 2026 01:29:32 +0800
Labels:               component=etcd
                      tier=control-plane
Annotations:          kubeadm.kubernetes.io/etcd.advertise-client-urls: https://192.168.0.200:2379
                      kubernetes.io/config.hash: af03a67fa2953c77494bdd8443bf80d6
                      kubernetes.io/config.mirror: af03a67fa2953c77494bdd8443bf80d6
                      kubernetes.io/config.seen: 2026-01-02T01:29:31.755014368+08:00
                      kubernetes.io/config.source: file
                      seccomp.security.alpha.kubernetes.io/pod: runtime/default
Status:               Running
IP:                   192.168.0.200
IPs:
  IP:           192.168.0.200
Controlled By:  Node/kubernetes-master
Containers:
  etcd:
    Container ID:  containerd://775201c1757c107aa5b4465a52a8e453433c5dc3b4fb5f109baa848411a4d0d0
    Image:         registry.aliyuncs.com/google_containers/etcd:3.5.1-0
    Image ID:      registry.aliyuncs.com/google_containers/etcd@sha256:64b9ea357325d5db9f8a723dcf503b5a449177b17ac87d69481e126bb724c263
    Port:          <none>
    Host Port:     <none>
    Command:
      etcd
      --advertise-client-urls=https://192.168.0.200:2379
      --cert-file=/etc/kubernetes/pki/etcd/server.crt
      --client-cert-auth=true
      --data-dir=/var/lib/etcd
      --initial-advertise-peer-urls=https://192.168.0.200:2380
      --initial-cluster=kubernetes-master=https://192.168.0.200:2380
      --key-file=/etc/kubernetes/pki/etcd/server.key
      --listen-client-urls=https://127.0.0.1:2379,https://192.168.0.200:2379
      --listen-metrics-urls=http://127.0.0.1:2381
      --listen-peer-urls=https://192.168.0.200:2380
      --name=kubernetes-master
      --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
      --peer-client-cert-auth=true
      --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
      --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
      --snapshot-count=10000
      --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    State:          Running
      Started:      Fri, 02 Jan 2026 01:29:22 +0800
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        100m
      memory:     100Mi
    Liveness:     http-get http://127.0.0.1:2381/health delay=10s timeout=15s period=10s #success=1 #failure=8
    Startup:      http-get http://127.0.0.1:2381/health delay=10s timeout=15s period=10s #success=1 #failure=24
    Environment:  <none>
    Mounts:
      /etc/kubernetes/pki/etcd from etcd-certs (rw)
      /var/lib/etcd from etcd-data (rw)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  etcd-certs:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/kubernetes/pki/etcd
    HostPathType:  DirectoryOrCreate
  etcd-data:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/etcd
    HostPathType:  DirectoryOrCreate
QoS Class:         Burstable
Node-Selectors:    <none>
Tolerations:       :NoExecute op=Exists
Events:            <none>

# logs

logs 命令:用于在一个 pod 中打印一个容器的日志,如果 pod 中只有一个容器,可以省略容器名

kubectl logs [-f] [-p] POD [-c CONTAINER]
# 参数选项:
-c, --container="": 容器名。
-f, --follow [=false]: 指定是否持续输出日志(实时日志)。
--interactive [=true]: 如果为 true,当需要时提示用户进行输入。默认为 true。
--limit-bytes=0: 输出日志的最大字节数。默认无限制。
-p, --previous [=false]: 如果为 true,输出 pod 中曾经运行过,但目前已终止的容器的日志。
--since=0: 仅返回相对时间范围,如 5s、2m 或 3h,之内的日志。默认返回所有日志。只能同时使用 since 和 since-time 中的一种。
--since-time="": 仅返回指定时间(RFC3339 格式)之后的日志。默认返回所有日志。只能同时使用 since 和 since-time 中的一种。
--tail=-1: 要显示的最新的日志条数。默认为 - 1,显示所有的日志。
--timestamps [=false]: 在日志中包含时间戳。

返回仅包含一个容器的 pod nginx 的日志快照

[root@master ~]# kubectl logs nginx

返回 pod ruby 中已经停止的容器 web-1 的日志快照

[root@master ~]# kubectl logs -p -c ruby web-1

持续输出 pod ruby 中的容器 web-1 的日志

[root@master ~]# kubectl logs -f -c ruby web-1

仅输出 pod nginx 中最近的 20 条日志

[root@master ~]# kubectl logs --tail=20 nginx

输出 pod nginx 中最近一小时内产生的所有日志

[root@master ~]# kubectl logs --since=1h nginx

# exec

exec 命令:进入容器进行交互,在容器中执行命令

kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
# 参数选项
-c, --container="": 容器名。如果未指定,使用 pod 中的一个容器。
-i, --stdin [=false]: 将控制台输入发送到容器。
-t, --tty [=false]: 将标准输入控制台作为容器的控制台输入。

进入 nginx 容器交互式页面

kubectl exec -it nginx-85b98978db-tclgz -- bash

不进入容器,直接执行命令

kubectl exec -it nginx-85b98978db-tclgz -- ls

# attach

attach 命令:连接到一个正在运行的容器。

kubectl attach POD -c CONTAINER
# 参数选项
- -c, --container="": 容器名。如果省略,则默认选择第一个 pod。
- -i, --stdin [=false]: 将控制台输入发送到容器。
- -t, --tty [=false]: 将标准输入控制台作为容器的控制台输入。

获取正在运行中的 pod nginx-85b98978db-tclgz 输出,默认连接到第一个容器

[root@kubernetes-master ~]# kubectl attach -it nginx-85b98978db-tclgz
error: Unable to use a TTY - container nginx did not allocate one
If you don't see a command prompt, try pressing enter.
^C [root@kubernetes-master ~]#

获取 pod nginx-85b98978db-tclgz 中,容器 nginx 的输出

[root@kubernetes-master ~]# kubectl attach nginx-85b98978db-tclgz -c nginx
If you don't see a command prompt, try pressing enter.
^C
[root@kubernetes-master ~]#

错误控制台的信息发送回客户端。

[root@kubernetes-master ~]# kubectl attach nginx-85b98978db-tclgz -c nginx -it
error: Unable to use a TTY - container nginx did not allocate one
If you don't see a command prompt, try pressing enter.
^C [root@kubernetes-master ~]#

# cp

cp 命令:拷贝文件或者目录到 pod 容器中,用于 pod 和外部的文件交换,类似于 docker 的 cp

kubectl cp <file-spec-src> <file-spec-dest> [options]

拷贝宿主机本地目录到 pod

[root@master ~]# kubectl cp /tmp/foo_dir <pod_name>:/tmp/bar_dir
# 示例
[root@kubernetes-master ~]# echo "hello" > testfile
[root@kubernetes-master ~]# kubectl cp testfile nginx-85b98978db-tclgz:/tmp
[root@kubernetes-master ~]# kubectl exec -it nginx-85b98978db-tclgz -- ls /tmp
testfile
[root@kubernetes-master ~]#

指定 namespace 的拷贝 pod 文件到宿主机本地目录

[root@master ~]# kubectl cp <namespace>/<pod_name>:/tmp/foo/tmp/bar

对于多容器 pod,用 - c 指定容器名

[root@master ~]# kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>

# 辅助命令

# api-servions

api-versions 命令:打印受支持的 api 版本信息

[root@master ~]# kubectl api-versions

# help

help 命令:用于查看命令帮助

# 显示全部的命令帮助提示
[root@master ~]# kubectl --help
# 具体的子命令帮助
[root@master ~]# kubectl create --help

# config

config 命令:用于修改 kubeconfig 配置文件(用于访问 api,例如配置认证信息)

设置 kubectl 与哪个 Kubernetes 集群进行通信并修改配置信息。

显示合并的 kubeconfig 配置信息(如果配置了多集群,可合并信息查看)

[root@master ~]# kubectl config view

同时使用多个 kubeconfig 文件并查看合并的配置

[root@master ~]# KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view

获取 e2e 用户的密码

[root@master ~]# kubectl config view -o jsonpath='{.users [?(@.name == "e2e")].user.password}'

查看当前所处的上下文

[root@master ~]# kubectl config current-context

查看多集群上下文等信息,CURRENT 是当前所处集群

[root@master ~]# kubectl config get-contexts 
CURRENT   NAME       CLUSTER   AUTHINFO   NAMESPACE
*         context    master    ccx        default
          context1   master1   ccx1       default

设置默认的上下文【多集群切换】

使用: kubectl config get-contexts 查看现在有的上下文(一般多集群才需要切换)

kubectl config use-context < 上下文名称 >

从集群 context 切换到集群 context1 这个上下文上

[root@master ~]# kubectl config get-contexts 
CURRENT   NAME       CLUSTER   AUTHINFO   NAMESPACE
*         context    master    ccx        default
          context1   master1   ccx1       default
[root@master ~]# 
[root@master ~]# kubectl config use-context context1
Switched to context "context1".
[root@master ~]# 
[root@master ~]# kubectl config get-contexts 
CURRENT   NAME       CLUSTER   AUTHINFO   NAMESPACE
          context    master    ccx        default
*         context1   master1   ccx1       default

添加新的集群配置到 kubeconf 中,使用 basic auth 进行鉴权

[root@master ~]# kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword

使用特定的用户名和命名空间设置上下文。

[root@master ~]# kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce

# version

version 命令:打印客户端和服务端版本信息

# 打印客户端和服务端详细版本信息
[root@kubernetes-master ~]# kubectl version
Client Version: version.Info {Major:"1", Minor:"23", GitVersion:"v1.23.6", GitCommit:"ad3338546da947756e8a88aa6822e9c11e7eac22", GitTreeState:"clean", BuildDate:"2022-04-14T08:49:13Z", GoVersion:"go1.17.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info {Major:"1", Minor:"23", GitVersion:"v1.23.6", GitCommit:"ad3338546da947756e8a88aa6822e9c11e7eac22", GitTreeState:"clean", BuildDate:"2022-04-14T08:43:11Z", GoVersion:"go1.17.9", Compiler:"gc", Platform:"linux/amd64"}
# 打印精简信息
[root@kubernetes-master ~]# kubectl version --short
Client Version: v1.23.6
Server Version: v1.23.6

# 配置命令

# apply

apply 命令:通过文件名或者标准输入对资源应用配置

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

kubectl apply -f FILENAME [options]
# 参数选项
-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" 为快捷输出 (资源 /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="~/.kube/schema": 非空则将 API schema 缓存为指定文件,默认缓存到’[root@master ~]#HOME/.kube/schema’
--validate [=true]: 如果为 true,在发送到服务端前先使用 schema 来验证输入。

将 pod.json 中的配置应用到 pod

[root@master ~]# kubectl apply -f ./pod.json

将控制台输入的 JSON 配置应用到 Pod

[root@master ~]# cat pod.json | kubectl apply -f -

从 URL 下载 yaml 并部署文件中定义的资源

[root@master ~]# kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.2/components.yaml

# patch

patch 命令:通过补丁的方式进行修改,更新资源的字段,即仅修改资源的部分内容。

[root@master ~]# kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'

使用合并键(Merge Key)更新容器的镜像; spec.containers [*].name

在更新列表型字段时,用于匹配列表中已有元素的唯一标识(如容器名 name ),确保只更新指定元素,不影响其他元素。

[root@master ~]# kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

# replace

replace 命令:通过文件或标准输入替换原有资源

kubectl replace -f < 文件名 >

使用 pod.json 中的数据替换一个 Pod

[root@master ~]# kubectl replace -f ./pod.json

基于标准输入传入的 JSON 数据替换一个 Pod

[root@master ~]# cat pod.json | kubectl replace -f -

将单容器 Pod 的镜像版本(标签)更新为 v4

[root@master ~]# kubectl get pod mypod -o yaml | sed's/\(image: myimage\):.*[root@master ~]#/\1:v4/' | kubectl replace -f -

强制替换:先删除资源,再重新创建该资源

[root@master ~]# kubectl replace --force -f ./pod.json

# convert

convert 命令:在不同的 API 版本之间转换配置文件

kubectl convert -f 文件名

pod.yaml 转换为最新版本并打印到标准输出

[root@master ~]# kubectl convert -f pod.yaml

pod.yaml 所指定资源的实时状态转换为最新版本,并以 JSON 格式打印到标准输出

[root@master ~]# kubectl convert -f pod.yaml --local -o json

将当前目录下的所有文件转换为最新版本,并全部创建这些资源

[root@master ~]# kubectl convert -f . | kubectl create -f -

# 格式化输出

要以特定格式将详细信息输出到终端窗口,可以将 -o--output 参数添加到支持的 kubectl 命令。

输出格式描述
-o=custom-columns=使用逗号分隔的自定义列列表打印表格
-o=custom-columns-file=使用 <filename> 文件的自定义列模板打印表格
-o=json输出 JSON 格式的 API 对象
-o=jsonpatch=打印 jsonpath 表达式中定义的字段
-o=jsonpatch-file=在 <filename> 文件中打印由 jsonpath 表达式中定义的字段
-o=name仅打印资源名称而不打印其他任何内容
-o=wide使用任何其他信息以纯文本格式输出,对于 pod 来说,包含了节点名称
-o=yaml输出 YAML 格式的 API 对象

# 日志级别

Kubectl 日志输出详细程度是通过 -v 或者 --v 来控制的,参数后跟了一个数字表示日志的级别。

详细程度描述
--v=0通常对此有用,始终对运维人员可见
--v=1如果不指定详细程度,则默认为该级别
--v=2有关服务的状态信息以及系统重大更改相关的日志信息,建议默认为该级别
--v=3有关更改拓展的信息
--v=4debug 级别
--v=5增强版 debug,官方无标准描述,通常不使用
--v=6显示请求的资源
--v=7显示 HTTP 请求头
--v=8显示 HTTP 请求内容
--v=9显示 HTTP 请求内容且不截断内容