一、先掌握最常用的几组 kubectl 命令¶
kubectl 的高频命令可以按场景理解,而不是按字母顺序死记。
1. 查看和切换上下文¶
kubectl config get-contexts
kubectl config current-context
kubectl config use-context my-cluster-name
kubectl config view
这组命令用来确认“我现在连的是哪个集群”。在多集群环境下,这一步非常关键。
2. 创建资源¶
kubectl apply -f ./my1.yaml
kubectl apply -f ./my1.yaml -f ./my2.yaml
kubectl apply -f ./dir
kubectl create deployment nginx --image=nginx
kubectl create job hello --image=busybox:1.28 -- echo "Hello World"
3. 查找和排查资源¶
kubectl get svc
kubectl get pods -A
kubectl get pods -o wide
kubectl get deployment my-dep
kubectl get pod my-pod -o yaml > a.yaml
kubectl describe nodes my-node
kubectl describe pods my-pod
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl events --types=Warning
kubectl diff -f ./my-manifest.yaml
如果只记一个排查套路,可以先这样走:
get -> describe -> events -> logs
4. 更新、回滚和扩缩容¶
kubectl set image deployment/frontend www=image:v2
kubectl rollout history deployment/frontend
kubectl rollout undo deployment/frontend
kubectl rollout undo deployment/frontend --to-revision=2
kubectl rollout status -w deployment/frontend
kubectl rollout restart deployment/frontend
kubectl autoscale deployment foo --min=2 --max=10
kubectl scale --replicas=3 rs/foo
kubectl scale --replicas=3 -f foo.yaml
这组命令覆盖了镜像更新、发布观察、回滚和弹性扩缩的核心动作。
5. 资源标签和注解¶
kubectl label pods my-pod new-label=awesome
kubectl label pods my-pod new-label-
kubectl label pods my-pod new-label=new-value --overwrite
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq
kubectl annotate pods my-pod icon-url-
6. 和运行中的 Pod 交互¶
kubectl logs my-pod
kubectl logs -f my-pod
kubectl logs my-pod -c my-container
kubectl exec my-pod -- ls /
kubectl exec --stdin --tty my-pod -- /bin/sh
kubectl port-forward my-pod 5000:6000
kubectl debug my-pod -it --image=busybox:1.28
kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir
这部分是日常排障最常用的命令区。
7. 和 Deployment、Service、节点、集群交互¶
kubectl logs deploy/my-deployment
kubectl port-forward svc/my-service 5000
kubectl exec deploy/my-deployment -- ls
kubectl cordon my-node
kubectl drain my-node
kubectl uncordon my-node
kubectl top node
kubectl cluster-info
kubectl taint nodes foo dedicated=special-user:NoSchedule
8. 查看资源类型¶
kubectl api-resources
kubectl api-resources --namespaced=true
kubectl api-resources --namespaced=false
kubectl api-resources -o name
kubectl api-resources -o wide
kubectl api-resources --verbs=list,get
kubectl api-resources --api-group=extensions
二、写 YAML 时为什么一定要会 kubectl explain¶
很多人写 YAML 时最大的问题,不是语法不会,而是不知道字段该写在哪里、字段具体是什么意思。
这时候最实用的命令就是:
kubectl explain <resource>
比如查看 Pod 的字段定义:
kubectl explain pod
查看嵌套字段:
kubectl explain pod.spec
kubectl explain pod.spec.containers
kubectl explain pod.spec.containers.image
它的核心价值有三个:
- 快速确认资源对象的结构
- 直接查看字段含义和层级
- 写 YAML 时少走很多试错弯路
三、把命令速查变成日常工作流¶
如果把这些命令按实际工作串起来,一套很常见的流程通常是:
- 用
kubectl config current-context确认集群上下文 - 用
kubectl apply -f创建或更新资源 - 用
kubectl get、kubectl describe、kubectl get events查看状态 - 用
kubectl logs、kubectl exec、kubectl debug深入排查 - 用
kubectl rollout、kubectl scale、kubectl autoscale做发布和扩缩 - 用
kubectl explain反查 YAML 结构
当你不再把 kubectl 当成零散命令,而是当成 Kubernetes 的统一操作入口时,整个集群管理思路会清晰很多。