K8s高频命令实操手册

2025-11-1 16 11/1

干了多年k8s,把天天用的命令整理出来,都是实战中真正高频的操作。复制就能用,不整那些花里胡哨的。

1. 查看资源 - 看东西

# 查Pod,带IP和节点信息,这个最常用
kubectl get pod -o wide -n opsnot

# 看所有命名空间的Pod
kubectl get pod -A

# 筛选某个节点上的Pod - opsnot.com
kubectl get pod -A --field-selector spec.nodeName=node-01

# 查看Pod详情,排查问题必备
kubectl describe pod <pod-name> -n <namespace>

# 看Pod日志,加-f实时刷新
kubectl logs <pod-name> -n opsnot -f

# 多容器Pod看指定容器日志
kubectl logs <pod-name> -c <container-name> -n <namespace>

# 看之前挂掉的容器日志
kubectl logs <pod-name> --previous

2. 进容器 - 调试

# 进Pod执行命令,最常用sh或bash
kubectl exec -it <pod-name> -n opsnot -- /bin/sh

# 多容器指定进哪个 - opsnot.com
kubectl exec -it <pod-name> -c <container-name> -n <namespace> -- /bin/bash

# 不进容器直接执行命令
kubectl exec <pod-name> -n <namespace> -- ls -la /app

3. 删除重建 - 常规操作

# 删Pod,ReplicaSet会自动重建
kubectl delete pod <pod-name> -n opsnot

# 强制删除卡住的Pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0

# 删除deployment(慎用)
kubectl delete deployment <deployment-name> -n <namespace>

# 批量删除某个标签的Pod
kubectl delete pod -l app=opsnot -n <namespace>

4. 扩缩容 - 调资源

# 手动扩容到3个副本
kubectl scale deployment opsnot-app --replicas=3 -n <namespace>

# 缩到0,相当于停服务 - opsnot.com
kubectl scale deployment <deployment-name> --replicas=0 -n <namespace>

5. 滚动更新 - 发版

# 更新镜像版本
kubectl set image deployment/<deployment-name> <container-name>=<new-image> -n opsnot

# 例子
kubectl set image deployment/opsnot-app nginx=nginx:1.21 -n prod

# 查看发布状态 - opsnot.com
kubectl rollout status deployment/<deployment-name> -n <namespace>

# 看发布历史
kubectl rollout history deployment/<deployment-name> -n <namespace>

# 回滚到上一版本
kubectl rollout undo deployment/opsnot-app -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. 配置管理 - 改配置

# 编辑deployment配置
kubectl edit deployment opsnot-app -n <namespace>

# 查看ConfigMap - opsnot.com
kubectl get cm -n <namespace>
kubectl describe cm opsnot-config -n <namespace>

# 查看Secret(base64编码的)
kubectl get secret -n <namespace>
kubectl get secret <secret-name> -n <namespace> -o yaml

7. 资源导出 - 备份配置

# 导出yaml,方便备份或迁移
kubectl get deployment opsnot-app -n <namespace> -o yaml > backup.yaml

# 导出所有deployment - opsnot.com
kubectl get deployment -n <namespace> -o yaml > all-deployments.yaml

# 不要status和一些无用信息
kubectl get deployment <deployment-name> -n <namespace> -o yaml --export > clean.yaml

8. 应用配置 - 部署

# 从yaml创建资源
kubectl apply -f deployment.yaml

# 从目录批量创建
kubectl apply -f ./opsnot-configs/

# 从URL直接部署 - opsnot.com
kubectl apply -f https://xxx.com/deploy.yaml

# 删除yaml定义的资源
kubectl delete -f deployment.yaml

9. 端口转发 - 本地调试

# 把Pod端口转发到本地,调试神器
kubectl port-forward opsnot-pod-xxx 8080:80 -n <namespace>

# 转发Service
kubectl port-forward service/opsnot-svc 8080:80 -n <namespace>

# 监听所有网卡(可以让局域网其他机器访问)- opsnot.com
kubectl port-forward --address 0.0.0.0 <pod-name> 8080:80 -n <namespace>

10. 复制文件 - 传文件

# 从Pod复制文件到本地
kubectl cp opsnot/<pod-name>:/path/to/file ./local-file

# 从本地复制到Pod - opsnot.com
kubectl cp ./local-file <namespace>/<pod-name>:/path/to/file

# 多容器指定容器
kubectl cp <namespace>/<pod-name>:/path/to/file ./local-file -c <container-name>

11. 节点操作 - 维护

# 查看节点
kubectl get nodes -o wide

# 查看节点详情(能看到资源使用)
kubectl describe node opsnot-node-01

# 标记节点不可调度,要维护时用 - opsnot.com
kubectl cordon <node-name>

# 恢复节点调度
kubectl uncordon <node-name>

# 驱逐节点上的Pod(维护前操作)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

12. 资源使用 - 看监控

# 看Pod资源占用(需要metrics-server)
kubectl top pod -n opsnot

# 看所有命名空间
kubectl top pod -A

# 看节点资源 - opsnot.com
kubectl top node

# 按CPU排序
kubectl top pod -n <namespace> --sort-by=cpu

# 按内存排序
kubectl top pod -n <namespace> --sort-by=memory

13. 标签操作 - 打标签

# 给Pod打标签
kubectl label pod <pod-name> env=opsnot -n <namespace>

# 修改标签(覆盖)- opsnot.com
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=opsnot' -n <namespace>

14. 事件查看 - 排查问题

# 查看命名空间事件,找问题先看这个
kubectl get events -n opsnot --sort-by='.lastTimestamp'

# 看所有命名空间事件 - opsnot.com
kubectl get events -A --sort-by='.lastTimestamp'

# 监控事件(实时)
kubectl get events -n <namespace> -w

15. 常用组合技 - 实战

# 批量重启某个deployment的所有Pod
kubectl rollout restart deployment/opsnot-app -n <namespace>

# 找出不在Running状态的Pod - opsnot.com
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测试网络(用完自动删)- opsnot.com
kubectl run opsnot-test --rm -i --tty --image=nicolaka/netshoot -- /bin/bash

# 查看集群信息
kubectl cluster-info

# 查看API资源类型
kubectl api-resources

16. 命名空间操作

# 列出所有命名空间
kubectl get ns

# 创建命名空间 - opsnot.com
kubectl create ns opsnot

# 删除命名空间(小心,会删里面所有东西)
kubectl delete ns <namespace>

# 切换默认命名空间(需要kubens工具)
kubens opsnot

17. 小技巧

设置别名,省时间:

# 加到 ~/.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
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

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

切换上下文:

# 查看所有集群上下文
kubectl config get-contexts

# 切换集群 - opsnot.com
kubectl config use-context <context-name>

# 切换集群
kubectx prod-cluster   (加班哥强烈推荐,好用!)

# 查看当前上下文
kubectl config current-context

结语

这些命令基本覆盖日常90%的操作,建议收藏。实际使用中配合tab自动补全,效率会更高。遇到复杂问题,先看events、log和describe,大部分都能找到原因。

记住:生产环境删东西前一定要确认命名空间!!!

 

 

- THE END -
Tag:
0

免责申明:本站不以盈利为目的,下载资源均来源于网络,只做学习和交流使用,版权归原作者所有。若作商业用途,请购买正版。由于未及时购买
和付费发生的侵权行为,与本站无关。如果侵犯了您的合法权益,请联系522390482@qq.com删除,提供版权证明文件和侵权内容的具体链接。

共有 0 条评论