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

共有 0 条评论