一、背景

随着公司业务的快速发展,线上环境中的 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

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

步骤如下:

  1. 准备三台节点作为 Rancher 的控制面和 etcd 节点,规划好主机名/IP

  2. 安装 RKE 二进制

  3. 准备 cluster.yml,定义节点角色

  4. 使用 rke up 部署高可用集群

  5. 通过 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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