Rancher 统一管理多样化 Kubernetes 集群的实践
Rancher 是管理多集群非常理想的中控平台,建议统一接入,逐步替代原有混乱的集群管理方式;生产环境建议使用 RKE + Helm 高可用部署方式,确保系统稳定性;升级前务必做好用户和 token 的备份,防止兼容性问题带来访问故障;对于 containerd 运行时的集群,镜像拉取、tag 等操作需特别注意 namespace 和 image name 的匹配;建议建立统一的 kubeconf
一、背景
随着公司业务的快速发展,线上环境中的 Kubernetes 集群数量迅速增长,形成了 多 IDC、多运行时、多版本 并存的格局。例如:
-
不同业务线在不同 IDC(如 beijing、shanghai)分别部署集群;
-
有些集群基于 Docker ,部分新集群则基于 containerd;
-
存在多个 K8s 版本(如 1.24、1.26、1.28)共存,升级策略不统一;
-
管理方式各异,部分集群由运维管理,部分由业务自管,运维复杂度高、权限分散、安全风险不可控。
在这种背景下,亟需一个平台来统一管理这些多样化的 Kubernetes 集群,实现集群生命周期管理、权限集中控制、统一监控审计等目标。当前公司选择 Rancher 作为集群管理平台,它支持多集群接入、UI 友好、权限模型灵活、与 Prometheus、Grafana、Logging 等生态工具天然集成,是多集群环境下非常成熟的方案。
二、Rancher部署方式
1、单机部署(Docker测试)
-
优点:部署简单、快速上手
-
缺点:单点风险,不适用于生产环境
1.1注意事项:
-
国内安装镜像仓库可使用:registry.cn-hangzhou.aliyuncs.com
-
Docker run 启动 rancher时,映射数据目录导致会导致rancher/mirrored-pause镜像无法拉取,参考:
Docker run 启动 rancher,由于映射数据目录导致 rancher/mirrored-pause 无法拉取 - Rancher 2.x - Rancher 中文论坛
1.2操作步骤
[root@rancher001v ~]# mkdir -p /data/rancher/k3s/agent/images/
#手动从镜像中获取 /var/lib/rancher/k3s/agent/images/k3s-airgap-images.tar,并传到对应目录下
[root@rancher001v ~]# docker run --rm --entrypoint "" -v $(pwd):/output registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.8.5 cp /var/lib/rancher/k3s/agent/images/k3s-airgap-images.tar /output/k3s-airgap-images.tar
[root@rancher001v ~]# ls
k3s-airgap-images.tar
#不解压查看文件内容
[root@rancher001v ~]# tar -O -xf ./k3s-airgap-images.tar manifest.json | jq
[root@rancher001v ~]# tar -O -xf ./k3s-airgap-images.tar repositories | jq
[root@rancher001v ~]# cp k3s-airgap-images.tar /data/rancher/k3s/agent/images/
#启动配置:使用阿里云镜像
[root@rancher001v ~]# docker run -d --restart=unless-stopped --privileged \
-p 80:80 -p 443:443 \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=registry.cn-hangzhou.aliyuncs.com \
-e CATTLE_BOOTSTRAP_PASSWORD=rancher \
-v /data/rancher:/var/lib/rancher \
--name rancher \
registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.8.5
#进入容器
[root@rancher001v ~]# docker exec -it rancher sh
#查看k3s启动情况
sh-4.4# kubectl get nodes
sh-4.4# kubectl get pods -A
sh-4.4# kubectl get pod -A -o json | grep -w '"image":' | sort | uniq
#查看ctr 镜像
sh-4.4# ctr images ls
2、高可用local集群部署
2.1 RKE 部署local集群(生产环境)
RKE(Rancher Kubernetes Engine) 是 Rancher 官方的 K8s 安装器。
注意事项:
1、RKE版本与Rancher版本有相关依赖,需要提前规划好以下版本:
-
rke二进制版本
-
Rancher版本
-
k8s版本
2、可规划好私有仓库地址,配置cluster.yml时使用
#同时设置 system_images 和 private_registries ,会优先使用 system_images 下的镜像去拉取。
#如果使用private_registries就将system_images及下面列的镜像都删掉
private_registries:
- is_default: true
url: mirror.k8s.qihoo.net/docker
步骤如下:
-
准备三台节点作为 Rancher 的控制面和 etcd 节点,规划好主机名/IP
-
安装 RKE 二进制
-
准备
cluster.yml
,定义节点角色 -
使用
rke up
部署高可用集群 -
通过 Helm 安装 Rancher:
2.2 K3s 部署轻量化local集群
-
集群更轻量
#国内安装步骤
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn \
K3S_TOKEN=12345 sh -s - \
--system-default-registry=registry.cn-hangzhou.aliyuncs.com
2.3 Rancher部署
①安装helm
#helm与k8s版本兼容匹配:https://helm.sh/zh/docs/topics/version_skew/
wget https://get.helm.sh/helm-v3.15.3-linux-amd64.tar.gz
tar zxvf helm-v3.15.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
helm version
②部署cert-manager、配置rancher
-
cert-manager部署
#安装certcert-manager #安装CRD kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<VERSION>/cert-manager.crds.yaml #使用helm安装 helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace
-
配置rancher
#参考helm安装rancher
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
kubectl create namespace cattle-system
#切换到cattle-system下操作,因为rancher包里有些yaml没有写namespace
#搜索rancher helm版本
helm search repo rancher-latest -l
#下载查看
helm pull rancher-latest/rancher --version 2.10.0
#编辑相关内容rancher
helm install rancher rancher-latest/rancher --version 2.10.0 \
--namespace cattle-system \
--set hostname=rancher.test.com \
--set replicas=1 \
--set bootstrapPassword=rancher \
--dry-run=client > rancher-v2.10.0.yaml
-
修改部署文档,如镜像地址、开启debug
#开启debug参考
containers:
- args:
- --http-listen-port=80
- --https-listen-port=443
- --debug=true
- --add-local=true
③ingress配置
[root@rancher002v ~]$k get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
rancher nginx rancher.test.com 11.123.251.199,11.123.255.17 80, 443 49m
#ingress命名为:rancher.test.com
curl -k -H "Host: rancher.test.com" https://11.123.251.199:30443
三、部署及升级过程注意事项
-
私有镜像仓库配置
-
Rancher版本对local集群版本的要求:
1、二进制rke版本:不同rke支持的k8s版本不同 2、Rancher版本依赖k8s的版本 注意查看github上的release 说明 #Install/Upgrade Notes https://github.com/rancher/rancher/releases/tag/v2.10.0
-
Rancher升级清理了orphaned 的 clusterUserAttributes 可能导致原kubeconfig失效:可通过 Rancher UI 重新生成 kubeconfig
-
Rancher导入已有集群镜像问题
#注意:要在 k8s.io namespace 下操作,并确保 tag 正确命中 Deployment 中定义的 image 字段 ctr -n k8s.io images pull mirror.k8s.qihoo.net/docker/rancher/rancher-agent:v2.10.0 ctr -n k8s.io images tag mirror.k8s.qihoo.net/docker/rancher/rancher-agent:v2.10.0 docker.io/rancher/rancher-agent:v2.8.5
四、总结与建议
-
Rancher 是管理多集群非常理想的中控平台,建议统一接入,逐步替代原有混乱的集群管理方式;
-
生产环境建议使用 RKE + Helm 高可用部署方式,确保系统稳定性;
-
升级前务必做好用户和 token 的备份,防止兼容性问题带来访问故障;
-
对于 containerd 运行时的集群,镜像拉取、tag 等操作需特别注意 namespace 和 image name 的匹配;
-
建议建立统一的 kubeconfig 生成策略,不推荐用户手动创建 SA 绑定 Role 的方式连接集群。
360智汇云官网:https://zyun.360.cn
更多推荐
所有评论(0)