千家信息网

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

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,Rancher官方中文文档:https://www.rancher.cn/docs/rancher/v2.x/cn/overview/本次实验,为Ranche七层负载均衡Helm HA部署一、环境准备
千家信息网最后更新 2024年11月25日Rancher(1),Rancher 2.x 生产环境HA(高可用)部署K8S

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

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

一、环境准备

1、服务器配置

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

主机名称系统版本内网ip公网ip配 置
master1CentOS 7.6172.27.100.101xxx4C 16G
master2CentOS 7.6172.27.100.101xxx4C 16G
master3CentOS 7.6172.27.100.101xxx4C 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-bakcat << '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.comfailovermethod=prioritybaseurl=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=1gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#released updates[updates]name=CentOS-$releasever - Updates - mirrors.aliyun.comfailovermethod=prioritybaseurl=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=1gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that may be useful[extras]name=CentOS-$releasever - Extras - mirrors.aliyun.comfailovermethod=prioritybaseurl=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=1gpgkey=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.comfailovermethod=prioritybaseurl=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=1enabled=0gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#contrib - packages by Centos Users[contrib]name=CentOS-$releasever - Contrib - mirrors.aliyun.comfailovermethod=prioritybaseurl=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=1enabled=0gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7EOF

(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-CEsudo 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/configexport 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.ymlnodes:  - 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: master3services:  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.ymlcp 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 tillerkubectl --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.ymlhelm_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.ymlhelm --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.ymlkubectl --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.ymlkubectl --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.ymlkubectl --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

0