Skip to content

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.yaml

1. 查看资源

查看 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> --previous

2. 容器调试

进入容器

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 /app

3. 删除与重建

删除操作

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 yaml

7. 资源导出

导出配置

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.yaml

8. 应用配置

部署资源

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.yaml

9. 端口转发

本地调试

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-data

12. 资源监控

查看资源占用

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=memory

13. 标签操作

标签管理

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> -w

15. 常用组合技

实战技巧

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-resources

16. 命名空间操作

命名空间管理

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

用心记录,持续学习 | CNB