多集群配置
KUBECONFIG 环境变量支持用冒号分隔多个配置文件(类似 PATH),kubectl 会自动合并:
# 合并多个集群的配置(可写入 ~/.zshrc 持久化)
export KUBECONFIG=\
~/.kube/dev.yaml:\
~/.kube/test.yaml:\
~/.kube/prod.yaml
context 操作
# 查看所有 context(CURRENT 列标记当前所在集群)
kubectl config get-contexts
# 查看当前 context
kubectl config current-context
# 切换集群
kubectl config use-context <context-name>
# 设置当前 context 的默认命名空间,之后可省略 -n
kubectl config set-context --current --namespace=<namespace>
kubectx / kubens
比 kubectl config 更便捷的切换工具:kubectx 切换集群,kubens 切换命名空间。安装了 fzf 时,不带参数执行会进入交互式选择。
# 安装(macOS,自带 kubens)
brew install kubectx
# 列出所有 context(当前的高亮显示)
kubectx
# 切换集群
kubectx <context-name>
# 切回上一个集群(类似 cd -)
kubectx -
# 重命名 context(合并多个 kubeconfig 后名字太长时常用)
kubectx <new-name>=<old-name>
# 删除 context
kubectx -d <context-name>
# 列出所有命名空间(当前的高亮显示)
kubens
# 切换默认命名空间,之后 kubectl 可省略 -n
kubens <namespace>
# 切回上一个命名空间
kubens -
# 显示当前命名空间
kubens -c
常用参数
| 参数 | 说明 |
|---|---|
-n <命名空间> | 指定命名空间 |
-A | 所有命名空间 |
-o wide | 显示更多列信息(IP、所在节点等) |
-o yaml | 以 YAML 格式输出完整资源定义 |
-l <标签> | 按标签筛选,如 -l app=nginx |
-w | 持续监听资源变化(watch) |
-f | logs 时持续跟踪输出(follow) |
查看资源
# 查看 Pod
kubectl get pod -n <namespace>
# 查看详细信息(含 IP、所在节点)
kubectl get pod -n <namespace> -o wide
# 所有命名空间的 Pod
kubectl get pod -A
# 按标签筛选
kubectl get pod -l app=nginx -n <namespace>
# 持续监听 Pod 状态变化(发布时观察滚动更新)
kubectl get pod -n <namespace> -w
# 查看完整资源定义
kubectl get pod <pod-name> -n <namespace> -o yaml
# 其他常见资源
kubectl get deployment -n <namespace>
kubectl get svc -n <namespace>
kubectl get node -o wide
# 查看集群支持的所有资源类型及缩写(po、deploy、svc 等)
kubectl api-resources
排查问题
# 查看 Pod 详情(事件、状态、失败原因,排查第一步)
kubectl describe pod <pod-name> -n <namespace>
# 查看日志
kubectl logs <pod-name> -n <namespace>
# 持续跟踪日志并过滤关键词
kubectl logs -f <pod-name> -n <namespace> | grep "error"
# 只看最近 100 行
kubectl logs --tail=100 <pod-name> -n <namespace>
# 查看上一次崩溃容器的日志(CrashLoopBackOff 时用)
kubectl logs -p <pod-name> -n <namespace>
# 多容器 Pod 指定容器
kubectl logs <pod-name> -c <container-name> -n <namespace>
# 进入容器调试
kubectl exec -it <pod-name> -n <namespace> -- sh
# 在容器内执行单条命令
kubectl exec <pod-name> -n <namespace> -- env
# 端口转发到本地(本地访问集群内服务)
kubectl port-forward pod/<pod-name> 8080:80 -n <namespace>
# 查看命名空间内最近事件(按时间排序)
kubectl get events -n <namespace> --sort-by='.lastTimestamp'
# 查看资源占用(需安装 metrics-server)
kubectl top pod -n <namespace>
kubectl top node
操作资源
# 应用 YAML(新建或更新)
kubectl apply -f deployment.yaml
# 删除 Pod(删除后控制器会自动重建,常用于"重启"Pod)
kubectl delete pod <pod-name> -n <namespace>
# 按 YAML 删除资源
kubectl delete -f deployment.yaml
# 直接编辑线上资源(保存即生效)
kubectl edit deployment <deployment-name> -n <namespace>
# 调整副本数
kubectl scale deployment <deployment-name> --replicas=3 -n <namespace>
滚动更新与回滚
# 重启 Deployment(逐个重建 Pod,不中断服务)
kubectl rollout restart deployment/<deployment-name> -n <namespace>
# 查看更新进度
kubectl rollout status deployment/<deployment-name> -n <namespace>
# 查看历史版本
kubectl rollout history deployment/<deployment-name> -n <namespace>
# 回滚到上一版本
kubectl rollout undo deployment/<deployment-name> -n <namespace>
文件拷贝
# 从容器拷贝文件到本地
kubectl cp <namespace>/<pod-name>:/path/in/pod ./local-file
# 从本地拷贝文件到容器
kubectl cp ./local-file <namespace>/<pod-name>:/path/in/pod
快速生成 YAML
--dry-run=client -o yaml 不实际创建资源,只输出 YAML,常用于生成模板:
# 生成 Deployment 模板
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
# 生成 Service 模板
kubectl expose deployment nginx --port=80 --dry-run=client -o yaml > service.yaml