kubectl

kubectl 是 Kubernetes 的命令行工具(CLI),通过 API Server 管理集群中的资源(Pods、Deployments、Services、ConfigMaps 等),该工具与 Kubernetes API 进行交互。通过读取 ~/.kube/config 文件配置连接到目标集群。本质是一个 REST 客户端,向 Kubernetes API 发送 HTTP 请求。

参考文档:命令行工具 (kubectl)官方文档

二、基本语法

kubectl [command] [TYPE] [NAME] [flags]
部分说明
command操作类型,如 get、create、delete、describe
TYPE资源类型,如 pod、deployment、service(支持缩写)
NAME资源名称(可选)
flags参数,如 -n namespace、-o yaml

✅ 示例:

kubectl get pods -A                   # 获取所有 Pod
kubectl describe node node1        # 查看 node1 详情
kubectl delete deployment my-app   # 删除名为 my-app 的 Deployment

三、常用命令速查表

命令用途示例
kubectl get列出资源kubectl get pods -A
kubectl describe查看资源详细信息kubectl describe pod nginx-123
kubectl create从文件或 stdin 创建资源kubectl create -f app.yaml
kubectl apply声明式更新(推荐)kubectl apply -f app.yaml
kubectl delete删除资源kubectl delete pod nginx-123
kubectl logs查看容器日志kubectl logs -f my-pod
kubectl exec进入容器执行命令kubectl exec -it my-pod -- sh
kubectl port-forward端口转发(本地访问服务)kubectl port-forward svc/my-svc 8080:80
kubectl proxy启动 API 代理kubectl proxy --port=8001
kubectl top查看资源使用(需 Metrics Server)kubectl top nodes
kubectl rollout管理部署回滚/状态kubectl rollout undo deploy/my-app

四、资源类型(常用)

全称缩写说明
podspo最小调度单元
servicessvc服务发现与负载均衡
deploymentsdeploy无状态应用管理
daemonsetsds每节点运行一个 Pod(如 Flannel)
statefulsetssts有状态应用(如数据库)
configmapscm非敏感配置数据
secretssecret敏感数据(base64 编码)
namespacesns命名空间(逻辑隔离)
nodesno工作节点
persistentvolumespv存储卷(集群级)
persistentvolumeclaimspvc存储申请(命名空间级)

✅ 使用缩写可提高效率:kubectl get po 代替 kubectl get pods

五、常用参数(Flags)

参数说明
-n <namespace>指定命名空间(默认 default)
-A 或 --all-namespaces所有命名空间
-o wide显示更多信息(IP、Node 等)
-o yaml / -o json输出为 YAML/JSON 格式
-l key=value按标签筛选资源
-w实时监控(watch)
--dry-run=client试运行(不实际创建)
--force强制删除(配合 --grace-period=0)

✅ 示例:

# 查看 kube-system 中所有 Pod 的 IP 和所在节点
kubectl get pods -n kube-system -o wide

# 实时监控 default 命名空间的 Pod 变化
kubectl get pods -w

六、典型使用场景

1. 排查 Pod 问题

kubectl get pods                          # 查看状态
kubectl describe pod <pod-name>           # 查看事件和配置
kubectl logs <pod-name>                   # 查看日志
kubectl exec -it <pod-name> -- sh         # 进入容器

2. 部署应用

kubectl apply -f deployment.yaml          # 部署
kubectl get deploy                        # 查看部署状态
kubectl rollout status deploy/my-app      # 检查滚动更新状态

3. 调试服务

# 将本地 8080 端口转发到 Service 的 80 端口
kubectl port-forward svc/my-service 8080:80

# 测试是否能访问
curl http://localhost:8080

4. 查看集群状态

kubectl get nodes                         # 节点是否 Ready
kubectl top nodes                         # CPU/内存使用(需 Metrics Server)

七、配置文件:~/.kube/config

  • 包含集群(clusters)、用户(users)、上下文(contexts)信息。
  • 可通过以下命令管理:
kubectl config view                # 查看当前配置
kubectl config use-context prod    # 切换上下文
kubectl config get-contexts        # 列出所有上下文

多集群管理时,此文件非常关键。

八、高级技巧

1. 自动补全(Bash/Zsh)

# Bash
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

# Zsh
echo "source <(kubectl completion zsh)" >> ~/.zshrc

2. 别名简化

alias k=kubectl
alias kg='kubectl get'
alias kd='kubectl describe'

3. 输出自定义列

kubectl get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase

4. 批量删除

# 删除所有 Completed 状态的 Job
kubectl delete job -l job-name=my-job

# 删除所有未运行的 Pod
kubectl delete pod --field-selector=status.phase!=Running

九、注意事项

  1. 权限控制:操作受 RBAC 限制,普通用户可能无法删除系统 Pod。
  2. 命名空间隔离:不指定 -n 时,默认操作 default 命名空间。
  3. apply vs create:
    • apply:声明式,支持增量更新(推荐)。
    • create:命令式,重复执行会报错。
  4. 删除资源:某些资源(如 PVC)即使 Pod 删除后仍保留,需手动清理。

十、学习建议

总结

kubectl 是 Kubernetes 的”瑞士军刀”:

  • 查看:get, describe, logs
  • 操作:apply, delete, exec
  • 调试:port-forward, proxy, top
  • 管理:config, rollout, scale

掌握 kubectl,就掌握了 Kubernetes 的命脉!