本文章仍在施工中。。。。
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-namespaces 和 kubectl 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 ns 和 kubectl 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 deploy 和 kubectl 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-server : kubectl 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 |
使用时注意以下几点:
drain只会驱逐 ** 非 DaemonSet** 的 Pod,DaemonSet Pod 会保留(因为 DaemonSet 要求每个节点必须运行);emptyDir是临时存储,删除 Pod 后数据会丢失,确认业务无状态再执行--delete-emptydir-data;- 生产环境建议先缩容业务 Deployment/StatefulSet,再执行 drain,减少业务中断时间;
- 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=4 | debug 级别 |
--v=5 | 增强版 debug,官方无标准描述,通常不使用 |
--v=6 | 显示请求的资源 |
--v=7 | 显示 HTTP 请求头 |
--v=8 | 显示 HTTP 请求内容 |
--v=9 | 显示 HTTP 请求内容且不截断内容 |