rancher:2.3.3 目前最新的
之前已部署的docker版本:18.06.1-ce
部署时选择的Kubernetes版本:v1.16.1-rancher1-1
一、rancher简单部署
- 配置阿里云镜像加速器,这个去阿里云官网登陆之后找自己的容器镜像服务,切到镜像加速器,就有相关配置说明,这里不再说明
- 执行命令启动rancher,单机版
sudo docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /var/lib/rancher/:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e CATTLE_SYSTEM_CATALOG=bundled \
-e AUDIT_LEVEL=3 \
rancher/rancher:stable
本地没镜像会自动去仓库拉取镜像,最后启动成功后,访问部署服务器的ip即可。
初次访问会让设置密码,即admin用户密码,设置完成后就进入rancher了。
二、kubernetes集群部署
- rancher界面右下角中可以切换语言,切换成中文,然后再点添加集群,选择“自定义”。
然后就基本默认了,除了改了下“高级集群”选项中的,“Nginx Ingress”改为禁用,“Docker根目录”改为实际自己的目录。 - 配置项定好后,点击“下一步”,“添加主机命令”时勾选:etcd、Control、Worker。然后复制命令,到服务器上执行。
完工。
理论上到这里执行完,集群就可用了,但是 并没有,报错了。。
遇到的问题之一
[workerPlane] Failed to bring up Worker Plane: [Failed to verify healthcheck:
Failed to check http://localhost:10248/healthz for service [kubelet] on host [x.x.x.x]:
Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused,
log: W0112 09:02:56.089640 19588 cni.go:237]
Unable to update cni config: no valid networks found in /etc/cni/net.d]
参考了百度,使用如下方法解决了,但是这种方法还不是最优,(记得往下看)
添加配置文件
mkdir /etc/cni/net.d
vi /etc/cni/net.d/10-flannel.conflist
{ "name": "cbr0", "cniVersion": "0.3.0", #这个版本内是去rancher的官方docker仓库中查到的flannel-cni最新版本 "plugins": [ { "type": "flannel", "delegate": { "hairpinMode": true, "isDefaultGateway": true } }, { "type": "portmap", "capabilities": { "portMappings": true } } ] }
添加完配置,等rancher自动重新deploy后,还是不行然后就去看了kubelet容器日志,有报错
[failed to find plugin "flannel" in path [/opt/cni/bin] failed to find plugin "portmap" in path [/opt/cni/bin]]
W0112 08:59:08.381411 15131 cni.go:237] Unable to update cni config: no valid networks found in /etc/cni/net.d
可能由于之前误操作或者kubelet自动清理/opt/cni/bin
目录下没有任何程序了,然后复制了其它同镜像的容器里/opt/cni/bin
下面的文件到宿主机/opt/cni/bin
目录下,就好了。没有报错,问题解决。但这种自己加配置文件,cniVersion还糊里糊涂的方式明显不合适,于是就又看了看rancher的kubernetes配置。
最后找到了问题所在:
rancher默认的kubernetes配置中,默认注释掉了网络提供者,取消注释就行了
在集群界面,点击“编辑集群”,然后选择“编辑yaml”,在kubernetes的配置yaml中,network
部分从上面的注释中复制如下配置,添加进去:
canal_network_provider:
iface: eth1
配置如图:
然后rancher会自动做重新deploy,会自动拉取flannel-cni镜像,做cni配置,会花一段时间,基本上这个问题就解决了。
这个过程中可能会报错
Failed to get job complete status for job rke-network-plugin-deploy-job in namespace kube-system
之类的,这是因为拉去cni相关镜像需要一段时间,如果不确定的话,可以直接去看kubelet容器日志跟一下进度。
遇到的问题之二
网络问题解决之后,又遇到了新的报错:
Failed to start ContainerManager failed to initialize top level QOS containers:
failed to update top level BestEffort QOS cgroup :
failed to set supported cgroup subsystems for cgroup [kubepods besteffort]:
failed to find subsystem mount for required subsystem: pids
百度的结果是让
在ExecStart上添加
--feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false
但我们这是在编辑yaml,于是就改成了:
yaml文件中kubelet那一项下面添加配置:
extra_args:
feature-gates: 'SupportNodePidsLimit=false,SupportPodPidsLimit=false'
配置如图:
然后rancher会自动重新deploy,最后完事儿之后,集群就好了哈哈哈哈哈(不愧是我。
三、部署结果
节点(包含etcd、control、worker)最后启动的所有容器如下图:
集群状态如下图:
最后再附一个rancher节点清理指路,以前残留的数据会影响集群的,要注意保证服务器环境的整洁,kubelet容器会挂载/etc/cni
,/opt/cni
目录的,etcd会挂载/var/lib/etcd
目录。
https://docs.rancher.cn/rancher2x/admin-manual/remove/#_1-%E6%89%8B%E5%8A%A8%E6%B8%85%E7%90%86%E8%8A%82%E7%82%B9