Rancher 2.x 生产环境HA(高可用)部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rancher 2.x 生产环境HA(高可用)部署相关的知识,希望对你有一定的参考价值。

Rancher官方中文文档:https://www.rancher.cn/docs/rancher/v2.x/cn/overview/

技术图片

本次实验,为Ranche七层负载均衡Helm HA部署

一、环境准备

1、服务器配置

服务器使用腾讯云的虚拟机具体配置如下:

主机名称 系统版本 内网ip 公网ip 配 置
master1 CentOS 7.6 172.27.100.101 xxx 4C 16G
master2 CentOS 7.6 172.27.100.101 xxx 4C 16G
master3 CentOS 7.6 172.27.100.101 xxx 4C 16G

因使用7层负载均衡,需要一个LB,这里使用腾讯云的云负载均衡(实验环境可以使用nginx

(1) 配置每台主机的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中。

(2) 关闭selinux:

sudo sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/selinux/config

(3) 测试环境关闭防火墙或者开启相应端口,参考https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/references/

填坑备注:这里我的内网是全部开了的,然而部署的时候有报错,需要开放对应端口让服务器的公网ip可以访问~(居然不走内网ip,不知道是什么情况~)

2、Docker安装及配置

正常安装Docker,唯一注意的地方是:因为CentOS的安全限制,通过RKE安装K8S集群时候无法使用root账户。CentOS用户使用非root用户来运docker

(1) 配置安装源

yum install ca-certificates ;
update-ca-trust;

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo-bak
cat << ‘EOF‘ > /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

EOF

(2) 安装Docker

# 定义用户名
NEW_USER=rancher
# 添加用户(可选)
sudo adduser $NEW_USER
# 为新用户设置密码
sudo passwd $NEW_USER
# 为新用户添加sudo权限
sudo echo "$NEW_USER ALL=(ALL) ALL" >> /etc/sudoers
# 卸载旧版本Docker软件
sudo yum remove docker               docker-client               docker-client-latest               docker-common               docker-latest               docker-latest-logrotate               docker-logrotate               docker-selinux               docker-engine-selinux               docker-engine               container*
# 定义安装版本
export docker_version=19.03.1
# step 1: 安装必要的一些系统工具
sudo yum update -y;
sudo yum install -y yum-utils device-mapper-persistent-data     lvm2 bash-completion;
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
# Step 3: 更新并安装 Docker-CE
sudo yum makecache all;
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep $docker_version|awk ‘print $2‘;
sudo yum -y install --setopt=obsoletes=0 docker-ce-$version docker-ce-selinux-$version;
# 如果已经安装高版本Docker,可进行降级安装(可选)
yum downgrade --setopt=obsoletes=0 -y docker-ce-$version docker-ce-selinux-$version;
# 把当前用户加入docker组
sudo usermod -aG docker $NEW_USER;
# 设置开机启动
sudo systemctl enable docker;

(3) 修改Docker配置

daemon.json默认位于/etc/docker/daemon.json,如果没有可手动创建,基于systemd管理的系统都是相同的路径。通过修改daemon.json来改过Docker配置,也是Docker官方推荐的方法。

1、配置私有仓库
Docker默认只信任TLS加密的仓库地址(https),所有非https仓库默认无法登陆也无法拉取镜像。insecure-registries字面意思为不安全的仓库,通过添加这个参数对非https仓库进行授信。可以设置多个insecure-registries地址,以数组形式书写,地址不能添加协议头(http)。

"insecure-registries": ["harbor.xxx.cn:30002"]

2、配置存储驱动
OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay,新版的overlay2(更稳定)。

先决条件:

overlay2: Linux内核版本4.0或更高版本,或使用内核版本3.10.0-514+的RHEL或CentOS。
overlay: 主机Linux内核版本3.18+
支持的磁盘文件系统
ext4(仅限RHEL 7.1)
xfs(RHEL7.2及更高版本),需要启用d_type=true。


"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]

3、配置日志驱动
容器在运行时会产生大量日志文件,很容易占满磁盘空间。通过配置日志驱动来限制文件大小与文件的数量。 >限制单个日志文件为50M,最多产生3个日志文件

"log-driver": "json-file",
"log-opts":
"max-size": "50m",
"max-file": "3"

最终配置文件如下:


"insecure-registries": ["harbor.xxx.cn:30002"]



"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]



"log-driver": "json-file",
"log-opts": 
    "max-size": "50m",
    "max-file": "3"
    

3、安装RKE

Rancher Kubernetes Engine(RKE)是一款轻量级Kubernetes安装程序,支持在裸机和虚拟化服务器上安装Kubernetes。 RKE解决了Kubernettes社区中的一个常见问题,比如:安装复杂性。RKE支持多种平台运行,比如MacOS,linux,windows。
这里在master1上安装rke:

1、下载二进制文件
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/download/rke/

2、运行一下命令测试:

chmod +x rke_linux-amd64
./rke_linux-amd64 --version

4、安装kubectl

kubectl是一个CLI命令行工具,用于运行Kubernetes集群的命令。Rancher 2.x中的许多维护和管理都需要它。
这里在master1上安装kubectl:

1、下载二进制文件
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/download/kubernetes/

2、确保kubectl二进制文件是可执行文件。

chmod +x ./kubectl

3、将kubectl二进制文件移动到PATH路径下。

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

4、配置kubectl
使用RKE创建Kubernetes集群时,RKE会在本地目录中创建一个包含认证信息的配置文件kube_config_rancher-cluster.yml,以使用kubectl或helm等工具连接到新集群。

可以将此文件复制到$HOME/.kube/config


cp kube_config_rancher-cluster.yml ~/.kube/config
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml

4、配置kubectl的shell补全

CentOS Linux上,您可能需要安装默认情况下未安装的bash-completion软件包。

yum install bash-completion -y

运行source <(kubectl completion bash)可将kubectl自动补全添加到当前shell,要使kubectl自动补全命令自动加载:

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

二、安装

1、配置负载均衡器

使用腾讯***云负载均衡,导入域名ssl证书(此处的域名须有后面配置访问域名一致,我使用的是免费一年的ssl证书?(^?^)),把10443端口绑定到master1,master2,master3的80端口即可~
备注:需要开通对应的安全规则,即负载均衡的ip能访问master1、2、3的80端口
技术图片

2、RKE安装K8S

(1) 在master1上创建rke安装文件rancher-cluster.yml

#vim rancher-cluster.yml

nodes:
  - address: xxx.xxx.xxx.xxx
    internal_address: 172.27.100.101
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: master1
  - address: xxx.xxx.xxx.xxx
    internal_address: 172.27.100.102
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: master2
  - address: xxx.xxx.xxx.xxx
    internal_address: 172.27.100.103
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: master3

services:
  etcd:
    backup_config:
        enabled: true
        interval_hours: 6
        retention: 60

备注:
address 公共域名或IP地址
user 可以运行docker命令的用户
role 分配给节点的Kubernetes角色列表
internal_address 内部集群通信的私有域名或IP地址
开启了etcd的备份机制,每隔6小时备份一次,保存60天数据

(2) 创建K8S集群及测试

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

完成后,会创建一个文件kube_config_rancher-cluster.yml。这个文件包含kubectl和helm访问K8S的凭据。可以将此文件复制到$HOME/.kube/config,或者如果您正在使用多个Kubernetes集群,请将KUBECONFIG环境变量设置为kube_config_rancher-cluster.yml文件路径。

备注:保存好kube_config_rancher-cluster.yml和rancher-cluster.yml,之后的维护和升级需要用到!

export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
cp kube_config_rancher-cluster.yml /root/.kube/config/

使用kubectl get nodes测试:

技术图片

3、安装和配置Helm

Helm是Kubernetes首选的包管理工具。Helmcharts为Kubernetes YAML清单文档提供模板语法。使用Helm,可以创建可配置的部署,而不仅仅是使用静态文件。Helm有两个部分:Helm客户端(helm)和Helm服务端(Tiller)。

(1) 配置Helm客户端访问权限

master1上,在上一步生成的kube_config_rancher-cluster.yml文件的同级目录下运行:

kubectl --kubeconfig=kube_configxxx.yml -n kube-system create serviceaccount tiller
kubectl --kubeconfig=kube_configxxx.yml create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

备注:在kube-system命名空间中创建ServiceAccount;创建ClusterRoleBinding以授予tiller帐户对集群的访问权限;helm初始化tiller服务

(2) 安装Helm客户端

1、下载helm:
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/download/helm/

2、解压缩及配置:

tar -zxvf helm-v2.x.x-linux-amd64.tgz
helm在解压后的目录中找到二进制文件,并将其移动到所需的位置
mv linux-amd64/helm /usr/local/bin/helm && chmod +x /usr/local/bin/helm

(3) 安装Helm服务端(Tiller)

master1上,在上一步生成的kube_config_rancher-cluster.yml文件的同级目录下运行:

kubeconfig=xxx.yml

helm_version=`helm version |grep Client | awk -F""\" ‘print $2‘`
helm init --kubeconfig=$kubeconfig --service-account tiller --skip-refresh --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:$helm_version 

备注:
1、RKE默认启用RBAC,所以在安装tiller时需要指定ServiceAccount。
2、helm init在缺省配置下,会去谷歌镜像仓库拉取gcr.io/kubernetes-helm/tiller镜像,在Kubernetes集群上安装配置Tiller;由于在国内可能无法访问gcr.io、storage.googleapis.com等域名,可以通过--tiller-image指定私有镜像仓库镜像。
3、helm init在缺省配置下,会利用https://kubernetes-charts.storage.googleapis.com作为缺省的stable repository地址,并去更新相关索引文件。在国内可能无法访问storage.googleapis.com地址, 可以通过--stable-repo-url指定chart国内加速镜像地址。
4、如果您是离线安装Tiller, 假如没有内部的chart仓库, 可通过添加--skip-refresh参数禁止Tiller更新索引。

4、Helm安装Rancher

(1) 添加Chart仓库地址

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

(2) 配置SSL并安装Rancher Server

SSL证书使用腾讯云提供的一年免费证书,自签名证书参考官网

export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml
helm --kubeconfig=$KUBECONFIG install rancher-stable/rancher     --name rancher --namespace cattle-system     --set hostname=paas.yunjingtech.cn     --set tls=external

安装成功后,输入之前配置的域名即可~

技术图片

备注:
登陆后查看,system空间,若cattle-cluster-agent Pod和cattle-node-agent无法正常运行,需要为其添加主机别名:

export kubeconfig=xxx/xxx/xx.kubeconfig.yml

kubectl --kubeconfig=$kubeconfig -n cattle-system     patch deployments rancher --patch ‘
        "spec": 
            "template": 
                "spec": 
                    "hostAliases": [
                        
                            "hostnames":
                            [
                                "xxx.cnrancher.com"
                            ],
                                "ip": "xxxxxx"
                        
                    ]
                
            
        
    ‘
export kubeconfig=xxx/xxx/xx.kubeconfig.yml

kubectl --kubeconfig=$kubeconfig -n cattle-system patch deployments cattle-cluster-agent --patch ‘
    "spec": 
        "template": 
            "spec": 
                "hostAliases": [
                    
                        "hostnames":
                        [
                            "demo.cnrancher.com"
                        ],
                            "ip": "xxxxxx"
                    
                ]
            
        
    
‘
export kubeconfig=xxx/xxx/xx.kubeconfig.yml

kubectl --kubeconfig=$kubeconfig -n cattle-system patch  daemonsets cattle-node-agent --patch ‘
    "spec": 
        "template": 
            "spec": 
                "hostAliases": [
                    
                        "hostnames":
                        [
                            "xxx.rancher.com"
                        ],
                            "ip": "xxxxxx"
                    
                ]
            
        
    
‘

rancher安装期间遇到的最大问题就是一些地方未配置安全组造成的!好在最后都解决了,之后会继续分享,rancher平台CICD的使用,部署持久性存储Ceph,部署Harbor、Gitlab、Nexus3等过程中遇到的问题及处理办法~~ (^U^)ノ~YO

以上是关于Rancher 2.x 生产环境HA(高可用)部署的主要内容,如果未能解决你的问题,请参考以下文章

Rancher Server部署方式及Rancher HA环境部署

Rancher Server HA的高可用部署实验-学习笔记

如何将Rancher 2.1.x 从单节点安装迁移到高可用安装

rke高可用部署K8S集群及rancher server 高可用

rancher server 单节点部署/K8S高可用部署

Hadoop HA 高可用原理及部署