在linode服务器上安装kubernetes集群

前言

这篇文章其实主要是记录我在安装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
2
3
4
root@localhost:~$ lsmod
Module Size Used by
root@localhost:~$ uname -a
Linux localhost 4.5.0-x86-linode84 #2 SMP Mon Mar 14 18:19:49 EDT 2016 i686 i686 i686 GNU/Linux

解决过程

既然这样,那就只能跑一个自定义的kernel版本了。然而在build linode机器的时候内核版本没有办法选择。好在还可以选择grub的方式boot,官方文档也给了一篇相关的文章。按照它的流程执行完,发现内核版本已经变了,lsmod也有了好多模块:

1
2
3
4
5
6
7
8
[root@li85-212 ~]# uname -a
Linux li85-212.members.linode.com 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@li85-212 ~]# lsmod
Module Size Used by
xt_comment 12504 1
ip6t_rpfilter 12546 1
ip6t_REJECT 12939 2
# 此处省略好多行

这里有一点要注意,linode默认rebuild的时候是没有开启”Auto-configure Networking”的,把最下面那个选上,再rebuild即可。不然服务器启动,你会发现ifconfig只有一个lo的本地网口,外网网卡没有了。

然而工作到这里还没做完,此时内核还是没有开启vxlan,这个时候执行下modprobe vxlan就ok了,

1
2
3
4
[root@li85-212 ~]# lsmod | grep vxlan
vxlan 41236 0
ip6_udp_tunnel 12755 1 vxlan
udp_tunnel 13187 1 vxlan

然后就可以接着执行之前安装kubernetes的ansible脚本,等着它执行完毕了~