rancher部署k8s遇到的问题总结

rancher:2.3.3 目前最新的
之前已部署的docker版本:18.06.1-ce
部署时选择的Kubernetes版本:v1.16.1-rancher1-1

一、rancher简单部署

  1. 配置阿里云镜像加速器,这个去阿里云官网登陆之后找自己的容器镜像服务,切到镜像加速器,就有相关配置说明,这里不再说明
  2. 执行命令启动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集群部署

  1. rancher界面右下角中可以切换语言,切换成中文,然后再点添加集群,选择“自定义”。
    然后就基本默认了,除了改了下“高级集群”选项中的,“Nginx Ingress”改为禁用,“Docker根目录”改为实际自己的目录。
  2. 配置项定好后,点击“下一步”,“添加主机命令”时勾选: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'

配置如图:


添加feature-gates相关配置

然后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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。