多集群配置

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)
-flogs 时持续跟踪输出(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