主题
附录 命令速查与学习资源
本附录是《Kubernetes + RKE2 + K8s 辅助工具:从入门到精通》全教材的"口袋卡片":常用命令按场景分组速查、高频 YAML 模板即拿即用、学习资源与认证路径、以及全书学习路线图回顾。建议收藏或打印,随用随查。
目录
1. kubectl 速查表
约定:
<ns>命名空间、<pod>Pod 名、<deploy>Deployment 名。建议配置别名:alias k=kubectl与source <(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 工作负载
| 场景 | 命令 |
|---|---|
| 查看 Pod | kubectl 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/Endpoints | kubectl get svc,ep -n <ns> |
| Ingress | kubectl get ing -A |
| DNS 测试 | kubectl run -it --rm dns --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default |
| 网络策略 | kubectl get networkpolicy -A |
| 临时网络工具 Pod | kubectl run -it --rm net --image=nicolaka/netshoot --restart=Never -- bash |
| 查看 Service 转发(节点上) | ipvsadm -Ln 或 iptables -t nat -L KUBE-SERVICES -n |
1.4 存储
| 场景 | 命令 |
|---|---|
| PV/PVC/SC | kubectl get pv,pvc,sc -A |
| PVC 详情 | kubectl describe pvc <pvc> |
| 扩容 PVC | kubectl 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 |
| 只看不正常 Pod | kubectl 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 |
| 强制删除卡死 Pod | kubectl delete pod <pod> --grace-period=0 --force |
| 查看 Finalizer 卡死资源 | kubectl get <资源> <名> -o jsonpath='{.metadata.finalizers}' |
| 资源用量 | kubectl top pod -n <ns> --containers --sort-by=memory |
| 节点压力 Condition | kubectl 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:$PATH2.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 -enddate2.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 关键端口
| 端口 | 协议 | 用途 | 需要开放的节点 |
|---|---|---|---|
| 6443 | TCP | kube-apiserver | server(及 VIP) |
| 9345 | TCP | rke2 supervisor(join) | server(及 VIP) |
| 2379/2380 | TCP | etcd client/peer | server 之间 |
| 10250 | TCP | kubelet API | 所有节点 |
| 8472 | UDP | canal/Cilium VXLAN | 所有节点 |
| 51820 | UDP | Cilium WireGuard(可选) | 所有节点 |
| 30000-32767 | TCP/UDP | NodePort | 所有节点 |
| 53 | TCP/UDP | CoreDNS / nodelocaldns | 所有节点 |
3. 辅助工具速查表
3.1 k9s 快捷键精选
| 快捷键 | 作用 |
|---|---|
:pods :svc :deploy :node :ns :ctx | 切换资源视图 |
0~9 | 切换命名空间过滤(0=全部) |
l | 查看日志;p 查看 previous 日志 |
s | 进入容器 shell |
d / y | describe / 查看 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 get3.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 list4. 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 view4.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 学习的分水岭不在"会多少命令",而在"出问题时的定位速度"。愿你以本教材为起点,在真实的故障与深夜的告警中,修炼成真正的高手。