跳到文章

Centos7用kubeadm部署k8s集群踩坑

将 k8s 集群从 ubuntu 换到了 centos,用 kubeadm 部署遇到了几个坑,记录一下

1.epel

centos 默认源里什么都没有,安装 epel 是必须的。

sudo yum install epel-release

2.hostname

2.1

centos 特别坑的一点是,hostname 不会根据 username 自动设置,正常情况下影响不大,但是遇到 k8s 之后,这就是个留给新手的大坑,

虽然 k8s 官方文档中说明了要确保 Unique hostname, MAC address, and product_uuid for every node.

但是如果每个 node 的 hostname 都相同,也不会报错,这就很坑。

如果你有多个 node,hostname 还都是一个名字,例如 centos 默认的 hostname ,那么当你运行

kubectl get nodes 

结果只会显示一个master节点,因为k8s认为相同的 name 就是一个 node。

2.2

要解决这个问题,就要在初始化集群之前为每一个 node 设置好唯一的 hostname。

2.3

如果你已经遇到了这个问题,那么最好是重建集群,

每个节点上运行

kubeadm reset

并且删除 $HOME/.kube/config

然后用

kubeadm init 

重建集群

3.交换分区

关闭交换分区对于 k8s 来说是必须的。但是网上很多教程都是用

swapoff -a

这个命令虽然可以关闭交换分区,但是是暂时的。重启就会失效,k8s 集群也无法启动,

所以最好是在用 swapoff 命令的同时,也修改 /etc/fstab 文件,

通过注释掉 swap 部分,禁用交换分区的自动挂载

4.firewall

关闭 firewall

systemctl disable firewalld
systemctl stop firewalld