kubectl 命令详解
kubectl 是与 Kubernetes 交互的官方命令行工具,所有针对资源的增删改查、日志查看、端口转发都靠它完成。掌握常用子命令与参数,是使用集群的日常基本功。
基本语法
kubectl 的命令结构是"动作 + 资源类型 + 名称 + 参数":
kubectl [子命令] [资源类型] [资源名称] [-n 命名空间] [-o 输出格式]
kubectl get pod my-pod -n default -o wide
常用子命令表
| 子命令 | 作用 | 典型示例 |
|---|---|---|
| get | 列出资源 | kubectl get pods |
| describe | 查看资源详细事件 | kubectl describe pod web-0 |
| logs | 查看容器日志 | kubectl logs -f deploy/nginx |
| exec | 进入容器执行命令 | kubectl exec -it pod-1 -- bash |
| apply | 声明式创建/更新 | kubectl apply -f app.yaml |
| delete | 删除资源 | kubectl delete pod web-0 |
| scale | 调整副本数 | kubectl scale deploy nginx --replicas=3 |
| rollout | 管理滚动更新 | kubectl rollout status deploy nginx |
查看与输出格式
-o 控制输出格式,-n 指定命名空间(默认 default),-l 按标签过滤:
kubectl get pods -n kube-system # 指定命名空间
kubectl get pods -o wide # 追加节点 IP 等列
kubectl get deploy nginx -o yaml # 导出完整 yaml
kubectl get pods -l app=nginx # 只列出带 app=nginx 标签的
kubectl get all -A # 查看所有命名空间下的主要资源
# NAME READY STATUS RESTARTS AGE
# pod/nginx-7d9c5d6b9f-abc12 1/1 Running 0 4h
describe 比 get 信息更全,会列出事件(Events),排查"为什么起不来"时先看它:
kubectl describe pod nginx-7d9c5d6b9f-abc12
# Events:
# Type Reason Age From Message
# Normal Scheduled 4h default-scheduler Successfully assigned...
日志与进入容器
logs 加 -f 跟踪输出、--tail 只看末尾行;exec 带 -it 进入交互式 shell:
kubectl logs -f nginx-7d9c5d6b9f-abc12 # 跟踪日志
kubectl logs nginx-7d9c5d6b9f-abc12 --tail=50 # 只看最后 50 行
kubectl exec -it nginx-7d9c5d6b9f-abc12 -- bash # 进入容器
kubectl exec nginx-7d9c5d6b9f-abc12 -- ls /etc/nginx
kubectl apply 与 create 的区别
两者都能创建资源,但理念不同:
| 方式 | 本质 | 适用 |
|---|---|---|
| kubectl create | 命令式,重复执行会报已存在 | 临时、交互式操作 |
| kubectl apply | 声明式,按 yaml 期望状态收敛,重复执行安全 | 管理集群资源的主方式 |
kubectl create deployment nginx --image=nginx:1.27 # 快速创建
kubectl apply -f nginx-deploy.yaml # 推荐:文件即配置
kubectl apply -f nginx-deploy.yaml # 再次执行只是确认无变化
自动补全
bash 与 zsh 都支持补全,配合别名能明显提速:
echo 'source <(kubectl completion bash)' >> ~/.bashrc
alias k=kubectl
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrc
k get nodes # 现在 k 就是 kubectl,还能按 Tab 补全
小结:kubectl 高频三板斧是 get(看现状)、describe(查事件)、logs/exec(进现场);管理资源以 apply -f 声明式为主。多记 -n、-o、-l 三个参数,效率会高出很多。