Kubectl 是 Kubernetes(常简称为 K8S)集群的命令行管理工具。你可以把它理解为与 K8S API 服务器通信的客户端,通过它,我们可以对集群内的各种资源对象——例如 Pod、Service、Deployment 等——进行创建、查询、更新和删除等一系列操作。无论是日常的应用部署、状态监控,还是故障排查,kubectl 都是运维和开发人员最得力的助手。

想要高效地使用它,首先需要理解其基本的语法结构。
二、Kubectl 基本语法
kubectl 的通用命令格式为:kubectl [command] [TYPE] [NAME] [flags]。
下面我们来拆解这个格式的每个部分:
command:指定要对资源执行的操作,例如 create(创建)、get(获取)、describe(详细描述)、delete(删除)等。
TYPE:指定资源对象的类型,大小写不敏感,支持单数、复数或缩写形式。
- 例如,Pod 可以写为
pod、pods 或 po;Deployment 可以写为 deployment、deployments 或 deploy。
NAME:指定资源对象的名称,它区分大小写。如果省略名称,则会显示该类型所有对象的信息。
- 例如,
kubectl get pods 列出所有 Pod,而 kubectl get pod nginx-pod 则只获取名为 “nginx-pod” 的 Pod。
- 一个命令可以操作多个资源:
kubectl get pod example-pod1 example-pod2。
flags:可选标志,用于满足特定需求。
-s 或 --server:指定 API 服务器地址。
-n 或 --namespace:指定命名空间。
-o 或 --output:指定输出格式(如 -o wide 显示更宽信息,-o yaml 输出 YAML 格式)。
假设我们有一个定义了 Nginx Deployment 的 YAML 文件 nginx-deployment.yaml,创建并查看它的典型操作如下:
# 根据YAML文件创建Deployment资源
kubectl create -f nginx-deployment.yaml
# 查看创建出的Pod的详细信息,包括IP和所在节点
kubectl get pods -o wide
掌握了基本语法,我们就可以将命令按功能进行分类,以便在实际场景中快速选用。

