Rancher与Kubernetes集群部署实战:从零构建到生产级监控的完整路径
如果你正准备在企业内部或开发环境中搭建一套Kubernetes集群,并且希望有一个直观、强大的管理界面来简化日常运维,那么Rancher很可能已经进入了你的备选清单。作为一个深度使用过多种K8s发行版和管理工具的技术人,我不得不承认,Rancher在降低Kubernetes使用门槛方面做得相当出色。它把复杂的集群部署、应用发布、监控日志等操作,封装成了Web界面上点点鼠标就能完成的事情。但“优雅”地完成一次部署,尤其是在特定网络环境下,远不止运行几条docker run命令那么简单。从虚拟机的基础配置、镜像加速的巧妙设置,到避开那些让新手抓狂的“坑”,每一步都需要细致的规划。这篇文章,我将结合多次在内外网环境部署的经验,为你梳理一条清晰、可复现的路径,目标是让你不仅能成功跑起来,更能理解背后的原理,打造一个稳定、易于维护的容器平台。
1. 基础环境:为集群搭建坚实的地基
在兴奋地敲下第一个Docker命令之前,花些时间把基础环境打磨好,能为后续流程省去无数麻烦。很多人部署失败,问题往往不是出在Rancher或K8s本身,而是底层系统配置没到位。
1.1 虚拟机规划与系统配置
我建议至少准备三台虚拟机来开始你的旅程:一台作为Rancher Server(管理平面),另外两台构成一个最小化的K8s集群(一主一从)。当然,生产环境需要更多节点以保证高可用。这里以四台为例进行规划:
| 主机名 | 推荐角色 | 最小配置 | 关键用途说明 |
|---|---|---|---|
rancher-server | Rancher 管理节点 | 2核CPU, 4GB内存, 50GB磁盘 | 运行Rancher Server容器,提供Web管理界面 |
k8s-master-01 | Kubernetes Master 节点 | 2核CPU, 4GB内存, 50GB磁盘 | 运行K8s控制平面组件(API Server, Scheduler等) |
k8s-worker-01 | Kubernetes Worker 节点 | 2核CPU, 4GB内存, 100GB磁盘 | 运行业务应用容器,磁盘空间建议较大 |
k8s-worker-02 | Kubernetes Worker 节点 | 2核CPU, 4GB内存, 100GB磁盘 | 同上,实现工作节点冗余 |
注意:所有节点操作系统建议使用稳定的Linux发行版,如CentOS 7.9+或Ubuntu 20.04 LTS。务必确保所有节点间网络互通,且主机名不要重复。
系统层面的通用配置,需要在所有节点上执行:
-
关闭防火墙与SELinux(仅用于实验环境,生产环境需配置安全规则):
# 对于CentOS/RHEL systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config # 对于Ubuntu ufw disable -
配置主机名解析:编辑每个节点的
/etc/hosts文件,添加所有节点的IP和主机名映射,这是集群组件相互发现的基础。192.168.1.10 rancher-server 192.168.1.11 k8s-master-01 192.168.1.12 k8s-worker-01 192.168.1.13 k8s-worker-02 -
加载内核模块与修改系统参数:Kubernetes需要一些特定的内核模块和参数。
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system这里
net.ipv4.ip_forward = 1对于容器网络通信至关重要。
1.2 Docker引擎的安装与镜像加速
Rancher和Kubernetes都依赖于容器运行时,Docker仍是目前最广泛兼容的选择。安装完成后,配置一个可靠的镜像加速器是提升体验的关键一步,能有效解决拉取镜像缓慢或超时的问题。
-
安装Docker CE:以CentOS 7为例。
# 1. 卸载旧版本 sudo yum remove -y docker* # 2. 安装必要工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 3. 添加Docker官方仓库(或国内镜像源,如阿里云) sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 国内用户可替换为:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4. 安装指定版本(建议选择与K8s兼容的稳定版,如20.10) sudo yum install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 containerd.io # 5. 启动并设置开机自启 sudo systemctl start docker && sudo systemctl enable docker -
配置Docker镜像加速与存储驱动:编辑
/etc/docker/daemon.json,这个文件决定了Docker的核心行为。{ "registry-mirrors": [ "https://your-mirror.mirror.aliyuncs.com", // 替换为你的加速器地址 "https://dockerproxy.com" ], "exec-opts": ["native.cgroupdriver=systemd"], // 与K8s的kubelet保持一致 "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" }提示:
native.cgroupdriver=systemd这个选项非常重要,如果与后续安装的Kubernetes的kubelet驱动不一致,会导致节点无法注册。配置完成后,执行sudo systemctl daemon-reload && sudo systemctl restart docker生效。
2. Rancher Server的部署与初始化
Rancher Server是整个管理平台的大脑,我们将以容器化的方式运行它。这里提供两种主流方式:简单的Docker命令和更易于管理的Docker Compose。
2.1 选择部署方式:Docker Run vs Docker Compose
在rancher-server节点上,创建一个专用目录,例如/opt/rancher。
-
方式一:使用Docker命令快速启动
sudo docker run -d --restart=unless-stopped \ -p 80:80 -p 443:443 \ --privileged \ -v /opt/rancher/data:/var/lib/rancher \ -v /opt/rancher/auditlog:/var/log/auditlog \ --name rancher-server \ rancher/rancher:latest这条命令映射了80/443端口,挂载了数据卷,并以特权模式运行。简单直接,适合快速测试。
-
方式二:使用Docker Compose进行声明式管理(推荐) 创建
docker-compose.yml文件:version: '3' services: rancher: image: rancher/rancher:latest container_name: rancher-server restart: unless-stopped privileged: true ports: - "80:80" - "443:443" volumes: - ./data:/var/lib/rancher - ./auditlog:/var/log/auditlog environment: - TZ=Asia/Shanghai # 设置容器时区然后使用
docker-compose up -d启动。Docker Compose的优势在于配置文件即文档,易于版本管理和复现。
启动后,等待一两分钟,然后在浏览器访问https://<你的服务器IP>。由于使用的是自签名证书,浏览器会提示不安全,需要手动接受风险并继续。
2.2 关键初始化配置:绕过网络“慢”的坑
首次访问会要求你设置admin用户的密码。完成之后,你会进入Rancher的主仪表盘。接下来有几个关乎后续使用流畅度的关键设置:
-
设置默认镜像仓库:这是解决后续K8s集群组件(如CoreDNS、Metrics Server)镜像拉取失败的核心。
- 点击右下角的用户头像,进入
Settings & Preferences->Advanced Settings。 - 找到
system-default-registry这一项,将其值修改为registry.cn-hangzhou.aliyuncs.com(阿里云容器镜像服务的公共代理仓库)。这样,Rancher在部署集群时会自动从此仓库拉取系统镜像。
- 点击右下角的用户头像,进入
-
替换应用商店(Catalog)源:Rancher的应用商店默认从GitHub拉取Chart定义,国内访问可能不稳定。
- 进入
Global视图(左上角切换),选择Apps->Manage Catalogs。 - 你会看到三个默认的Catalog:
library、system-library和rancher-charts。点击每个Catalog右侧的⋮菜单,选择Edit。 - 将
Catalog URL中的https://git.rancher.io/...替换为对应的国内镜像地址,例如使用码云(Gitee)上的镜像:https://gitee.com/rancher/helm3-charts(对应 helm3-charts)https://gitee.com/rancher/charts(对应 charts)https://gitee.com/rancher/system-charts(对应 system-charts)
- 保存后,状态会变为
Refreshing,稍等片刻变为Active即表示成功。
- 进入
完成这两步,就为Rancher安装了一个“加速器”,后续创建集群和安装应用会顺畅很多。
3. 创建并定制你的第一个Kubernetes集群
现在,让我们用Rancher来创建第一个K8s集群。Rancher支持导入已有集群和创建新集群,这里我们选择从零创建。
3.1 通过UI引导创建自定义集群
在Rancher首页点击Create Cluster,选择Custom(自定义)选项。你会进入一个非常详细的配置页面。
- 集群基本信息:给集群起个名字(如
my-first-cluster),选择Kubernetes版本。对于新手,我强烈建议不要选择最新的版本,而是选择一个被广泛验证的稳定版,例如v1.24.x或v1.25.x。新版本可能有不兼容的改动。 - 集群配置选项:这里有很多高级选项,初期可以保持默认。但有一个需要注意:
Cloud Provider如果是在纯物理机或虚拟机上,选择None。 - 成员角色:可以配置哪些Rancher用户能访问这个集群,初期可以跳过。
最关键的一步在页面底部:生成节点注册命令。Rancher会为你生成三条(或更多)命令,分别用于部署etcd、Control Plane和Worker角色。
3.2 节点角色分配与命令执行
根据之前虚拟机的规划,我们来分配命令:
- etcd + Control Plane + Worker:这条命令包含了所有角色,通常只运行在一个节点上,作为集群的“种子”节点。我们将它复制到
k8s-master-01上执行。 - etcd + Worker:这条命令用于部署额外的etcd节点和Worker。我们将它复制到
k8s-worker-01上执行。 - Worker:这条是纯工作节点命令。复制到
k8s-worker-02上执行。
重要提醒:在执行任何命令前,请确保该节点已按第一章的要求完成了所有前置配置(Docker、内核参数等)。每条命令都类似于一个Docker run指令,它会在节点上启动一个
rancher/rancher-agent容器,该容器会向Rancher Server“报到”并自动拉取、部署K8s组件。
在各自节点的终端中,以root或具有sudo权限的用户执行对应的命令。执行后,回到Rancher的集群创建页面,你会看到节点状态从Pending(等待中)变为Provisioning(配置中),最后变为Active(活跃)。这个过程可能会持续20到40分钟,具体取决于你的网络速度和节点性能。期间请耐心等待,不要中断。
3.3 安装并配置kubectl进行本地管理
虽然Rancher的Web界面功能强大,但作为一名K8s管理员,熟练使用kubectl命令行工具是必不可少的。我们可以从Rancher界面轻松获取配置。
-
下载kubectl二进制文件:在任意能访问集群的机器上(比如你的本地笔记本或
k8s-master-01节点),下载对应版本的kubectl。版本最好与集群版本一致或接近。# 假设集群是v1.24.9 curl -LO "https://dl.k8s.io/release/v1.24.9/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ -
获取Kubeconfig文件:在Rancher UI中,进入你的集群,点击右上角的
Kubeconfig File按钮。这会显示一段YAML配置内容。将其完整复制。 -
配置本地环境:在你本地机器的
~/.kube/目录下(没有则创建),创建一个名为config的文件,将复制的内容粘贴进去。mkdir -p ~/.kube vim ~/.kube/config # 粘贴复制的配置 -
验证连接:打开终端,运行
kubectl cluster-info和kubectl get nodes。如果能看到集群信息和节点列表,恭喜你,命令行工具配置成功。
4. 部署生产级可观测性套件:监控与日志
一个没有监控和日志的K8s集群就像在黑暗中开飞机。Rancher的应用商店极大地简化了这些复杂系统的安装。
4.1 安装Prometheus与Grafana监控栈
在Rancher的集群视图下,进入Apps,点击Launch,你会看到之前配置好的应用商店列表。搜索monitoring,选择由Rancher官方维护的Monitoring Chart。
- 配置参数:在安装界面,你可以定制很多选项。对于初次安装,重点关注以下几点:
- 命名空间:选择
cattle-monitoring-system(默认)。 - 版本:选择一个稳定的Chart版本。
- 资源分配:在
Resources部分,确保给Prometheus和Grafana分配足够的内存和CPU,例如各分配1GiB内存和500m CPU。 - 持久化存储:为Prometheus的数据卷启用持久化存储(Persistent Volume),否则数据在Pod重启后会丢失。你需要预先准备好StorageClass。
- 命名空间:选择
- 安装与访问:点击
Install,Rancher会开始部署所有组件。完成后,你可以在Service Discovery->Ingresses中找到Grafana的访问入口。Rancher会自动创建一个Ingress,你可以通过给定的URL(如https://grafana.your-cluster.domain)访问Grafana仪表板。默认用户名和密码通常是admin/prom-operator,具体请查看部署后生成的Secret。
这套监控栈开箱即用,已经预配置了针对K8s集群、节点、Pod等资源的监控面板。
4.2 集成日志收集系统:以Loki为例
除了监控,集中式日志同样关键。这里我推荐使用Grafana Loki,它比传统的ELK栈更轻量,与Grafana集成无缝。
在Rancher应用商店中搜索loki,选择Loki Stack或类似的Chart。安装时需要注意:
- 采集器配置:Loki Stack通常包含
Promtail作为日志采集代理。确保Promtail的DaemonSet能够成功在所有节点上运行,它会自动采集节点上/var/log以及容器标准输出的日志。 - 存储配置:Loki支持多种存储后端,如本地文件系统、S3兼容对象存储等。对于测试,可以使用
filesystem;对于生产,务必配置持久化存储或对象存储。 - 与Grafana集成:安装完成后,回到之前安装的Grafana。在
Configuration->Data Sources中添加一个新的数据源,类型选择Loki,URL填写Loki服务的内部地址(通常是http://loki-gateway.loki-stack.svc.cluster.local)。添加成功后,你就可以在Grafana的Explore界面查询来自集群所有应用的日志了。
4.3 常见部署问题排查与集群清理
即便按照指南操作,也可能会遇到问题。这里分享几个我踩过的坑:
- 节点一直处于
Provisioning状态:最常见的原因是节点无法从指定镜像仓库拉取镜像。请回到2.2节,确认system-default-registry已正确设置。可以SSH到问题节点,手动运行docker pull registry.cn-hangzhou.aliyuncs.com/rancher/mirrored-pause:3.6测试基础镜像能否拉取。 etcd集群不健康:如果部署失败需要重装,必须彻底清理节点。否则残留的数据会导致新集群的etcd无法启动。清理脚本参考如下(在需要清理的节点上执行):# 停止所有容器 docker stop $(docker ps -aq) # 清理Docker系统 docker system prune -af --volumes # 删除K8s相关目录和文件 rm -rf /etc/kubernetes \ /etc/cni \ /opt/cni \ /var/lib/etcd \ /var/lib/kubelet \ /var/lib/rancher \ /var/log/containers \ /var/log/pods \ /run/kubernetes # 重启节点(可选但推荐) reboot- Rancher应用商店应用安装失败:检查Catalog状态是否为
Active,网络策略是否允许Pod访问外网(或你的内部Git仓库)以下载Chart定义。
最后,我想说的是,技术栈的搭建只是第一步。真正的挑战在于如何将你的应用优雅地迁移到K8s上,设计合理的资源请求与限制(Requests/Limits),配置高效的HPA(自动扩缩容),以及建立完善的CI/CD流水线。Rancher为我们提供了一个优秀的起点和操作界面,但背后的Kubernetes原理和云原生最佳实践,才是需要我们持续学习和深耕的领域。多动手实验,多查看Pod日志和事件(kubectl logs 和 kubectl describe),遇到问题善用官方文档和社区,你会逐渐发现这个生态的魅力所在。

632

被折叠的 条评论
为什么被折叠?



