> 文章列表 > 如何通过开源项目搭建私有云平台--第四步上:安装rancher,搭建K8s集群

如何通过开源项目搭建私有云平台--第四步上:安装rancher,搭建K8s集群

如何通过开源项目搭建私有云平台--第四步上:安装rancher,搭建K8s集群

第四步上:安装rancher,搭建K8s集群

第四步比较复杂,因此准备分上中下三篇文章来介绍,本次采用rancher来部署K8s集群,选择rancher如下:

1)部署K8s简单,有一个不是那么复杂的管理界面

2)rancher自带了,监控,存储,告警应用,可以直接在管理界面部署,不用额外找方案

具体部署环境如下

服务器IP 用途 环境说明
10.10.10.5  部署rancher centos 8 安装docker
10.10.10.6  k8s-master1 ,etcd centos 8 安装docker
10.10.10.7 k8s-master2 ,etcd centos 8 安装docker
10.10.10.8 k8s-master3,etcd centos 8 安装docker
10.10.10.9 k8s-node1,worker centos 8 安装docker
10.10.10.10 k8s-node2,worker centos 8 安装docker

1、部署rancher,选用rancher2.7.1

在10.10.10.5  运行如下命令

docker run -itd -p 80:80 -p 443:443  -v /opt/rancher:/var/lib/rancher  --restart=unless-stopped  --privileged=true --name rancher  -e CATTLE_AGENT_IMAGE="registry.cn-hangzhou.aliyuncs.com/rancher/rancher-agent:v2.7.1"   registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.7.1

通过docker log,发现rancher无法启动,可以尝试运行如下命令,具体这两个命令有什么用,我也不清楚,我是在rancehr github上面看到帖子,每次我重启rancher后都会无法正常启动,都是通过运行这两条命令后,就正常了

modprobe ip_tables

echo 'ip_tables' >> /etc/modules

如果一切正常,在浏览器访问 https://10.10.10.5 ,按照提示,用docker log找到密码,登录rancher

2、在10.10.10.6 k8s-master1作如下准备工作

1)、 安装docker,编辑配置文件,加入镜像仓库地址,然后重启docker,

   vim  /etc/docker/daemon.json,输入如下内容

   {

         "insecure-registries":["10.10.10.3:3443"],     #10.10.10.3是harbor安装地址,可以参考步骤3

         "data-root":"/home/software/docker"   #修改docker文件存放路径

    }

systemctl daemon-reload && systemctl enable docker && systemctl enable containerd && systemctl restart docker

2)、 按顺序输入如下命令:

#设置机器hostname

hostnamectl set-hostname master-1  #根据用途设置主机名

    

#关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

#关闭selinux(linux的安全机制)

sed -i 's/enforcing/disabled/' /etc/selinux/config

setenforce 0

getenforce    #关闭后确认,输出Permissive表示已经关闭

#关闭swap(关闭内存交换)

swapoff -a

sed -ri 's/.*swap.*/#&/' '/etc/fstab'

free -m  # 检查,确保swap里面显示是0

#安装IPVS模块,允许 iptables 桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.ipv4.ip_forward=1

net.ipv6.conf.all.forwarding=1

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

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

EOF

sysctl --system  #是上述配置生效

#启动时间同步

systemctl start chronyd

systemctl enable chronyd

date

#重启服务器,然后输入如下命令验证

lsmod | grep br_netfilter

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

最终结果如下图:

3、在rancher新建k8s集群,具体步骤如下

1)、选择rke1集群,曾经试过选择rke2,但从来没有成功部署过,但如果不通过rancher 部署,通过下载rke2离线安装包,就能成功部署,估计是拉不到镜像造成的,不过rke2不用docker,不太习惯,最终还是选择了rke1

2),录入k8s集群配置,这里要注意如下几个配置     

 具体关于minio可以参考如何通过开源项目搭建私有云平台--第一步:安装Minio_一个平凡的农民工的博客-CSDN博客

3、如果上述配置完成就会生成安装命令,根据需要选择节点角色,然后复制命令到10.10.10.6 运行具体如下图: 

4、修改网络配置,第一个master安装成功后,k8s集群已经成功部署了,不要那么快安装其他节点,先把网络配置修改,让集群支持IPVS和BGP,具体做法如下

1)在进群管理,编辑某个集群yaml文件,找到如下配置

把kube-proxy配置,改成如下,具体如下图:

 kubeproxy:
      extra_args:
        proxy-mode: ipvs
      extra_binds:
        - '/lib/modules:/lib/modules:ro'

2) 在master1节点,重启docker restart kube-proxy,安装 yum install ipvsadm  -y,运行如下命令验证 ip add|grep ipvs 和 ipvsadm -Ln,具体如下图

 

 

3)找到calico deamonset,修改calico配置,支持BGP,具体如下图:

  点击“编辑配置”,进入编辑界面,将环境变量CALICO_IPV4POOL_IPIP 设置Off,添加新环境变量FELIX_IPINIPENABLED为 false,具体如下图: 

 

4)、重启master1机器,这里就是为什么部署第一节点后,不要那么快部署其他节点,如果不预先配置好网络,等整个集群部署完了,需要每台机器都要重启,现在只需要重启1次,后面新加入的机器自动就会支持BGP,重启完后,在master1机器上进行验证

修改之前如下图:

修改之后并重启后如下图:

5)、由于网络配置发生了变化,要去rancher安装的服务器上,重启rancher容器,如果不重启,可能会造成rancher无法远程接入容器,如果重启后rancher无法正常启动,运行安装时提到的两条命令

5、重复第2步,修改剩余的机器的配置,并从rancher复制安装命令到每个机器上运行,搭建整个K8s集群

6、验证备份,进入具体某个K8s集群,尝试生成快照,会显示在S3保存快照,打开Minio对应的桶,能看到备份文件,具体如下图:

 

7、为了后续方便管理,随便找一台master节点,安装kubectl,具体步骤如下:

1)下载kubectl

curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl

2)下载后,运行如下命令进行部署

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

3)从rancher进入某个集群,点击右上角按钮,下载k8s集群配置文件 ,具体如下图:

注意下载后要把集群配置文件里面,将涉及rancher地址的环境删除掉,只保留master地址,具体做法如下:

在配置文件找到rancher安装的IP地址,然后把整块-name删除掉 

确保最后一行current-context:  后面不是被删除的名字,可以换成contexts:下面的与rancher不相关的其他名字

 这一步比较重要,因为默认K8s集群是通过rancher来转发请求的,如果rancher所在的服务器down了,kubectl就无法发出命令了,要直接改成master相关的上下文。

4)在服务器建立目录/root/.kube/config,将从rancher下载的配置文件上传到该目录

5)进入root目录,vim .bash_profile(前面有一个点),添加如下行
export KUBECONFIG=/root/.kube/config/<rancher下载配置文件名>.yaml

6) 运行 source .bash_profile 使配置生效,运行kubectl get pod -A验证是否能显示所有pod