个人学习部署使用K8S时的踩坑合集。
切记先关了 swap
- 查看swap状态:如果Swap后面值不为0,则需要先关闭Swap。
1
2
3
4root@k8s-learn-n1:/home/kawaii# free -h
total used free shared buff/cache available
Mem: 7.8Gi 301Mi 5.9Gi 1.0Mi 1.5Gi 7.2Gi
Swap: 0B 0B 0B - 禁用Swap:
1
swapoff -a
- 别忘了禁用
/etc/fstab
里面的swap挂载。
部署重置
如果第一次初始化过程中出了问题可以用下面的命令重置,但其实不会删除包含个性化配置的配置文件。
1 | kubeadm reset |
init时无法连接Google服务器
在 init 命令中添加阿里云镜像:--image-repository registry.aliyuncs.com/google_containers
。例如:
1 | kubeadm init \ |
Preflight时不支持CRI v1 API
一般这个会出现在从源安装Docker后的默认情况下,打开/etc/containerd/config.toml
,取消注释其中的disabled_plugins = ["cri"]
行启用CRI集成插件,然后重启containerd(systemctl restart containerd
)。
跳过所有Preflight
不推荐。可以使用--ignore-preflight-errors=all
跳过预检:
1 | kubeadm init [...] --ignore-preflight-errors=all |
修改CGroupDriver
在/etc/docker/daemon.json
中添加:
1 | { |
然后重启docker和containerd,重启之后可以用如下命令看一下有没有修改成功:
1 | root@VM-16-2-ubuntu:~# docker info | grep Cgroup |
kubelet起不来
表现为报错:
1 | I0228 14:52:31.056862 20490 waitcontrolplane.go:83] [wait-control-plane] Waiting for the API server to be healthy |
解决方案是编辑一下/lib/systemd/system/kubelet.service
,找到如下行添加启动参数:
1 | [Service] |
然后重启,重启后先kubeadm reset
重置,然后重新init即可。