Rancher+K8S+Docker集群搭建
Ubuntu安装
准备工作:准备VMware+Ubuntu(ubuntu-18.04.5-live-server-amd64.iso)
1.1 虚拟机安装
步骤不做赘述,参照下图步骤即可:
设置虚拟机名称和虚拟机所在磁盘位置
虚拟机内存根据本机实际情况而定,此处设置为4G
采用桥接网络
此处点击自定义硬件
点击完成.
1.2 运行安装的VM
点击运行改虚拟机完成系统安装
后面一直选择DONE
语言选择Engilsh
设置用户名、服务名、密码、在提示回车和重启的时候记得点击下就ok了。
完成后如图:
点击回车输入用户名和密码进入系统
查看虚拟机ip
$ ip addr
查看hosts信息
$ cat /etc/hosts
修改hosts文件,将rancher主机和集群主机的ip互相指定(非必须)
$ vim /etc/hosts
如图:
查看本机名
$ 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
输出如下信息为正常
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)
如图:
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)
设置名称
在Advanced Options处找寻Node Port Range,设置为 1-65535后点击下一步将下面的每个选项都打√,负责下面的指令到参与集群的VM中执行
等待执行完成,自行完成后界面会自己跳转,在管理界面看到下图视为添加完成。
参与集群的节点
等待状态变为正常Active(此等待过程下载内容较多,耐心等待)
K8S获取节点
5.1 建立config
在HOME /.kube的文件夹
eg: $ mkdir -m 777 /home/rancher/.kube
进入该文件夹创建config文件
$ touch config
点击Rancher管理界面仪表盘右边的Kubeconfig File
复制里面的内容
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
输出参与集群的主机节点则搭建完成。
进入集群所在的服务器进行对应服务的部署即可。
常见问题&处理方法
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