K8s 面试常用命令

一、基础通用

# 查看集群信息
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

十四、面试高频简答题(命令相关)

  1. Pod CrashLoopBackOff 怎么排查?
kubectl describe pod xxx #看事件
kubectl logs --previous xxx #看崩溃日志
kubectl exec 进入看内部
  1. Pod 状态 Pending?
  • kubectl describe pod xxx 看 Events:镜像拉取失败、资源不足、污点、节点亲和、PVC 没绑定
  1. dry-run 作用

模拟创建资源,输出 yaml,不实际创建资源,写配置文件。

  1. kubectl apply vs kubectl create
  • create:新建,资源已存在就报错
  • apply:声明式,存在则更新,不存在创建(生产推荐)
  1. 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
上一篇
下一篇