内容提要
个人学习部署使用K8S时的踩坑合集,包括关闭swap、禁用swap挂载、部署重置、添加阿里云镜像、启用CRI集成插件、跳过预检、修改CGroupDriver、解决kubelet起不来的问题。
延伸解读
部署前的关键准备:关闭Swap
文章强调部署K8S前必须关闭Swap,否则可能影响kubelet运行。操作包括使用swapoff -a临时关闭,并编辑/etc/fstab永久禁用Swap挂载。这是许多初始化问题的根源,建议在安装前优先检查free -h输出中Swap值是否为0。
初始化失败后的重置与镜像加速
若kubeadm init失败,可用kubeadm reset重置,但个性化配置文件不会删除,需手动清理。针对无法连接Google服务器的问题,可在init命令中添加--image-repository registry.aliyuncs.com/google_containers使用阿里云镜像,加速镜像拉取并避免网络超时。
Preflight检查与CRI集成问题处理
Preflight阶段可能报错不支持CRI v1 API,通常需编辑/etc/containerd/config.toml,取消注释disabled_plugins = ["cri"]以启用CRI插件,并重启containerd。虽然可用--ignore-preflight-errors=all跳过所有检查,但文章明确不推荐,因为可能掩盖配置问题。
CGroupDriver与kubelet启动故障
Docker默认CGroupDriver可能与K8S要求不一致,需在/etc/docker/daemon.json中添加"exec-opts": ["native.cgroupdriver=systemd"],然后重启docker和containerd,并用docker info | grep Cgroup验证。若kubelet起不来,表现为等待API Server健康检查超时,可编辑/lib/systemd/system/kubelet.service,在ExecStart行添加启动参数。
Q&A
部署K8S前为什么要关闭swap?如何操作?
因为K8S要求关闭swap,否则可能影响部署。操作:使用swapoff -a命令关闭swap,并编辑/etc/fstab禁用swap挂载。
kubeadm init时无法连接Google服务器怎么办?
在init命令中添加--image-repository registry.aliyuncs.com/google_containers参数,使用阿里云镜像。
Preflight检查报错不支持CRI v1 API如何解决?
编辑/etc/containerd/config.toml,取消注释disabled_plugins = ["cri"]行,然后重启containerd。
如何跳过kubeadm init的Preflight检查?
可以使用--ignore-preflight-errors=all参数跳过所有预检,但不推荐。
如何修改Docker的CGroupDriver为systemd?
在/etc/docker/daemon.json中添加"exec-opts": ["native.cgroupdriver=systemd"],然后重启docker和containerd。
kubelet启动失败,报错等待API server健康检查超时,如何解决?
编辑/lib/systemd/system/kubelet.service,在ExecStart行添加启动参数,然后重启kubelet服务。