一、现状分析
在当今的云计算和容器化领域,Kubernetes(K8S)已经成为了容器编排和管理的事实标准。根据 Gartner 的数据,超过 70% 的企业在生产环境中使用 K8S 来管理容器化应用。然而,K8S 的安装和管理对于许多企业来说仍然是一个挑战,尤其是在需要部署多套不同版本 K8S 集群的场景下。
K3S 作为一个轻量级的 K8S 发行版,以其快速部署、资源占用少等特点,受到了越来越多企业的青睐。而 Rancher 则提供了一个统一的管理平台,可以方便地在不同的基础设施上部署和管理 K8S 集群。通过结合 K3S 和 Rancher,我们可以实现高效、灵活的多套 K8S 集群部署。
(我们生产的业务也是这样部署的)
二、核心原理
K3S 原理
K3S 是一个经过简化的 K8S 发行版,它去除了一些不必要的组件,如 cloud provider 等,同时采用了 SQLite 作为默认的 etcd 替代方案,从而大大减少了资源占用。K3S 的架构主要包括 Server 和 Agent 两部分,Server 负责管理集群的状态和调度,Agent 则负责运行容器化应用。
Rancher 原理
Rancher 是一个开源的容器管理平台,它通过提供一个统一的用户界面和 API,允许用户在不同的基础设施上部署、管理和监控 K8S 集群。Rancher 采用了多租户架构,可以为不同的用户和团队提供独立的管理空间。
架构原理
我们的架构采用 K3S 作为底层的 K8S 发行版,通过 Rancher 来管理多套 K8S 集群。物理节点作为 Agent 加入到 K8S 集群中,Rancher 则可以在这些集群上部署K8S集群和节点
+---------------------+
| K8S节点 |
+---------------------+ | |
+---------------------+
| Rancher |
| (管理多套 K8S) |
+---------------------+ | |
+---------------------+
| K3S |
+---------------------+
三、环境准备
硬件环境
- 至少 3 台物理节点,每台节点需要满足以下配置:
- CPU:2 核以上
- 内存:4GB 以上
- 硬盘:20GB 以上
软件环境
- 操作系统:Ubuntu 18.04 或以上版本
- Docker:安装最新稳定版本
- 网络:节点之间需要能够互相通信
安装 Docker
# 更新系统包
sudo apt update
# 安装必要的依赖
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 软件源
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新系统包
sudo apt update
# 安装 Docker
sudo apt install docker-ce docker-ce-cli containerd.io -y
# 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
四、分步实现
1 安装 K3S
在一台虚拟机安装 K3S Server:
curl -sfL https://get.k3s.io | sh -
在其他物理节点上安装 K3S Agent,并加入到 K3S Server:
# 获取 K3S Server 的 token
sudo cat /var/lib/rancher/k3s/server/node-token
# 在 Agent 节点上安装 K3S Agent
curl -sfL https://get.k3s.io | K3S_URL=https://<server_ip>:6443 K3S_TOKEN=<token> sh -
2 安装 Rancher
在 K3S 集群上安装 Rancher:
# 创建命名空间
kubectl create namespace cattle-system
# 安装 Cert-Manager
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.crds.yaml
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
# 安装 Rancher
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm install rancher rancher-stable/rancher \ --namespace cattle-system \ --set hostname=rancher.yourdomain.com \ --set ingress.tls.source=letsEncrypt \ --set letsEncrypt.email=your_email@example.com
3 通过 Rancher 部署多套 K8S 集群
3.1 硬件资源
-
、基础硬件配置规范
- 控制平面节点(Master)
- CPU:4核(推荐 Intel Xeon Silver 4210 或同级)
- 内存:16GB DDR4 ECC(支持内存纠错)
- 存储:2×480GB SSD RAID1(系统盘)+ 2×1TB NVMe SSD RAID0(数据盘)2
- 网络:双万兆网卡(建议 Mellanox ConnectX-5)
- master也可以使用虚拟机 配置低点也可以
- Worker 节点(物理机)
- CPU:16核(推荐 AMD EPYC 7302P 或同级,支持 NUMA 架构)
- 内存:64GB DDR4(根据业务负载可扩展至 256GB)
- 存储:
- 系统盘:2×480GB SSD RAID1
- 数据盘:
- 场景1(常规应用):4×3.84TB SATA SSD RAID10(IOPS 50万+)
- 场景2(AI/大数据):4×7.68TB NVMe SSD RAID0(顺序读写 6GB/s+)1
- 网络:25Gbps 双端口网卡(支持 RDMA 加速)
- work 节点配置一定要高点 (这里配提供GPU显卡,可以单独选配)
3.2软件系统
- 操作系统:所有节点需安装相同的 Linux 发行版,推荐使用 CentOS 7.x 或 Ubuntu 18.04 及以上版本。安装时确保系统是最新状态,可通过执行系统更新命令更新软件包。
3.3 访问控制台
通过 https://rancher.yourdomain.com
访问,首次登录需执行:
3.3.1 自定义集群配置 (这里比较重要的是K8S的模版,涉及一些重点参数)
cluster:name: prod-cluster kubernetesVersion: v1.24.9 network:plugin: calico cloudProvider:name: external
nodes:- address: 192.168.1.101 role: [controlplane,etcd,worker]- address: 192.168.1.102 role: [worker]
3.3.2 通过页面添加自定义集群 (WEB来配置 )实际也是用于生成自定义集群配置 YML文件的
通过UI导入YAML或使用Rancher CLI创建5
3.4 节点注册流程
- 在Rancher UI选择添加集群 → 自定义
- 复制生成的注册命令:
# Control Plane节点执行
docker run -d --privileged --restart=unless-stopped \--net=host -v /etc/kubernetes:/etc/kubernetes \-v /var/run:/var/run rancher/rancher-agent:v2.7.0 \--server https://rancher.yourdomain.com \--token <YOUR_TOKEN> \--etcd --controlplane --worker
五、故障排查
5.1 常见问题处理
现象 | 解决方案 |
---|---|
节点注册超时 | 检查防火墙规则和端口开放情况2 |
证书错误 | 更新cert-manager至最新版1 |
镜像拉取失败 | 配置国内镜像加速源4 |
资源不足 | 调整kubelet参数--kube-reserved 5 |
5.2 诊断命令集
# 检查集群状态
kubectl get nodes -o wide
# 查看组件日志
journalctl -u kubelet -f
# 网络连通性测试
kubectl run -it --rm test --image=alpine ping <pod-ip>
六、延伸实践
- 混合云管理:通过Rancher Fleet同步管理多个集群5
- 安全加固:集成OPA/Gatekeeper策略引擎
- CI/CD流水线:结合Jenkins实现自动部署
- 监控告警:部署Prometheus-Operator监控栈
完整部署示例代码库:rancher-examples
生产检查清单:Rancher Hardening Guide高可用安装指南 | Rancher文档