Skip to content

附录 命令速查与学习资源

本附录是《Kubernetes + RKE2 + K8s 辅助工具:从入门到精通》全教材的"口袋卡片":常用命令按场景分组速查、高频 YAML 模板即拿即用、学习资源与认证路径、以及全书学习路线图回顾。建议收藏或打印,随用随查。


目录


1. kubectl 速查表

约定:<ns> 命名空间、<pod> Pod 名、<deploy> Deployment 名。建议配置别名:alias k=kubectlsource <(kubectl completion bash)

1.1 集群与节点

场景命令
查看节点kubectl get nodes -o wide
节点详情kubectl describe node <node>
节点资源占用kubectl top node
打/去污点kubectl taint node <node> key=value:NoSchedule / kubectl taint node <node> key:NoSchedule-
cordon/恢复kubectl cordon <node> / kubectl uncordon <node>
驱逐节点kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
切换集群/上下文kubectl config get-contexts / kubectl config use-context <ctx>
查看 API 资源类型kubectl api-resources / kubectl api-versions
查看证书有效期(kubeadm 环境)kubeadm certs check-expiration

1.2 工作负载

场景命令
查看 Podkubectl get pods -n <ns> -o wide -w
查看所有命名空间kubectl get pods -A --sort-by=.metadata.namespace
Pod 详情/事件kubectl describe pod <pod> -n <ns>
日志(含崩溃前)kubectl logs <pod> -c <容器> --previous -f
进容器kubectl exec -it <pod> -c <容器> -- sh
创建/更新kubectl apply -f app.yaml
干跑验证kubectl apply -f app.yaml --dry-run=server -o yaml
生成 YAML 骨架kubectl create deploy web --image=nginx --replicas=3 --dry-run=client -o yaml
弹性伸缩kubectl scale deploy <deploy> --replicas=5
滚动更新状态/历史kubectl rollout status/history deploy <deploy>
回滚kubectl rollout undo deploy <deploy> [--to-revision=2]
更新镜像kubectl set image deploy/<deploy> <容器>=<新镜像>
重启kubectl rollout restart deploy <deploy>
临时调试容器kubectl debug -it <pod> --image=busybox:1.36 --target=<容器>
端口转发kubectl port-forward svc/<svc> 8080:80
文件拷贝kubectl cp <pod>:/path ./local -c <容器>

1.3 网络

场景命令
Service/Endpointskubectl get svc,ep -n <ns>
Ingresskubectl get ing -A
DNS 测试kubectl run -it --rm dns --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default
网络策略kubectl get networkpolicy -A
临时网络工具 Podkubectl run -it --rm net --image=nicolaka/netshoot --restart=Never -- bash
查看 Service 转发(节点上)ipvsadm -Lniptables -t nat -L KUBE-SERVICES -n

1.4 存储

场景命令
PV/PVC/SCkubectl get pv,pvc,sc -A
PVC 详情kubectl describe pvc <pvc>
扩容 PVCkubectl patch pvc <pvc> -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'
查看挂载kubectl exec <pod> -- df -h

1.5 排错

场景命令
事件(按时间)kubectl get events -n <ns> --sort-by=.lastTimestamp | tail -30
只看不正常 Podkubectl get pods -A --field-selector=status.phase!=Running,status.phase!=Succeeded
资源 YAML 导出kubectl get deploy <deploy> -o yaml --export (新版去掉 --export)
diff 对比kubectl diff -f app.yaml
强制删除卡死 Podkubectl delete pod <pod> --grace-period=0 --force
查看 Finalizer 卡死资源kubectl get <资源> <名> -o jsonpath='{.metadata.finalizers}'
资源用量kubectl top pod -n <ns> --containers --sort-by=memory
节点压力 Conditionkubectl get node <node> -o jsonpath='{.status.conditions}'

2. RKE2 速查表

2.1 安装与加入

bash
# 在线安装(server)
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE=server sh -
systemctl enable --now rke2-server

# 离线安装(制品方式,参考本仓库 rke2/install-server.sh)
INSTALL_RKE2_VERSION=v1.35.6+rke2r1 \
INSTALL_RKE2_ARTIFACT_PATH=/opt/rke2-artifacts \
INSTALL_RKE2_TYPE=server /tmp/install-rke2.sh

