AI Infra 训练营
总览
  • 总览
  • 完整安装
  • 核心 K8s
  • Cilium 网络
  • Longhorn 存储
  • 监控日志
  • CI / GitOps
  • 安全准入
  • Day 0 · 新手接管 Runbook
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
命令手册
HiHuo 主站
GitHub
总览
  • 总览
  • 完整安装
  • 核心 K8s
  • Cilium 网络
  • Longhorn 存储
  • 监控日志
  • CI / GitOps
  • 安全准入
  • Day 0 · 新手接管 Runbook
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
命令手册
HiHuo 主站
GitHub
  • 实操 Runbook

    • Runbook 总览:从零部署、查看、调试
    • 完整安装总 Runbook:5 台 Ubuntu 到可用平台
    • 核心 K8s Runbook:apiserver / etcd / kubelet / containerd / HAProxy
    • Cilium 网络 Runbook:安装、查看、调试
    • Longhorn 存储 Runbook:安装、查看、调试
    • 监控日志 Runbook:Prometheus / Grafana / Loki / Alertmanager
    • CI / GitOps Runbook:Harbor / Gitea / Jenkins / Kaniko / ArgoCD
    • 安全准入 Runbook:RBAC / PSA / Kyverno / ResourceQuota

核心 K8s Runbook:apiserver / etcd / kubelet / containerd / HAProxy

这篇只讲 K8s 核心,不讲 CNI、存储、监控。你需要能回答:

  • 这些组件分别干什么。
  • 怎么安装。
  • 怎么看它们是否正常。
  • 出故障先查哪里。

1. 组件作用

组件跑在哪里作用
kube-apiserver3 个 control planeK8s API 入口,kubectl 和控制器都访问它
etcd3 个 control planeK8s 数据库,保存所有对象和状态
kube-scheduler3 个 control plane决定 Pod 放到哪个节点
kube-controller-manager3 个 control plane不断把实际状态调成期望状态
kubelet每台节点节点代理,负责启动 Pod、上报节点状态
containerd每台节点容器运行时,真正拉镜像、启动容器
HAProxy每台节点本机 apiserver 高可用入口 127.0.0.1:16443

kubectl 的路径:

kubectl -> kubeconfig -> https://k8s-api:16443
        -> /etc/hosts 解析到 127.0.0.1
        -> 本机 HAProxy
        -> 3 个 apiserver 中健康的一个
        -> etcd

2. 查看核心组件

在 cp-1 执行:

kubectl get nodes -o wide

kubectl get pods -n kube-system -o wide | grep -E \
  'kube-apiserver|kube-controller-manager|kube-scheduler|etcd'

kubectl get componentstatuses

节点侧:

systemctl status kubelet --no-pager
systemctl status containerd --no-pager
systemctl status haproxy --no-pager

journalctl -u kubelet --since "10 min ago" --no-pager | tail -100
journalctl -u containerd --since "10 min ago" --no-pager | tail -100
journalctl -u haproxy --since "10 min ago" --no-pager | tail -100

为什么既看 Pod 又看 systemd:control plane 组件是 static Pod,由 kubelet 管;kubelet/containerd/HAProxy 是 systemd 服务,由操作系统管。


3. 验证 apiserver 入口

getent hosts k8s-api
ss -tlnp | grep 16443
curl -k https://127.0.0.1:16443/readyz
kubectl get --raw='/readyz?verbose'

期望:

  • getent hosts k8s-api 返回 127.0.0.1。
  • HAProxy 监听 127.0.0.1:16443。
  • /readyz 返回 ok。

如果 kubectl 报:

lookup k8s-api on 127.0.0.53:53: server misbehaving

先修 /etc/hosts,不要先重启集群。见 Day 0 Runbook 的 k8s-api 故障。


4. containerd 查看和调试

crictl info
crictl ps -a | head
crictl images | head

ctr -n k8s.io images ls | head

df -h /var/lib/containerd
du -sh /var/lib/containerd/* 2>/dev/null

常见问题:

现象先看常见原因
Pod 卡 ImagePullBackOffkubectl describe pod、crictl pull镜像地址错、私有仓库认证错、containerd 没配 HTTP registry
kubelet 报 runtime not readycrictl info、journalctl -u containerdcontainerd 没启动、CRI socket 错
节点磁盘满df -h /var/lib/containerd镜像缓存太多、容器日志太大

清理镜像前先确认业务不需要:

crictl images
crictl rmi --prune

5. kubelet 查看和调试

systemctl status kubelet --no-pager
journalctl -u kubelet --since "30 min ago" --no-pager | tail -200

cat /var/lib/kubelet/config.yaml | sed -n '1,120p'
cat /var/lib/kubelet/kubeadm-flags.env

kubelet 常见错误:

日志关键字含义排查方向
Unable to register nodekubelet 连不上 apiserverk8s-api、HAProxy、证书
container runtime is down连不上 containerdsystemd、CRI socket
NetworkPluginNotReadyCNI 没好Cilium
MountVolume卷挂载失败Longhorn / PVC
InvalidDiskCapacity容器运行时或磁盘探测异常containerd、磁盘

6. etcd 查看和备份

etcd 是 K8s 数据库。误删 etcd 数据目录等于删整个集群状态。

查看 Pod:

kubectl get pod -n kube-system -l component=etcd -o wide

在 cp-1 上用 etcdctl:

export ETCDCTL_API=3
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key

etcdctl --endpoints=https://127.0.0.1:2379 endpoint status -w table
etcdctl --endpoints=https://127.0.0.1:2379 member list -w table

备份:

mkdir -p /backup/etcd
etcdctl --endpoints=https://127.0.0.1:2379 \
  snapshot save /backup/etcd/etcd-$(date +%Y%m%d-%H%M%S).db

etcdctl snapshot status /backup/etcd/*.db -w table

为什么必须备份:K8s 所有 Deployment、Secret、PVC 绑定、RBAC 都在 etcd。没有 snapshot,控制面坏到 quorum 丢失时只能重建集群。


7. 节点 NotReady 排查树

kubectl get nodes
  -> NotReady
    -> kubectl describe node <node>
    -> journalctl -u kubelet
      -> lookup k8s-api 失败: 修 /etc/hosts
      -> runtime not ready: 查 containerd
      -> NetworkPluginNotReady: 查 Cilium
      -> disk pressure: 查磁盘和 containerd
      -> memory pressure: 查 top / pods requests

实用命令:

kubectl describe node k8s-cp-1
kubectl top node
kubectl get pods -A -o wide | grep k8s-cp-1
ssh root@154.201.73.31 'df -h; free -h; top -b -n1 | head -30'
在 GitHub 上编辑此页
Prev
完整安装总 Runbook:5 台 Ubuntu 到可用平台
Next
Cilium 网络 Runbook:安装、查看、调试