一、先掌握最常用的几组 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 时少走很多试错弯路

三、把命令速查变成日常工作流

如果把这些命令按实际工作串起来,一套很常见的流程通常是:

  1. kubectl config current-context 确认集群上下文
  2. kubectl apply -f 创建或更新资源
  3. kubectl getkubectl describekubectl get events 查看状态
  4. kubectl logskubectl execkubectl debug 深入排查
  5. kubectl rolloutkubectl scalekubectl autoscale 做发布和扩缩
  6. kubectl explain 反查 YAML 结构

当你不再把 kubectl 当成零散命令,而是当成 Kubernetes 的统一操作入口时,整个集群管理思路会清晰很多。