# 加入(server/agent):/etc/rancher/rke2/config.yaml
# server: https://<VIP或首节点>:9345
# token: <首节点 /var/lib/rancher/rke2/server/node-token>
systemctl enable --now rke2-server   # 或 rke2-agent

# 获取 kubectl 环境
ln -sf /etc/rancher/rke2/rke2.yaml ~/.kube/config
export PATH=$PATH:/var/lib/rancher/rke2/bin:$PATH

2.2 etcd 快照

bash
rke2 etcd-snapshot save --name manual-0719
rke2 etcd-snapshot list
rke2 etcd-snapshot delete <name>
# 配置自动快照(config.yaml):
# etcd-snapshot-schedule-cron: "0 */6 * * *"
# etcd-snapshot-retention: 5

# 灾难恢复(quorum 丢失)
rke2 server --cluster-reset --cluster-reset-restore-path=<快照路径>

2.3 升级

bash
# 原则:先 server 后 agent,逐台进行,跨小版本不超过 1
# 1) 升级前手工快照
rke2 etcd-snapshot save --name pre-upgrade
# 2) 在线方式:修改版本重装
curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=v1.36.x+rke2r1 sh -
systemctl restart rke2-server
# 3) 验证
kubectl get nodes; rke2 --version
# 或用 system-upgrade-controller 做声明式升级(Plan CRD)

2.4 证书

bash
rke2 certificate rotate            # 轮换所有证书
systemctl restart rke2-server
openssl x509 -in /var/lib/rancher/rke2/server/tls/server-ca.crt -noout -enddate

2.5 卸载

bash
rke2-uninstall.sh        # server 节点
rke2-agent-uninstall.sh  # agent 节点
# 注意:会删除 /var/lib/rancher/rke2、/etc/rancher/rke2、containerd 数据

2.6 关键路径

路径说明
/etc/rancher/rke2/config.yaml主配置文件
/etc/rancher/rke2/registries.yaml镜像仓库 mirror/认证配置
/var/lib/rancher/rke2/bin/rke2 内置工具(kubectl/etcdctl/crictl)
/var/lib/rancher/rke2/server/manifests/静态清单目录(自动 apply)
/var/lib/rancher/rke2/server/db/etcd 数据与快照(snapshots/ 子目录)
/var/lib/rancher/rke2/server/tls/控制平面证书
/var/lib/rancher/rke2/server/node-token加入 token
/var/lib/rancher/rke2/agent/images/离线镜像包目录
/etc/rancher/rke2/rke2.yaml管理员 kubeconfig
/var/log/pods/Pod 日志(containerd 落盘)

2.7 关键端口

端口协议用途需要开放的节点
6443TCPkube-apiserverserver(及 VIP)
9345TCPrke2 supervisor(join)server(及 VIP)
2379/2380TCPetcd client/peerserver 之间
10250TCPkubelet API所有节点
8472UDPcanal/Cilium VXLAN所有节点
51820UDPCilium WireGuard(可选)所有节点
30000-32767TCP/UDPNodePort所有节点
53TCP/UDPCoreDNS / nodelocaldns所有节点

3. 辅助工具速查表

3.1 k9s 快捷键精选

快捷键作用
:pods :svc :deploy :node :ns :ctx切换资源视图
0~9切换命名空间过滤(0=全部)
l查看日志;p 查看 previous 日志
s进入容器 shell
d / ydescribe / 查看 YAML
Ctrl+d删除资源
e编辑资源
/过滤;? 帮助
x进入资源"射线"(关联对象)视图
u查看资源使用情况(top)
Shift+f端口转发
:pulse :xray deploy集群脉搏图 / 资源 X 光

3.2 K8sGPT 常用命令

bash
k8sgpt auth add --backend ollama --model qwen2.5:7b --baseurl http://<host>:11434
k8sgpt auth list
k8sgpt analyze                                  # 基础扫描
k8sgpt analyze --explain --language chinese     # AI 解释 + 中文
k8sgpt analyze --filter Pod,Deployment -n <ns>  # 指定类型/命名空间
k8sgpt analyze --output json > report.json
k8sgpt integration list                         # 查看集成(trivy/prometheus...)
k8sgpt integration activate trivy
k8sgpt analyze --filter VulnerabilityReport --explain
k8sgpt serve                                    # 以 HTTP 服务方式运行

