Rancher(1),Rancher 2.x 生产环境HA(高可用)部署K8S
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-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