一、基础通用
# 查看集群信息
kubectl cluster-info
# 查看版本(客户端+服务端)
kubectl version
# 查看所有命名空间
kubectl get ns
# 指定命名空间操作 -n xxx;所有命名空间 -A
kubectl get pod -n kube-system
kubectl get pod -A
# 切换默认命名空间(kubectx/kubens工具,面试提加分)
kubens default
二、资源查看 get(最高频)
# 查看pod
kubectl get pods
kubectl get pod -o wide # 显示节点IP
kubectl get pod -o yaml # yaml格式输出
kubectl get pod -o json # json格式
# 查看deployment
kubectl get deploy
# 查看service
kubectl get svc
# 查看replicaset
kubectl get rs
# 查看configmap
kubectl get cm
# 查看secret
kubectl get secret
# 查看pv/pvc
kubectl get pv,pvc
# 查看ingress
kubectl get ingress
# 查看节点
kubectl get nodes
# 查看所有资源
kubectl get all
三、资源详情 describe(排错必用,面试必问)
describe 看事件 Events,报错 90% 在这里
kubectl describe pod <pod-name>
kubectl describe deploy <deploy-name>
kubectl describe node <node-name>
kubectl describe svc <svc-name>
四、创建 / 应用资源
# 通过yaml创建
kubectl apply -f demo.yaml
# 多个文件
kubectl apply -f ./dir/
# 创建pod简易(不推荐生产,测试用)
kubectl run nginx --image=nginx
# 创建deployment
kubectl create deployment nginx --image=nginx
# 暴露deployment为service
kubectl expose deployment nginx --port=80 --type=NodePort
# 快速生成yaml,不创建(--dry-run=client) 面试超级高频
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deploy.yaml
✨面试考点:
--dry-run=client只输出,不提交 apiserver;不要用--dry-run(旧版本)
五、删除资源
kubectl delete -f demo.yaml
kubectl delete pod pod-name
kubectl delete deploy deploy-name
# 删除命名空间(会清空ns下所有资源)
kubectl delete ns test
六、Pod 调试命令(面试重点)
# 进入pod容器
kubectl exec -it <pod-name> -- /bin/bash
kubectl exec -it <pod-name> -c <容器名> -- /bin/sh #多容器指定-c
# 查看日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时跟踪
kubectl logs --previous <pod-name> # 查看pod崩溃前日志,排查重启必用
# pod端口转发本地访问
kubectl port-forward pod/nginx 8888:80
# 文件拷贝 本地<->pod
kubectl cp local.txt pod-name:/tmp
kubectl cp pod-name:/tmp/a.txt ./
七、Deployment 扩缩容、滚动更新
# 扩缩容副本
kubectl scale deployment nginx --replicas=3
# 查看发布历史
kubectl rollout history deployment nginx
# 回滚上一版本
kubectl rollout undo deployment nginx
# 回滚指定版本
kubectl rollout undo deployment nginx --to-revision=2
# 观察滚动更新状态
kubectl rollout status deployment nginx
八、编辑资源
kubectl edit deployment nginx
# 直接在线修改,保存生效;底层会调用apply
九、标签 label、注解 annotation
# 添加标签
kubectl label pod pod-name env=test
# 删除标签
kubectl label pod pod-name env-
# 查询带标签资源
kubectl get pods -l env=test
# 节点打标签
kubectl label nodes node01 role=worker
# 显示全部标签列
kubectl get pods --show-labels
kubectl get nodes --show-labels
kubectl get deploy --show-labels
十、节点调度:污点 Taint、容忍 Toleration(面试高频)
# 查看节点污点
kubectl describe node node01 | grep Taint
# 添加污点 NoSchedule / PreferNoSchedule / NoExecute
kubectl taint nodes node01 key=value:NoSchedule
# 删除污点
kubectl taint nodes node01 key=value-
十一、资源导出备份
# 将现有资源导出yaml(备份)
kubectl get deploy nginx -o yaml > bak.yaml
十二、污点、驱逐、维护节点
# 节点设置不可调度,pod不会调度上来
kubectl cordon node01
# 驱逐pod,节点维护,配合cordon
kubectl drain node01 --ignore-daemonsets
# 恢复节点调度
kubectl uncordon node01
十三、上下文环境
# 查看集群上下文
kubectl config get-contexts
# 切换集群
kubectl config use-context kubernetes-admin@kubernetes
十四、面试高频简答题(命令相关)
- Pod CrashLoopBackOff 怎么排查?
kubectl describe pod xxx #看事件
kubectl logs --previous xxx #看崩溃日志
kubectl exec 进入看内部
- Pod 状态 Pending?
kubectl describe pod xxx看 Events:镜像拉取失败、资源不足、污点、节点亲和、PVC 没绑定
- dry-run 作用
模拟创建资源,输出 yaml,不实际创建资源,写配置文件。
kubectl applyvskubectl create
create:新建,资源已存在就报错apply:声明式,存在则更新,不存在创建(生产推荐)
- drain 与 cordon 区别
- cordon:标记节点不可调度,不驱逐现有 pod
- drain:先 cordon,驱逐节点上 pod,DaemonSet 不会驱逐需要加
--ignore-daemonsets
十五、速记小抄(面试前快速过)
# 生成yaml模板
kubectl create deploy xxx --image=xxx --dry-run=client -o yaml
# 排错三板斧
kubectl get xxx -o wide
kubectl describe xxx
kubectl logs [-f --previous] podname
# 节点维护
cordon → drain → uncordon
# 回滚
rollout history → rollout undo