3.3 Velero

bash
velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.10.0 \
  --bucket velero --secret-file credentials-velero \
  --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://<minio>:9000 \
  --use-volume-snapshots=false --default-volumes-to-fs-backup

velero backup create <name> --include-namespaces <ns>
velero schedule create daily --schedule="0 2 * * *" --include-namespaces <ns> --ttl 720h
velero backup get; velero backup describe <name> --details
velero restore create --from-backup <name>
velero restore logs <restore-name>
velero backup-location get

3.4 Trivy

bash
trivy image <>                        # 镜像漏洞扫描
trivy image --severity HIGH,CRITICAL <>
trivy fs /path/to/code                    # 文件系统/IaC 扫描
trivy config ./yaml-dir                   # K8s YAML 配置检查
trivy k8s --report summary cluster        # 集群级扫描

3.5 ArgoCD CLI

bash
argocd login <server>:30443 --username admin --insecure
argocd app list
argocd app create <name> --repo <git> --path <path> --dest-server https://kubernetes.default.svc --dest-namespace <ns>
argocd app sync <name>
argocd app get <name> --refresh
argocd app diff <name>
argocd app rollback <name>
argocd app delete <name> [--cascade]
argocd cluster list; argocd repo list

4. YAML 模板速查

4.1 组合模板:Deployment + Service + Ingress + PVC

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: web-data
  namespace: web
spec:
  accessModes: ["ReadWriteOnce"]
  storageClassName: longhorn
  resources:
    requests: {storage: 5Gi}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  namespace: web
  labels: {app: web}
spec:
  replicas: 3
  strategy:
    rollingUpdate: {maxSurge: 1, maxUnavailable: 0}
  selector:
    matchLabels: {app: web}
  template:
    metadata:
      labels: {app: web}
    spec:
      containers:
      - name: web
        image: 192.168.122.156:30000/library/nginx:1.27
        ports: [{containerPort: 80}]
        resources:
          requests: {cpu: 100m, memory: 128Mi}
          limits:   {cpu: 500m, memory: 512Mi}
        readinessProbe:
          httpGet: {path: /, port: 80}
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          httpGet: {path: /, port: 80}
          initialDelaySeconds: 15
          periodSeconds: 20
        volumeMounts:
        - {name: data, mountPath: /usr/share/nginx/html}
      volumes:
      - name: data
        persistentVolumeClaim: {claimName: web-data}
---
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: web
spec:
  selector: {app: web}
  ports:
  - {name: http, port: 80, targetPort: 80}
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
  namespace: web
  annotations:
    nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
spec:
  ingressClassName: nginx
  rules:
  - host: web.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port: {number: 80}

4.2 NetworkPolicy 模板(default-deny + 放行 DNS + 命名空间内互通)

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: web
spec:
  podSelector: {}
  policyTypes: [Ingress, Egress]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dns
  namespace: web
spec:
  podSelector: {}
  policyTypes: [Egress]
  egress:
  - to:
    - namespaceSelector:
        matchLabels: {kubernetes.io/metadata.name: kube-system}
    ports:
    - {protocol: UDP, port: 53}
    - {protocol: TCP, port: 53}
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-same-namespace-and-ingress
  namespace: web
spec:
  podSelector: {}
  policyTypes: [Ingress]
  ingress:
  - from:
    - podSelector: {}                                  # 同命名空间
    - namespaceSelector:                               # ingress controller
        matchLabels: {kubernetes.io/metadata.name: ingress-nginx}

4.3 RBAC 模板(命名空间级只读 + ServiceAccount)

yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: app-reader
  namespace: web
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: read-only
  namespace: web
