Kubernetes 日常高频操作命令详解
前提条件
bash
# 安装 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 安装 metrics-server(用于 top 命令)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml1. 查看资源
查看 Pod 信息
bash
# 查看 Pod,带 IP 和节点信息
kubectl get pod -o wide -n <namespace>
# 查看所有命名空间的 Pod
kubectl get pod -A
# 筛选某个节点上的 Pod
kubectl get pod -A --field-selector spec.nodeName=<node-name>
# 查看 Pod 详情
kubectl describe pod <pod-name> -n <namespace>查看日志
bash
# 查看 Pod 日志,实时刷新
kubectl logs <pod-name> -n <namespace> -f
# 多容器 Pod 查看指定容器日志
kubectl logs <pod-name> -c <container-name> -n <namespace>
# 查看之前挂掉的容器日志
kubectl logs <pod-name> --previous2. 容器调试
进入容器
bash
# 进入 Pod 执行命令
kubectl exec -it <pod-name> -n <namespace> -- /bin/sh
# 多容器指定进入哪个容器
kubectl exec -it <pod-name> -c <container-name> -n <namespace> -- /bin/bash
# 不进容器直接执行命令
kubectl exec <pod-name> -n <namespace> -- ls -la /app3. 删除与重建
删除操作
bash
# 删除 Pod,ReplicaSet 会自动重建
kubectl delete pod <pod-name> -n <namespace>
# 强制删除卡住的 Pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
> ⚠️ 删除 deployment 会删除所有相关 Pod,请谨慎操作
kubectl delete deployment <deployment-name> -n <namespace>
# 批量删除某个标签的 Pod
kubectl delete pod -l app=<app-name> -n <namespace>4. 扩缩容操作
手动扩缩容
bash
# 扩容到指定副本数
kubectl scale deployment <deployment-name> --replicas=3 -n <namespace>
# 缩容到 0(相当于停服务)
kubectl scale deployment <deployment-name> --replicas=0 -n <namespace>5. 滚动更新
镜像更新
bash
# 更新镜像版本
kubectl set image deployment/<deployment-name> <container-name>=<new-image> -n <namespace>
# 示例:更新 nginx 镜像
kubectl set image deployment/nginx-app nginx=nginx:1.21 -n prod发布状态管理
bash
# 查看发布状态
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 rollout undo deployment/<deployment-name> --to-revision=2 -n <namespace>
# 暂停发布
kubectl rollout pause deployment/<deployment-name> -n <namespace>
# 恢复发布
kubectl rollout resume deployment/<deployment-name> -n <namespace>6. 配置管理
编辑配置
bash
# 编辑 deployment 配置
kubectl edit deployment <deployment-name> -n <namespace>查看配置
bash
# 查看 ConfigMap
kubectl get cm -n <namespace>
kubectl describe cm <configmap-name> -n <namespace>
# 查看 Secret(base64 编码)
kubectl get secret -n <namespace>
kubectl get secret <secret-name> -n <namespace> -o yaml7. 资源导出
导出配置
bash
# 导出单个 deployment yaml
kubectl get deployment <deployment-name> -n <namespace> -o yaml > backup.yaml
# 导出所有 deployment
kubectl get deployment -n <namespace> -o yaml > all-deployments.yaml
# 导出不包含 status 等信息的干净 yaml
kubectl get deployment <deployment-name> -n <namespace> -o yaml --export > clean.yaml8. 应用配置
部署资源
bash
# 从 yaml 创建资源
kubectl apply -f deployment.yaml
# 从目录批量创建
kubectl apply -f ./configs/
# 从 URL 直接部署
kubectl apply -f https://example.com/deploy.yaml
# 删除 yaml 定义的资源
kubectl delete -f deployment.yaml9. 端口转发
本地调试
bash
# 转发 Pod 端口到本地
kubectl port-forward <pod-name> 8080:80 -n <namespace>
# 转发 Service 端口
kubectl port-forward service/<service-name> 8080:80 -n <namespace>
# 监听所有网卡(允许局域网访问)
kubectl port-forward --address 0.0.0.0 <pod-name> 8080:80 -n <namespace>10. 文件复制
文件传输
bash
# 从 Pod 复制文件到本地
kubectl cp <namespace>/<pod-name>:/path/to/file ./local-file
# 从本地复制到 Pod
kubectl cp ./local-file <namespace>/<pod-name>:/path/to/file
# 多容器指定容器
kubectl cp <namespace>/<pod-name>:/path/to/file ./local-file -c <container-name>11. 节点操作
节点维护
bash
# 查看节点
kubectl get nodes -o wide
# 查看节点详情(含资源使用)
kubectl describe node <node-name>
# 标记节点不可调度(维护前)
kubectl cordon <node-name>
# 恢复节点调度
kubectl uncordon <node-name>
# 驱逐节点上的 Pod(维护前操作)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data12. 资源监控
查看资源占用
bash
# 查看 Pod 资源占用
kubectl top pod -n <namespace>
# 查看所有命名空间 Pod
kubectl top pod -A
# 查看节点资源
kubectl top node
# 按 CPU 排序
kubectl top pod -n <namespace> --sort-by=cpu
# 按内存排序
kubectl top pod -n <namespace> --sort-by=memory13. 标签操作
标签管理
bash
# 给 Pod 打标签
kubectl label pod <pod-name> env=prod -n <namespace>
# 修改标签(覆盖)
kubectl label pod <pod-name> env=test --overwrite -n <namespace>
# 删除标签
kubectl label pod <pod-name> env- -n <namespace>
# 查询带标签的资源
kubectl get pod -l env=prod -n <namespace>
# 多个标签条件
kubectl get pod -l 'env=prod,app=nginx' -n <namespace>14. 事件查看
排查问题
bash
# 查看命名空间事件(按时间排序)
kubectl get events -n <namespace> --sort-by='.lastTimestamp'
# 查看所有命名空间事件
kubectl get events -A --sort-by='.lastTimestamp'
# 实时监控事件
kubectl get events -n <namespace> -w15. 常用组合技
实战技巧
bash
# 批量重启 deployment 的所有 Pod
kubectl rollout restart deployment/<deployment-name> -n <namespace>
# 找出不在 Running 状态的 Pod
kubectl get pod -A --field-selector=status.phase!=Running
# 找出重启次数多的 Pod
kubectl get pod -A --sort-by='.status.containerStatuses[0].restartCount'
# 查看 Pod 的完整 yaml
kubectl get pod <pod-name> -n <namespace> -o yaml | less
# 临时启动测试 Pod(用完自动删除)
kubectl run test-pod --rm -i --tty --image=nicolaka/netshoot -- /bin/bash
# 查看集群信息
kubectl cluster-info
# 查看 API 资源类型
kubectl api-resources16. 命名空间操作
命名空间管理
bash
# 列出所有命名空间
kubectl get ns
# 创建命名空间
kubectl create ns <namespace-name>
> ⚠️ 删除命名空间会删除其中所有资源,请谨慎操作
kubectl delete ns <namespace-name>
# 切换默认命名空间(需要 kubens 工具)
kubens <namespace-name>17. 效率提升技巧
设置别名
bash
# 添加到 ~/.bashrc 或 ~/.zshrc
alias k='kubectl'
alias kgp='kubectl get pod'
alias kgpa='kubectl get pod -A'
alias kd='kubectl describe'
alias ke='kubectl edit'
alias kdel='kubectl delete'
alias kl='kubectl logs'
alias kx='kubectl exec -it'自动补全
bash
# Bash
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# Zsh
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.zshrc上下文切换
bash
# 查看所有集群上下文
kubectl config get-contexts
# 切换集群
kubectl config use-context <context-name>
# 使用 kubectx 工具(推荐)
kubectx <cluster-name>
# 查看当前上下文
kubectl config current-context⚠️ 生产环境操作前务必确认命名空间,避免误删除资源
转载自 https://blog.opsnot.com/tools/kubernetes-commands-for-daily-use.html