新买的树莓派4b到货后就迫不及待的烧录上raspberrypi系统,将新派加入我的k8s集群,期间遇到了点小挫折,好歹也一个一个解决了;
在执行kubeadm join时,提示无法连接127.0.0.1:10248;去master节点上看了下这个端口对应的服务是kubelet,那就是kubelet无法启动,我手动强制启动也是失败的;后来查看了下master的kubelet版本,发现master的kubelet版本是v1.23.5;而我新树莓派上的kubelet是v1.24.2;node节点的kubelet版本比master上的还高,于是就果断卸载v1.24.2,安装跟master一致的版本;
apt-get remove kubelet kubeadm kubectl # 卸载当前的版本 apt-cache madison kubelet # 查看当前kubelet的所有版本 apt-get install kubelet=1.23.5-00 kubeadm=1.23.5-00 kubectl=1.23.5-00 # 安装kubelet v1.23.5(版本号要写用apt-cache madison命令查到的版本写)
为了避免kubeadm和kubectl也因为版本高而无法加入k8s集群,同样卸载安装了跟master一致的版本;
kubelet版本没有问题之后,执行kubeadm join发现还是无法加入k8s集群,看报错是时间问题,用date命令发现竟然不是CST时间,于是开始更改时区为Asia/Shanghai
dpkg-reconfigure tzdata
看了下github上老外的解释:出现这个的原因是因为树莓派5.x以上的内核缺少cgroup; https://github.com/raspberrypi/linux/issues/3644
CGROUPS_MEMORY: missing CGROUPS_PIDS: enabled CGROUPS_HUGETLB: missing [WARNING SystemVerification]: missing optional cgroups: hugetlb error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR SystemVerification]: missing required cgroups: memory [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` To see the stack trace of this error execute with --v=5 or higher
在执行以下方式之前需要将前面执行kubeadm jion生成的配置文件删除掉,路径:/etc/kubernetes/kubelet.conf和/etc/kubernetes/pki/ca.crt
以下两种方式二选一即可
方式1:直接忽略该错误 ,加入--ignore-preflight-errors all参数
root@pinode1:/etc/kubernetes # kubeadm join 192.168.31.85:6443 --token ejdy9l.3p2bae948grk4mr8 --discovery-token-ca-cert-hash sha256:ecbf80d7c76e21074d6ef09107cf222c4aba350b36fa56bbce6e2ede483a1116 --ignore-preflight-errors all
方式2:编辑/boot/cmdline.txt
cgroup_enable=memory cgroup_memory=1
编辑完保存之后,需要reboot重启树莓派;
最后,再次执行kubeadm jion树莓派加入k8s集群成功