rancher部署k8s集群

rancher作为管理k8s集群 容器编排比较好用的一套工具,而且部署简单,还可以管理多k8s集群。也是一个 Docker image,所以其软件本身不需要安装,只需要执行 Docker 命令下载并且成功运行 Docker 服务器镜像即可。

一、操作系统基础配置

1.系统依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git ntpdate


2.调整时区

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

echo 'Asia/Shanghai' >/etc/timezone

ntpdate time2.aliyun.com


crontab -e

*/5 * * * * ntpdate time2.aliyun.com


vi /etc/rc.local

ntpdate time2.aliyun.com



二、k8s各节点主机环境准备

(docker\k8s\主机名)(在每台节点上配置)

1.修改主机名

hostnamectl  set-hostname wind-k8s-master01


2.hosts文件

cat >> /etc/hosts <<EOF

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

10.99.31.201                wind-k8s-master01

EOF


3.配置ssl连接(这步可要可不要)

可以很方便的后面各主机之间的文件传输和共享等。

使用ssh-keygen生成私钥和公钥,配置master1到node无密码登陆,配置master1到master2、master3无密码登陆

ssh-keygen -t rsa

一路回车安装


将秘钥分享到其他节点主机

ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.99.31.202

需要输入yes之后,输入密码,输入master2物理机密码即可


4.设置防火墙为iptables 并设置空规则

systemctl stop firewalld && systemctl disable firewalld

yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save


5.关闭selinux

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config


6.调整系统内核

cat >> /etc/sysctl.conf <<EOF

net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-ip6tables=1

net.ipv4.ip_forward=1

net.ipv4.tcp_tw_recycle=0

vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它

vm.overcommit_memory=1 # 不检查物理内存是否够用

vm.panic_on_oom=0 # 开启 OOM

fs.inotify.max_user_instances=8192

fs.inotify.max_user_watches=1048576

fs.file-max=52706963

fs.nr_open=52706963

net.ipv6.conf.all.disable_ipv6=1

net.netfilter.nf_conntrack_max=2310720

EOF


7.开启ipvs支持

cat > /etc/sysconfig/modules/ipvs.modules <<EOF

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

EOF


8.查看内核参数状态

sysctl -p

有显示上面的内核参数信息才对。


三、docker 安装

1.查看系统支持的docker版本

yum list docker-ce --showduplicates |sort -r

下载docker的yum源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

或者

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


2.安装docker 版本

yum -y install docker-ce && systemctl enable docker && systemctl start docker


3.修改docker加速器

cat > /etc/docker/daemon.json <<EOF

{

"registry-mirrors": ["https://ct8asqlq.mirror.aliyuncs.com"],

"log-driver": "json-file",

"log-opts": {

"max-size": "1G",

"max-file": "3"

},

"exec-opts":["native.cgroupdriver=systemd"]

}

EOF


systemctl daemon-reload && systemctl restart docker && docker info


k8s节点主机环境准备妥当,最好做一个快照


四、rancher安装

1.docker拉取rancher的镜像并映射端口

docker拉取rancher镜像

docker pull rancher/rancher

下载指定版本的rancher镜像

docker pull rancher/rancher:v2.4.5  #一定要带:v 


2.查看当前docker images

[root@wind-k8s-master01 bin]# docker images

REPOSITORY        TAG       IMAGE ID       CREATED        SIZE

rancher/rancher   latest    ec97968cb7d3   28 hours ago   1.12GB


3.然后执行安装

官网方法是 -p 80:80 -p 443:443 即虚拟机80端口映射到容器的80端口,虚拟机443端口映射到容器443端口。但该方法实际使用时发现端口映射无效,提示 404 page not found。

因此安装时将虚拟机的端口换成其他端口来映射,不使用http和https的80和443端口。

docker run -d --privileged --restart=unless-stopped  -v /usr/local/rancher:/usr/local/rancher -p 880:80 -p 8443:443  rancher/rancher /bin/bash



[root@wind-k8s-master01 ~]# docker ps

CONTAINER ID   IMAGE                          COMMAND                  CREATED          STATUS          PORTS                                        NAMES

c49513e5fe87   rancher/rancher-agent:v2.6.2   "run.sh --server htt…"   6 minutes ago    Up 6 minutes                                                 determined_gauss

7cf7cc2e9888   rancher/rancher                "entrypoint.sh /bin/…"   11 minutes ago   Up 10 minutes   0.0.0.0:880->80/tcp, 0.0.0.0:8443->443/tcp   agitated_snyder

#即虚拟机880端口映射到容器的80端口,虚拟机8443端口映射到容器443端口。


参数解析:

always,在容器退出时总是重启容器

unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

privileged参数使用该参数,container内的root拥有真正的root权限。

否则,container内的root只是外部的一个普通用户权限。