rules:
- apiGroups: ["", "apps"]
  resources: ["pods", "pods/log", "services", "deployments"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-reader-binding
  namespace: web
subjects:
- kind: ServiceAccount
  name: app-reader
  namespace: web
roleRef:
  kind: Role
  name: read-only
  apiGroup: rbac.authorization.k8s.io
# 集群级只读改用 ClusterRoleBinding + ClusterRole view

4.4 HPA 模板(v2,CPU + 内存双指标)

yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web
  namespace: web
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 3
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target: {type: Utilization, averageUtilization: 60}
  - type: Resource
    resource:
      name: memory
      target: {type: Utilization, averageUtilization: 75}
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300   # 缩容冷静期,防止抖动

注意事项:使用 HPA 时,Deployment 清单中不要写死 replicas(GitOps 场景会与 HPA 打架);必须配置 requests,Utilization 按 requests 计算。


5. 学习资源

5.1 官方文档(收藏级)

资源地址用途
Kubernetes 官方文档https://kubernetes.io/zh-cn/docs/概念与任务权威参考
RKE2 官方文档https://docs.rke2.io/安装/HA/备份恢复/安全
etcd 官方文档https://etcd.io/docs/Raft、运维、调优
Cilium 文档https://docs.cilium.io/eBPF CNI 深入
ArgoCD 文档https://argo-cd.readthedocs.io/GitOps
Velero 文档https://velero.io/docs/备份恢复
K8sGPT 文档https://docs.k8sgpt.ai/AI 诊断
Helm 文档https://helm.sh/zh/docs/包管理

5.2 CNCF 认证路径

            ┌──────────┐
            │  KCNA    │  Kubernetes and Cloud Native Associate
            │ (入门)    │  云原生全景概念,无实验操作
            └────┬─────┘

            ┌──────────┐
            │  CKA     │  Certified Kubernetes Administrator ★运维首选
            │ (管理员)  │  全实操:集群安装、排错、网络、存储
            └────┬─────┘

            ┌──────────┐        ┌──────────┐
            │  CKS     │        │  CKAD    │
            │ (安全)    │        │ (开发者)  │
            │ 需先持CKA │        │ 应用部署   │
            └──────────┘        └──────────┘
  • KCNA:选择题,覆盖云原生生态概念,适合入门 1~2 月后考。
  • CKA:2 小时全命令行实操,重点:etcd 备份恢复、集群升级、网络策略、排错。本教材第一、二、三、五部分即覆盖其大纲主体。
  • CKS:需有效 CKA 方可报考,内容:镜像扫描(Trivy)、AppArmor/Seccomp、NetworkPolicy、审计、Falco。
  • CKAD:面向开发者,多容器 Pod、Job/CronJob、Service、Helm/Kustomize。

备考建议:CKA 至少完整做过 2 遍 killer.sh 模拟题;把本教材第五部分故障手册练到"看现象就能默写排查命令"。

5.3 推荐书籍与社区

类型推荐
入门书《Kubernetes 权威指南》(龚正 等)
进阶书《Kubernetes in Action》(Marko Lukša)
网络专题《Container Networking: From Docker to Kubernetes》
源码《Kubernetes 源码剖析》(郑东旭)
社区CNCF Slack、Kubernetes 中文社区、Rancher/RKE2 GitHub Discussions
资讯KubeCon 演讲录像、CNCF Blog、kuberneteers 周刊

6. 全教材学习路线图回顾

阶段对应部分核心内容自测标准
第一阶段第一部分 K8s 入门核心概念架构、Pod/Deployment/Service、存储、配置不看文档手写 Deployment+Service YAML 并部署成功;能讲清 Pod 创建全流程
第二阶段第二部分 K8s 进阶实战调度、HPA/VPA、Ingress、NetworkPolicy、RBAC、Helm/Kustomize独立完成多环境 Kustomize 发布;能配置 HPA 并压测验证扩缩容
第三阶段第三部分 RKE2 从入门到精通RKE2 架构、安装(在线/离线)、HA、升级、快照、证书独立搭建 3 server HA 集群;完成一次 etcd 快照恢复演练
第四阶段第四部分 K8s 辅助工具生态k9s、K8sGPT、Velero、Trivy、ArgoCD、Lens用 k9s 完成日常巡检;用 k8sgpt+Ollama 诊断一次制造故障
第五阶段第五部分 综合实战与故障排查四大综合实战、故障手册、面试题完成全部四个实战;故障手册随机抽 5 条能在 10 分钟内定位;20 道面试题能口述要点
附录命令速查与学习资源速查表、YAML 模板、认证路径常用命令形成肌肉记忆;明确下一步认证目标(建议 CKA)

结语:K8s 学习的分水岭不在"会多少命令",而在"出问题时的定位速度"。愿你以本教材为起点,在真实的故障与深夜的告警中,修炼成真正的高手。