Rancher+K8S+Docker集群搭建

Ubuntu安装

准备工作:准备VMware+Ubuntu(ubuntu-18.04.5-live-server-amd64.iso)

1.1 虚拟机安装

步骤不做赘述,参照下图步骤即可:

网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker


网心云群晖虚拟机 docker 群晖 docker 虚拟机_linux_02


网心云群晖虚拟机 docker 群晖 docker 虚拟机_ubuntu_03


网心云群晖虚拟机 docker 群晖 docker 虚拟机_centos_04

设置虚拟机名称和虚拟机所在磁盘位置

网心云群晖虚拟机 docker 群晖 docker 虚拟机_ubuntu_05


网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker_06


虚拟机内存根据本机实际情况而定,此处设置为4G

网心云群晖虚拟机 docker 群晖 docker 虚拟机_linux_07


采用桥接网络

网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker_08


网心云群晖虚拟机 docker 群晖 docker 虚拟机_centos_09


网心云群晖虚拟机 docker 群晖 docker 虚拟机_docker_10


网心云群晖虚拟机 docker 群晖 docker 虚拟机_linux_11

网心云群晖虚拟机 docker 群晖 docker 虚拟机_docker_12


此处点击自定义硬件

网心云群晖虚拟机 docker 群晖 docker 虚拟机_ubuntu_13


网心云群晖虚拟机 docker 群晖 docker 虚拟机_linux_14

点击完成.

1.2 运行安装的VM

点击运行改虚拟机完成系统安装

网心云群晖虚拟机 docker 群晖 docker 虚拟机_centos_15


后面一直选择DONE

语言选择Engilsh

设置用户名、服务名、密码、在提示回车和重启的时候记得点击下就ok了。

完成后如图:

网心云群晖虚拟机 docker 群晖 docker 虚拟机_docker_16


点击回车输入用户名和密码进入系统

查看虚拟机ip

$ ip addr

网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker_17


查看hosts信息

$ cat /etc/hosts

修改hosts文件,将rancher主机和集群主机的ip互相指定(非必须)

$ vim /etc/hosts

如图:

网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker_18


查看本机名

$ cat /etc/hostname

1.3 安装SSH服务

安装ssh服务后使用Shell、PuTTY、MobaXterm、WinSCP(文件传输)等工具远程连接

$ sudo apt-get install openssh-server

1.4 设置固定ip

$ vim /etc/netplan/00-installer-config.yaml

network:
  ethernets:
    ens33:
      dhcp4: false
      addresses: [192.168.5.72/23] #ip
      gateway4: 192.168.5.1 #网关
      nameservers:
        addresses: [61.139.2.69] #dns
  version: 2

应用配置的网络信息

sudo netplan apply

----------------多台VM安装设置如上--------------

Docker安装

2.1 更新apt软件包索引

更新apt软件包索引并安装软件包,允许apt通过HTTPS使用存储库

$ sudo apt-get update
$ sudo apt-get install \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg-agent \
  software-properties-common

2.2 添加Docker的官方GPG密钥

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

验证您现在是否拥有带有指纹的密钥

$ sudo apt-key fingerprint 0EBFCD88

输出如下信息为正常

网心云群晖虚拟机 docker 群晖 docker 虚拟机_docker_19

2.3 设置稳定的存储库

依需求在以下命令中的单词后面添加nightly或test(或两者)stable

$ sudo add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"

更新apt程序包索引

$ sudo apt-get update

2.4 安装Docker

查看所有可用版本

$ apt-cache madison docker-ce

使用任何列中的版本字符串安装特定版本

$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

此处使用19.03.12特定的版本

eg: $ sudo apt-get install docker-ce=5:19.03.12~3-0~ubuntu-bionic docker-ce-cli=5:19.03.12~3-0~ubuntu-bionic containerd.io

2.5 重启Docker

重新启动Docker指令

$ sudo systemctl restart docker

2.6 安装本地image仓库

在当前用户下的自定义路径下创建仓库(一台主机当做本地仓库)

$ sudo docker run -d -p 5000:50000 -v $自定义路径:/var/lib/registry --name registry registry:2
eg: $ sudo docker run -d -p 5000:50000 -v  /home/rancher:/var/lib/registry --name registry registry:2

注意此处的冒号一定要有。

每一台要使用该image仓库的主机要在/etc/docker/daemon.json 加入下列内容, 并重新启动docker。有两种方式:

先进入对应目录

$ cd /etc/docker/

