容器平台Rancher+Nginx+K8S集群的高可用部署

时间:2024-04-14 13:56:18

前言:

Rancher是一个开源的企业级容器管理平台。通过Rancher,不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。

本架构中使用rancher管理服务器中使用helm核心组件来部署的k8s集群,并加入nginx来做集群之间的负载均衡,达到高可用。

主体服务分布如下:
容器平台Rancher+Nginx+K8S集群的高可用部署

一、前期准备:

1、我使用的是三台服务器节点

主体架构如下:
容器平台Rancher+Nginx+K8S集群的高可用部署

2、软件及相关版本:

(注意:软件版本可以有出入,但helm和tiller的版本必须必须一致,不然rancher集群后续会一直报错,只能重新安装):

rancher-2.3.3

kubernetes-1.13.5

rke-v0.2.2

kubectl-v1.13.5

helm-v2.13.1

tiller-v2.13.1

(注意注意:如无特殊标注,以下所有安装及处理环境步骤均在三台主机都执行)

二、基础环境准备:

1、初始化环境:(先三关)

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

关闭selinux:

grep SELINUX /etc/selinux/config SELINUX=disabled

setenforce 0

关闭swap分区:

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

2、修改主机名、绑定host:

hostnamectl set-hostname rancher-01

hostnamectl set-hostname rancher-02

hostnamectl set-hostname rancher-03

cat > /etc/hosts << EOF

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

10.66.1.18 rancher-01

10.66.1.21 rancher-02

10.66.1.11 rancher-03

EOF

3、内核参数修改:

echo -e “root soft nofile 65535\nroot hard nofile 65535\n* soft nofile 65535\n* hard nofile 65535\n” >> /etc/security/limits.conf

sed -i ‘s#4096#65535#g’ /etc/security/limits.d/20-nproc.conf

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

net.ipv4.ip_forward=1

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

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

vm.swappiness=0

vm.max_map_count=655360

EOF

4、安装基础软件:

yum -y install wget ntpdate lrzsz curl yum-utils device-mapper-persistent-data lvm2 bash-completion && ntpdate -u cn.pool.ntp.org

5、创建用户并加入相关组:(此步用户操作很重要)

groupadd docker

useradd rancher -G docker

echo “123456” | passwd --stdin rancher

6、免密处理:(只在rancher-01执行即可,通过授权rancher-01主机对三台主机的免密码登陆,为后边安装k8s集群做好准备)

su - rancher

ssh-******

ssh-copy-id [email protected]

ssh-copy-id [email protected]

ssh-copy-id [email protected]

三、总体部署:

1、部署docker环境:

需要在三台主机上都部署docker环境。

并且rke工具目前只支持docker v17.03.2,请务必保持版本一致,否则后续安装会有报错。

安装repo源:

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

下载安装docker:

yum -y install --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos

启动docker:

systemctl enable docker

systemctl start docker

systemctl status docker

添加docker加速代理:

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

{

“registry-mirrors” :
[

“http://docker.mirrors.ustc.edu.cn”,

“http://hub-mirror.c.163.com”,

“registry.docker-cn.com”

]

}

EOF

重启docker:

systemctl daemon-reload

systemctl restart docker

2、部署nginx:

下载安装:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum install nginx -y

systemctl enable nginx.service

修改nginx的配置文件:
容器平台Rancher+Nginx+K8S集群的高可用部署
重启服务:
systemctl restart nginx.service

3、rancher集群部署:(以下操作只在rancher-01节点执行即可)

安装rke:

wget https://docs.rancher.cn/download/rke/v1.1.3-rke_linux-amd64

mv v1.1.3-rke_linux-amd64 rke_linux-amd64

chmod +x rke_linux-amd64

mv rke_linux-amd64 /usr/bin/rke

安装kubectl:

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

chmod +x kubectl

mv kubectl /usr/bin/kubectl

安装helm:

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz

tar zxf helm-v2.13.1-linux-amd64.tar.gz