-v /usr/local/rancher:/usr/local/rancher 容器目录,如果不指定,删除容器在启动的话,rancher之前的配置都会失效。


4.rancher完成安装,访问

https://10.99.31.201:8443

rancher部署k8s集群_rancher install

rancher初始配置

1.镜像仓库地址修改

默认rancher从国外镜像库拉取镜像,速度非常慢,需要改成阿里云那边的地址。

在rancher ui界面的settings的system-default-registry进行设置rancher默认的仓库地址


镜像地址是

registry.cn-hangzhou.aliyuncs.com


docker话外题

常用命令

重启容器

docker restart 容器号

关闭容器

docker stop 容器号


删除container(运行的容器号)

docker rm 先删除[container] 容器


删除容器镜像

docker rmi 后删除[images] 镜像


五、创建集群

这个过程暂且不表,在添加的时候要注意在主机角色那里 ​etcd​​Control​​Worker​ 都需要勾选上,再点击 启动 ,否则集群不会加载etcd、control;会导致启动不起来

rancher部署k8s集群_rancher install_02rancher部署k8s集群_rancher install_03

配置下游管理

1.下载集群kube-config文件

在rancher上,进入新建的k8s集群,下载kubernetes-config.yaml文件

rancher部署k8s集群_rancher install_04


2.配置kubernetes的yum库

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF



3.安装kubectl

yum -y install kubectl


4.master节点创建目录

mkdir  ~/.kube/


vim ~/.kube/config

此时将下载的kube-config.yaml的内容复制到 ~/.kube/config中

rancher部署k8s集群_rancher install_05

完成下游管理配置


六、rancher问题集

1.节点主机没有添加进来

大部分由于token没有运行,所以没有加到集群中去。

到集群里复制 token运行即可。


2.k8s集群添加失败,etcd报错

rancher部署k8s集群_rancher install_06

[etcd] Failed to bring up Etcd Plane: etcd cluster is unhealthy: hosts [10.99.31.202,10.99.31.201] failed to report healthy. Check etcd container logs on each host for more information

主要原因之前的集群配置没有清除,导致配置文件不同步之类的原因,在github找到的解决方案如下。我最后一个命令没有运行成功,但是再重装集群就成功了。下面的命令在集群的master上执行就行(或者是在安装rancher的机器上执行)


解决方案:

docker stop $(docker ps -aq)

docker system prune -f

docker volume rm $(docker volume ls -q)

docker image rm $(docker image ls -q)


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/rancher/rke/log /var/log/containers /var/log/pods /var/run/calico


3.一直在拉取k8s镜像

一直卡在Pre-pulling kubernetes images这里(我自己尝试了6-7次),这一步大概就是拉取k8s镜像,因为kubernetes镜像是托管在gcr.io下,国内正常网络直接拉,估计也没几个能成功的吧,rancher考虑到这个问题,在阿里云镜像仓库中同步了一份原版的镜像,

把镜像地址修改成国内的  registry.cn-hangzhou.aliyuncs.com

rancher部署k8s集群_rancher install_07

于是,镜像很快都被拉取到,集群也很快处于了active 状态


4.镜像加速器故障 

Pre-pulling kubernetes images:

rancher部署k8s集群_rancher install_08

 

发现集群一直在准备中,没有就绪,处在“Pre-pulling kubernetes images”的过程中没有进展,可能是网络原因无法pull 相关镜像,在daemon 中增加一个阿里的加速镜像链接。

获取阿里mirror 的方法,登录进官网https://cr.console.aliyun.com/#/accelerator,在加速镜像中copy 自己的链接http://xxxxxxxx.m.daocloud.io​

修改完registry-mirrors之后,重启docker 

1. root@vm64:/etc/docker# cat daemon.json 
2. {
3.
4. "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
5. }
6. systemctl daemon-reload
7. systemctl restart docker


两个节点都重启之后,刷新rancher 界面会发现,集群页面的部署进展一直在滚动,表明刚刚的修改生效。

 

rancher部署k8s集群_rancher install_09

 


1. ##https://www.maxbon.cn/2019/10/28/149.html引用网友的解决方法集合:
2. docker rm -f $(sudo docker ps -aq);
3. docker volume rm $(sudo docker volume ls -q);
4. rm -rf /etc/cni \
5. /etc/kubernetes \
6. /opt/cni \
7. /opt/rke \
8. /run/secrets/kubernetes.io \
9. /run/calico \
10. /run/flannel \
11. /var/lib/calico \
12. /var/lib/etcd \
13. /var/lib/cni \
14. /var/lib/kubelet \
15. /var/lib/rancher/rke/log \
16. /var/log/containers \
17. /var/log/pods \
18. /var/run/calico
19. for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done
20. rm -f /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
21. sudo systemctl restart containerd
22. sudo systemctl restart docker