不存在daemon.json文件则进行创建

$ touch daemon.json

方式A:

编辑daemon.json文件,设置镜像地址和本地仓库地址(可了解下vi的用法)

$ sudo vim /etc/docker/daemon.json

内容如下:

{
   	 	"registry-mirrors": [
   	 		"https://kfwkfulq.mirror.aliyuncs.com",
			"https://2lqq34jg.mirror.aliyuncs.com",
			"https://pee6w651.mirror.aliyuncs.com",
			"https://registry.docker-cn.com",
			"http://hub-mirror.c.163.com"
           ],
   		 "insecure-registries": ["$本地仓库ip:5000"],
   	 	 "debug": true,
   	  	 "experimental": false,
   	  	 "dns": ["8.8.8.8", "8.8.4.4"]

}

方式B:

$ sudo vim /etc/docker/daemon.json

内容如下:

{
    "registry-mirrors": [
    		"https://kfwkfulq.mirror.aliyuncs.com",
			"https://2lqq34jg.mirror.aliyuncs.com",
			"https://pee6w651.mirror.aliyuncs.com",
			"https://registry.docker-cn.com",
			"http://hub-mirror.c.163.com"
			]
}

修改docker.service文件

$ sudo vim /lib/systemd/system/docker.service

在此处设置本机仓库地址信息

ExecStart=/usr/bin/dockerd $本地仓库 -H fd:// --containerd=/run/containerd/containerd.sock
eg: ExecStart=/usr/bin/dockerd --insecure-registry $本地仓库ip:5000 -H fd:// --containerd=/run/containerd/containerd.sock

此处一定要细心。

重新加载配置文件!!!

$ sudo systemctl daemon-reload

重启Docker!!!

$ sudo systemctl restart docker

-----参与集群的VM都要安装如上Doker--------

Rancher安装

3.1 安装Rancher

选取一台主机(VM)进行Rancher的安装

$ sudo docker run -d --privileged --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:v2.4.8

#rancher/rancher:冒号后面用来添加指定版本

会先提示找不到该镜像,等等就好了,下载好后在网页输入IP进入RANCHER的页面(登录界面自行设置密码,账户名为admin)

如图:

网心云群晖虚拟机 docker 群晖 docker 虚拟机_centos_20

3.2 安装Kubectl

安装Kubectl1.18.6

$ sudo curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.6/bin/linux/amd64/kubectl

使用二进至可执行的文件

$ sudo chmod +x ./kubectl

移动路径位置

$ sudo mv ./kubectl /usr/local/bin/kubectl

检查kubectl有无安装起来

$ kubectl version --client

输出json信息对应版本号即可。

建立集群

4.1 添加集群

在Rancher管理界面添加集群(Add Cluster)

网心云群晖虚拟机 docker 群晖 docker 虚拟机_linux_21


设置名称

网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker_22


网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker_23


在Advanced Options处找寻Node Port Range,设置为 1-65535后点击下一步将下面的每个选项都打√,负责下面的指令到参与集群的VM中执行

网心云群晖虚拟机 docker 群晖 docker 虚拟机_docker_24


等待执行完成,自行完成后界面会自己跳转,在管理界面看到下图视为添加完成。

网心云群晖虚拟机 docker 群晖 docker 虚拟机_docker_25


参与集群的节点

网心云群晖虚拟机 docker 群晖 docker 虚拟机_docker_26


等待状态变为正常Active(此等待过程下载内容较多,耐心等待)

网心云群晖虚拟机 docker 群晖 docker 虚拟机_ubuntu_27

K8S获取节点

5.1 建立config

网心云群晖虚拟机 docker 群晖 docker 虚拟机_网心云群晖虚拟机 docker_28HOME /.kube的文件夹

eg: $ mkdir -m 777 /home/rancher/.kube

进入该文件夹创建config文件

$ touch config

点击Rancher管理界面仪表盘右边的Kubeconfig File

网心云群晖虚拟机 docker 群晖 docker 虚拟机_centos_29


复制里面的内容

网心云群晖虚拟机 docker 群晖 docker 虚拟机_centos_30

5.2 写入节点配置文件

将复制的内容写入新建的config文件中

$ sudo vim /home/rancher/.kube/config

让kubectl能辨识到~/.kube/config

$ export KUBECONFIG=/home/rancher/.kube/config

确认kubectl有没有抓到nodes

$ kubectl cluster-info

或者

$ kubectl get nodes

