前言
这篇文章其实主要是记录我在安装kubernetes集群时遇到的坑,然后是如何解决的。关于kubernetes的概念,以及安装kubernetes的详细流程将不在本文涉及。
问题背景
我已经在Digital Ocean成功部署了一个小型的kubernetes集群,包含一个master和一个slave。部署的方式是使用ansible,这里有一个项目可以参考contrib,按照里面的配置配一下,就可以一键部署集群了。
由于linode机器比DO的机器性价比高一点($40/month这一档前者是4核的CPU,后者只有2核),所以想把集群迁移到linode上。然而在使用脚本部署的过程中总是报错,查了一下发现kubernetes的flannel网络层插件始终起不来,查看了systemctl的日志,发现flannel无法初始化vxlan的网络,具体症状可以参考这样一个issue。
总结来说,就是linode服务器的内核默认是他们封装过的版本,和linux推出的官方内核有区别,他们的内核无法支持vxlan网络层驱动,执行lsmod
发现是空的。
1 | root@localhost:~$ lsmod |
解决过程
既然这样,那就只能跑一个自定义的kernel版本了。然而在build linode机器的时候内核版本没有办法选择。好在还可以选择grub
的方式boot,官方文档也给了一篇相关的文章。按照它的流程执行完,发现内核版本已经变了,lsmod也有了好多模块:
1 | [root@li85-212 ~]# uname -a |
这里有一点要注意,linode默认rebuild的时候是没有开启”Auto-configure Networking”的,把最下面那个选上,再rebuild即可。不然服务器启动,你会发现ifconfig
只有一个lo的本地网口,外网网卡没有了。
然而工作到这里还没做完,此时内核还是没有开启vxlan,这个时候执行下modprobe vxlan
就ok了,
1 | [root@li85-212 ~]# lsmod | grep vxlan |
然后就可以接着执行之前安装kubernetes的ansible脚本,等着它执行完毕了~