Rancher2.0在virtualbox虚拟机上安装K8S集群时踩的坑
发布时间:2019-06-14
作者:kelajin
github:https://github.com/kelajin
故事背景
众所周知,Rancher是一款很“不错”(注意双引号)的安装、部署、管理k8s集群的工具,因为工作需要,我也在本机通过docker-machine 启动了一个虚拟机集群,在这个过程中就遇到了一个很小但是很恼人的问题,往下看
问题重现
先贴一下运行环境:
# 其实最小化安装本地k8s集群只需要一个节点,而且Rancher可以和k8s的master装在一起
host-machine:
os:linux-manjaro-18.04
cpu: 4
memory: 16Gi
docker-machine-config:
virtualbox: rancheros-latest
guest-machine:
- name: rancher
role: none
ip: 192.168.99.109
- name: master
role: etcd,controlplane
ip: 192.168.99.105
- name: node00
role: worker
ip: 192.168.99.106
- name: node01
role: worker
ip: 192.168.99.107
- name: node02
role: worker
ip: 192.168.99.108
安装虚拟机集群:
参考rancheros的集群安装方式: https://www.cnrancher.com/docs/os/v1.x/cn/quick-start-guide/
安装Rancher:
在rancher机器上安装Rancher2.0:https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/single-node-install/
通过Rancher安装k8s集群:
注意:这种方式是通过Rancher agent容器创建,与kubeadm等工具的安装方式不太一样
安装方法:
坑在这儿
如果你不指定网卡,Rancher就不知道你这几台机器有什么区别,会一直报错 Failed to reconcile etcd plane: Etcd plane nodes are replaced. Stopping provisioning. Please restore your cluster from backup.
原因是啥
因为在docker-machine通过virtualbox安装的虚拟机,安装了两块网卡,一个是NAT模式(与外网通信,ip是固定为10.0.2.15),一个是Host-only模式(内网通信,可以与主机还有其他虚拟机通信,一般是192.168.x.x),而Rancher自己的kubelet镜像中,默认是通过你机器上的NAT网卡通信的,所以当你通过粘贴Rancher给你的命令去注册机器时,机器上的kubelet会通过NAT网卡找到Rancher节点,然后Rancher也懵B了,因为Rancher看到所有的kubelet的ip都是10.0.2.15,这时候Rancher就会不知所措,就会被报错淹没
那么解决方案?
在这里填写你的Host-only模式的网卡名称,一般是eth1,IP是192网段的那个,然后在粘贴到节点上,如果节点上已经有正在运行的Rancher容器了,就把他们全部干掉,命令是
docker ps -aq | xargs sh -c "docker stop {}; docker rm {}"
,或者 docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
,然后在重复上一步骤
成功之后的亚子
总结
这个问题困扰了我一天,疯狂找文档,后来在Rancher官网的英文网站上的一个小角落找到了一个配置说明:
https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/custom-clusters/agent-options/#dynamic-ip-address-options
这个B网站是真的坑,正常人谁会进这么深的目录下面看文档,除了被BUG折磨的程序猿~~
所以说,用第三方的技术一定要谨慎,因为你不知道你会遇到什么狗屁问题。。。还有查文档真的很重要!!!
发布时间:2019-06-14
作者:kelajin
github:https://github.com/kelajin