三、常用命令分类详解
(一)获取信息类
这类命令帮助你观察和理解集群及应用的当前状态。
-
kubectl get:列出资源的基本信息。
kubectl get pods:查看所有 Pod。
kubectl get svc -n <namespace>:查看指定命名空间的所有服务。
kubectl get pods -o wide:查看更多细节(IP、节点等)。
-
kubectl describe:显示单个资源的详细信息,包括事件、状态和关联资源,是排查问题的利器。
kubectl describe pod <pod-name>:查看 Pod 的详细状态和事件。
kubectl describe deployment <deployment-name>:查看 Deployment 的配置和状态。
-
kubectl logs:查看容器的标准输出日志,用于调试应用。
kubectl logs <pod-name>:查看 Pod 内容器的日志(如果只有一个容器)。
kubectl logs <pod-name> -c <container-name>:查看 Pod 中指定容器的日志。
kubectl logs -f <pod-name>:实时跟踪(Follow)日志输出。
-
kubectl top:查看资源(节点、Pod)的实时资源(CPU、内存)使用情况。
kubectl top nodes:查看节点资源使用。
kubectl top pods:查看 Pod 资源使用。
(二)调试诊断类
当应用运行出现异常时,这些命令能帮助你深入内部探查。
-
kubectl exec:在容器内执行命令,相当于“进入”容器。
kubectl exec -it <pod-name> -- bash:以交互方式进入 Pod 默认容器的 Bash Shell。
-
kubectl port-forward:将本地端口转发到 Pod 的端口,便于本地访问和调试服务。
kubectl port-forward <pod-name> 8080:80:将本地 8080 端口转发到 Pod 的 80 端口。
-
kubectl run:快速运行一个临时 Pod,用于测试或执行一次性任务。
kubectl run centos-test --image=centos --rm -it -- bash:运行一个 CentOS Pod,任务结束后自动删除(--rm)。
-
kubectl attach:连接到正在运行的容器,查看其标准输入、输出和错误流。
kubectl attach <pod-name> -c <container-name>:常用于实时观察有重要输出的容器。
-
kubectl debug(K8s 1.18+):创建临时调试容器来诊断问题 Pod。
kubectl debug <pod-name> -it --image=busybox:创建一个 BusyBox 调试容器,方便检查目标 Pod 的运行环境。
(三)状态管理类
管理资源对象的生命周期和元数据。
-
kubectl create:从文件或标准输入创建资源。
kubectl create -f deployment.yaml:根据 YAML 文件创建资源。
-
kubectl apply:声明式地应用资源配置(创建或更新)。它是持续部署中的核心命令。
kubectl apply -f updated-deployment.yaml:如果资源不存在则创建,存在则按配置更新。
-
kubectl delete:删除资源。
kubectl delete pod <pod-name>:删除指定 Pod。
kubectl delete pod -l app=nginx:删除所有带有标签 app=nginx 的 Pod。
-
kubectl edit:在编辑器中直接修改资源的实时配置,保存后立即生效。
kubectl edit deployment <deployment-name>:编辑 Deployment 配置,例如修改副本数。
-
kubectl label:为资源添加、修改或删除标签。标签是组织和选择资源的关键。
kubectl label pods <pod-name> environment=production:给 Pod 添加标签。
-
kubectl annotate:为资源添加注释,用于存储额外的说明信息。
kubectl annotate deployment <deployment-name> description=“后端服务”:添加注释。
(四)扩缩容类
调整应用的处理能力以应对负载变化。
-
kubectl scale:手动调整控制器(如 Deployment)的副本数量。
kubectl scale deployment <deployment-name> --replicas=5:将副本数扩展到 5。
-
kubectl autoscale:设置基于指标(如 CPU)的自动扩缩容(HPA)。
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80:设置 CPU 使用率超 80% 时自动扩容,副本数在 2-10 之间。
(五)部署管理类
管理应用版本的更新与回滚。
-
kubectl rollout:管理部署过程。
kubectl rollout status deployment/<deployment-name>:查看滚动更新状态。
kubectl rollout pause deployment/<deployment-name>:暂停更新。
kubectl rollout resume deployment/<deployment-name>:恢复更新。
-
kubectl rollout history:查看部署历史。
kubectl rollout history deployment/<deployment-name>:查看历史版本。
-
kubectl rollout undo:回滚到之前的版本。
kubectl rollout undo deployment/<deployment-name>:回滚到上一个版本。
kubectl rollout undo deployment/<deployment-name> --to-revision=2:回滚到特定修订版本。
-
kubectl patch:使用补丁(Patch)方式部分更新资源,无需提交完整配置。
kubectl patch deployment <deployment-name> --patch '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.19"}]}}}}':更新容器镜像。
(六)安全认证类
管理集群的访问安全和敏感信息。
-
kubectl auth:检查授权信息。
kubectl auth can-i create pods:检查当前用户是否有创建 Pod 的权限。
-
kubectl create secret:创建 Secret 对象,用于安全地存储密码、令牌等敏感数据。
kubectl create secret generic db-password --from-literal=password=‘secret123’:创建一个包含密码的 Secret。
-
kubectl certificate:管理证书。
- 用于处理 TLS 证书的创建、批准等操作,保障通信安全。

四、命令使用注意事项
在灵活运用 kubectl 的同时,以下几点需要时刻留意:
- 权限控制:Kubernetes 通常使用基于角色的访问控制(RBAC)来管理权限。执行命令前,请确保你的
kubeconfig 上下文或服务账户拥有足够的权限。权限不足是命令执行失败的常见原因。
- 资源依赖:在创建或更新资源(如 Pod)时,务必确保其依赖的资源(如 ConfigMap、Secret、PersistentVolumeClaim)已经存在且配置正确,否则 Pod 可能无法成功启动。
- 版本兼容性:不同版本的 Kubernetes 对
kubectl 命令的支持可能略有差异,某些命令或参数可能被废弃或引入新行为。建议查阅对应版本的 官方文档 以获取最准确的信息。
总而言之,kubectl 是掌控 Kubernetes 集群的钥匙。熟练掌握上述命令,能极大提升你在云原生环境下的运维效率。但对于生产环境的操作,尤其是删除、大规模更新等,务必谨慎,做好变更管理和备份。

五、总结与实践建议
kubectl 命令体系庞大但逻辑清晰,本文梳理的常用命令是日常工作的坚实基石。从查看状态到调试排错,从部署应用到扩缩容管理,它覆盖了 Kubernetes 运维的方方面面。
最好的学习方式是结合实践。建议在测试集群中反复练习这些命令,观察输出,理解其行为。随着 云原生 生态的演进,kubectl 和 Kubernetes 本身也在不断更新,保持学习,关注社区动态,是每一位 运维 工程师的必修课。希望这篇指南能帮助你更好地驾驭 Kubernetes,如果在实践中遇到了有趣的问题或心得,也欢迎到 云栈社区 与大家分享讨论。
|