mv linux-amd64/helm /usr/bin/helm

mv linux-amd64/tiller /usr/bin/tiller

4、k8s集群部署:

su - rancher

编辑配置文件安装:

cat > rancher-cluster.yml << EOF

nodes:

  • address: 10.66.1.18

    user: rancher

    role: [controlplane,worker,etcd]

  • address: 10.66.1.21

    user: rancher

    role: [controlplane,worker,etcd]

  • address: 10.66.1.11

    user: rancher

    role: [controlplane,worker,etcd]

services:

etcd:

snapshot: true

creation: 6h

retention: 24h

EOF

启动集群:(如果此处报错,多半是权限问题,可以切换回root用户执行,或者给yml文件加权限)

rke up --config ./rancher-cluster.yml

过程比较慢,大概在20分钟左右,完成后,应显示:Finished building Kubernetes cluster successfully。 并且已经创建了一个文件kube_config_rancher-cluster.yml。这个文件包含kubectl和helm访问k8s集群的凭据,不要进行任何修改。

5、配置环境变量:

su - root

vi /etc/profile

export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml && source /etc/profile

四、部署tiller和helm环境:

这个时候可以通过kubectl测试连接情况,并查看所有节点是否处于Ready状态:

先搞一下kubectl的命令补全,方便:

echo “source <(kubectl completion bash)” >> ~/.bashrc

source ~/.bashrc

容器平台Rancher+Nginx+K8S集群的高可用部署

创建tiller的pod:

kubectl -n kube-system create serviceaccount tiller

创建ClusterRoleBinding以授予tiller帐户对集群的访问权限:

kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

安装Helm Server(Tiller):

helm init --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.13.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

helm init --service-account tiller --canary-image

(镜像站点可能也需要改一下:kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.13.1)

这时查看一下集群的pod运行情况:(rancher、redis的是我后续添加的,现在查看的话没有这两个的pod正常,不要担心)

容器平台Rancher+Nginx+K8S集群的高可用部署

再总体查看一下helm和tiller安装情况:(需要版本一致!不然会一直报错!)

容器平台Rancher+Nginx+K8S集群的高可用部署

(注意:kube_config_rancher-cluster.yml和rancher-cluster.yml文件暂时不要动,以后将需要这些文件来管理和升级rancher实例)

五、rancher相关安装:

1、添加rancher仓库:

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

容器平台Rancher+Nginx+K8S集群的高可用部署

2、使用SSL证书通过rancher:(此一大步参照官方文档所做)

rancher server默认使用ssl/tls证书来保证安全性,如果没有自签名ssl证书,可以使用官方一键生成ssl证书的脚本;一键生成ssl自签名证书脚本将自动生成tls.crt、tls.key、cacerts.pem三个文件,文件名称绝对不能修改。如果使用自己的自签名ssl证书,则需要将服务证书和CA中间证书链合并到tls.crt文件中,将私钥复制到或者重命名为tls.key文件,将CA证书复制到或者重命名为cacerts.pem。

具体方法详见官方生成ssl证书文档:https://rancher2.docs.rancher.cn/docs/installation/options/self-signed-ssl/_index/

再将脚本拷贝到本地,脚本加上可执行权限:

chmod +x create_self-signed-cert.sh

./create_self-signed-cert.sh --ssl-domain=rancher.test.io --ssl-trusted-ip=10.66.1.18,10.66.1.21,10.66.1.11

创建命名空间、私钥密文、ca证书密文、两个secret:
kubectl create namespace cattle-system
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem

查看secret创建情况:

容器平台Rancher+Nginx+K8S集群的高可用部署

3、rancher server安装:

helm install rancher-stable/rancher \

–name rancher \

–namespace cattle-system \

–set hostname=<自定义域名> \

–set ingress.tls.source=secret \

–set privateCA=true

安装成功后,在本机绑定好hosts文件,就可以访问rancher界面了:

容器平台Rancher+Nginx+K8S集群的高可用部署