网心云群晖虚拟机 docker 群晖 docker 虚拟机_ubuntu_31


输出参与集群的主机节点则搭建完成。

进入集群所在的服务器进行对应服务的部署即可。

常见问题&处理方法

Q1 unhealthy

出现[etcd] Failed to bring up Etcd Plane: etcd cluster is unhealthy: hosts [192….

A1:
1、检查VM之间的网络是否互通

2、检查主机时钟,并使各主机时钟同步

3、该主机之前添加过 kubernetes 集群,残留数据没有清理干净。需删除容器和镜像然后再从新添加集群,删除的指令如下:

删除rancher相关容器
$ sudo docker stop $(sudo docker ps -aq)

$ sudo docker system prune -f

$ sudo docker volume rm $(sudo docker volume ls -q)

$ sudo docker image rm $(sudo docker image ls -q)

删除mount挂载点
$ for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done

删除映射的目录
$ sudo rm -rf /etc/ceph \
/etc/cni \
/etc/kubernetes \
/opt/cni \
/opt/rke \
/run/secrets/kubernetes.io \
/run/calico \
/run/flannel \
/var/lib/calico \
/var/lib/etcd \
/var/lib/cni \
/var/lib/kubelet \
/var/lib/docker \
/var/lib/rancher/rke/log \
/var/log/containers \
/var/log/pods \
/var/run/calico \
/var/lib/rancher 

重启机器
$ reboot
或者
$ sudo systemctl restart containerd
$ sudo systemctl restart docker

Q2 docker无法移除

出现docker无法停止或无法移除

A2:
1、检查是否下载了docker
2、检查docker.service配置信息
3、检查daemon.json配置信息

使用docker rmi 镜像名删除

Q3 8080 was refused

出现The connection to the server localhost:8080 was refused - did you specify the right host or port?

A3:
检查设置的路径是否正确,检查是否执行$ export KUBECONFIG=/home/rancher/.kube/config指令

Q4 Device or resource busy

出现rm: cannot remove '/var/lib/kubelet/pods/ Device or resource busy

A4:
umount $(df -HT | grep '/var/lib/kubelet/pods' | awk '{print $7}')
或者移除指定的绑定

删除指定kubctl的节点时提示Device or resource busy
rm -rf cdfd463f-0614-4312-8b3d-61dbc2f9392b/

rm: cannot remove 'cdfd463f-0614-4312-8b3d-61dbc2f9392b/volume-subpaths/mq-nginx-volume/pod-nginx/0': Device or resource busy

$ umount -f /var/lib/kubelet/pods/cdfd463f-0614-4312-8b3d-61dbc2f9392b/volume-subpaths/mq-nginx-volume/pod-nginx/0
移除指定的文件后就可以正常删除了

Q5 2379

A5:
检查网络配置是否正常

常用指令

查看etcd日志

$ docker logs etcd

Docker容器开机自启动设置

启用开机自启动

$ sudo systemctl enable docker

禁用开机自启动

$ sudo systemctl disable docker

查看开机启动状态

$ systemctl list-unit-files docker.service

重新加载docker配置信息

$ sudo systemctl daemon-reload

重启docker

$ sudo systemctl restart docker

查看docker运行状态

$ sudo systemctl status docker

查看真正运行的容器

$ docker ps

查看所有的容器

$ docker ps -a

查看docker镜像

$ docker images

重置root的密码

$ sudo passwd

查看端口

$ netstat -lntp

重启

$ sudo reboot
或者
$ sudo shutdown -r now

拉取所需要的镜像

docker pull registry:2
docker pull rancher/hyperkube:v1.18.12-rancher1
docker pull rancher/rke-tools:v0.1.66
docker pull rancher/nginx-ingress-controller:nginx-0.35.0-rancher2
docker pull rancher/rancher-agent:v2.4.8
docker pull rancher/rancher:v2.4.8
docker pull rancher/rke-tools:v0.1.64
docker pull rancher/calico-node:v3.13.4
docker pull rancher/calico-pod2daemon-flexvol:v3.13.4
docker pull rancher/calico-cni:v3.13.4
docker pull rancher/coredns-coredns:1.6.9
docker pull rancher/coreos-flannel:v0.12.0
docker pull rancher/kube-api-auth:v0.1.4
docker pull rancher/coreos-etcd:v3.4.3-rancher1
docker pull rancher/metrics-server:v0.3.6
docker pull rancher/cluster-proportional-autoscaler:1.7.1
docker pull rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1
docker pull rancher/pause:3.1