Rancher+Kubernetes容器云平台部署与运维实战手册
简介Rancher PaaS平台部署与运维手册下载资源以docx图文文档形式提供共1个文件压缩包大小6.16MB。内容面向容器云平台工程师、运维人员及Kubernetes学习者系统梳理Rancher企业级容器管理平台的完整落地过程从PaaS平台架构简介入手涵盖软硬件环境需求、开发测试与生产环境集群拓扑规划、Docker安装配置、Harbor镜像仓库部署与项目配置、Rancher服务部署、RKE集群搭建以及kubectl、helm等常用工具链安装。文档还包含镜像构建、推送等生产实践章节目录结构清晰便于按步骤查阅或作为内部培训与项目交付参考。当前已有543人学习下载适合需要从零搭建容器云PaaS平台或进行Rancher生产环境部署的读者快速获取体系化操作指引。1. Rancher把容器云平台部署从「拼装开源」变成「开箱即用」Rancher 是一个开源的企业级容器管理平台它真正的价值不在于把 Kubernetes 界面做得好看而是把基础设施编排、容器编排调度、应用商店和企业级权限管理整合成一套完整的 PaaS 产品让企业不必再用一堆开源软件自行搭建容器服务平台。对运维工程师来说Rancher 意味着服务器运维、平台部署、日常监控三件事可以在同一个入口闭环。这份部署与运维手册覆盖了从主机初始化、Docker 与 Harbor 镜像仓库到 Rancher Server 部署、RKE 集群搭建、数据备份恢复、监控告警和 FAQ 的完整链路适合要落地私有容器云、或者负责多套 Kubernetes 集群日常运维的团队直接照做。2. 环境准备与集群拓扑硬件基线、主机初始化与节点规划2.1 硬件与系统底线CPU、内存、磁盘、内核都有硬要求Rancher 的部署要求分两个层面看一个是 Rancher Server 管理面自身的资源需求一个是承载业务负载的 K8S 集群节点需求。手册里明确指出这些要求只针对 Rancher 和 RKE Kubernetes 部署启动不包含项目服务消耗的资源。管理面节点建议至少 4C8G 起步集群规模大了再往上加etcd 节点性能直接决定 Rancher 和 K8S 的整体表现磁盘建议优先选 SSD。磁盘这块有个非常容易被忽略的机制K8S 默认可用磁盘空间是所在主机磁盘的 85%一旦占用率持续超过这个阈值该节点上的所有容器都会被驱逐节点会因磁盘压力不再对外提供服务直到空间释放。也就是说磁盘安全水位不是等到 100% 才出问题而是超过 85% 就开始翻车。配置参数可以修改这个阈值但一般不建议乱调更值得关注的是节点上如果同时部署了 Harbor、Jenkins 这类吃磁盘的应用要确保给 Docker 数据目录留够空间。若有服务需要数据持久化还要提前准备共享文件系统比如 NAS、NFS。操作系统推荐 CentOS 7.8 及以上内核版本 Docker 要求高于 3.10用uname -r确认。主机名只支持-和.两种特殊符号且不能重复。网络层面每个节点都应配置静态 IP如果用了 DHCP也要做 DHCP 预留保证节点每次拿到的是同一个 IP。配置项建议值说明Rancher 管理面节点4C8G 起步规模增大后按实际负载上调etcd 节点磁盘SSD直接决定集群性能避免与系统盘共享磁盘安全水位85%超过后节点容器会被驱逐操作系统CentOS 7.8内核需高于 3.10主机名仅允许-和.不能重复不能用下划线节点 IP静态 IP 或 DHCP 预留避免重启后地址漂移2.2 开发测试与生产拓扑Etcd、Control 节点怎么分RKE 集群中节点承担三种角色etcd 存储集群状态controlplane 运行控制面组件worker 运行业务负载。开发测试环境可以只用一个 Etcd 节点加一个 Control 节点再挂若干 Worker如果只有一台主机那 etcd、controlplane、worker 三个角色全部叠在这台机器上Rancher UI 也部署在同一台。生产环境就不能这么省了。为了防止单点故障Etcd 和 Control 节点都要多份Rancher 会自动把多个 Etcd 节点组成集群多个 Control 节点同样自动组成集群关键约束是节点个数必须为单数。手册推荐以三个 Etcd 节点加三个 Control 节点为基准拓扑。这里有一个很常见的误解单数要求主要针对 Etcd因为 etcd 集群需要选主偶数节点在分区场景下可能打成平票Control 节点单数则是 Rancher 自动组成高可用集群时的约定照做即可。生产环境的另一个建议是把 Rancher Server 和业务集群分开部署。手册里的拓扑把 Rancher UI 放在单独主机上业务集群的 Etcd 和 Control 是另一组节点。如果条件有限至少保证 Etcd 三个节点是独立的不要三个角色全部叠在唯一一台生产机上。2.3 主机初始化防火墙、SELinux、主机名一次改到位这一步是所有后续操作的前提。手册给的初始化命令很直接依次执行即可# 停止并禁用 firewalld避免 K8S 组件端口互相访问被拦截 systemctl stop firewalld systemctl disable firewalld # 临时关闭 SELinux改配置文件保证重启后仍然生效 setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config # 设置主机名只允许 - 和 . 两种特殊符号 hostnamectl set-hostname k8s-master-01stop只对当前生效disable防止开机自启两个都要跑。SELinux 那行sed是把 enforcing 改成 disabled别只做setenforce 0否则重启后打回原形。主机名这一项最容易翻车的地方是用了下划线或者中文K8S 解析主机名的时候会直接报错。另外还要提醒一个手册之外但生产环境必须做的事关闭 swap或者给 kubelet 配置--fail-swap-onfalse。RKE 部署时节点开着 swap 会有告警常见做法是直接swapoff -a并注释/etc/fstab里的 swap 行。2.4 时钟同步不校时集群证书和心跳迟早出问题K8S 集群对时间偏差非常敏感证书校验、节点心跳、etcd 选举都依赖准确时间。手册给了一个简单的 NTP 对时脚本每小时跑一次# 创建对时脚本 vi /usr/local/runntpdate.sh #!/bin/bash /usr/sbin/ntpdate 192.168.66.40 /var/log/ntpdate.log hwclock -w exit 0 # 增加执行权限 chmod x /usr/local/runntpdate.sh # 配置 crontab 每小时执行一次 crontab -e 00 * * * * sh /usr/local/runntpdate.sh脚本里把192.168.66.40换成你环境里的 NTP 服务器地址。hwclock -w是把系统时间写回硬件时钟防止重启后时间又漂回去。生产环境如果有现成的 NTP 服务直接把地址替换掉即可。时间不同步的症状很隐蔽通常是集群内证书突然报x509: certificate has expired or is not yet valid排查一圈发现是节点时间差了十几分钟。3. Docker 与 Harbor先把容器运行时和镜像仓库立起来3.1 Docker 安装在线 yum 源和离线 rpm 两种走法RKE 和 Rancher 都依赖 Docker安装方式分两种。能连外网的机器直接用官方源安装手册里的流程是先检查内核再替换 yum 源然后添加 Docker 官方 yum 源# 查看内核版本确认大于 3.10 uname -r # 替换本地 yum 源为阿里云源 wget -O /etc/yum.repos.d/CentOS-aliyun.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 安装 yum-utils提供 yum-config-manager 命令 yum install -y yum-utils # 添加 docker-ce 的 yum 源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装 docker-ce yum -y install docker-ce离线的内网环境则走 rpm 包安装。手册里的做法是把 docker-ce 的 rpm 包和依赖包上传到服务器然后直接在目录里执行rpm -ivh *.rpm安装完成后用docker version验证能同时输出 Client 和 Server 信息就说明安装成功。离线安装最容易踩的坑是缺依赖包所以一定要把依赖包和主包放到同一个目录再*.rpm一起装千万别只装 docker-ce 主包。3.2 daemon.json 三件套数据目录、日志大小、保留份数Docker 装完先别急着用先改/etc/docker/daemon.json。手册里给的配置只有三个字段但这三个字段在运维上能救很多次命{ data-root: /data/docker-data, log-driver: json-file, log-opts: {max-size: 500m, max-file: 3} }>systemctl daemon-reload systemctl start docker注意daemon-reload必须执行否则 systemd 不会感知配置变化。改完># 安装 docker-compose离线方式直接上传二进制文件 mv docker-compose-Linux-x86_64 docker-compose chmod x docker-compose mv docker-compose /usr/bin/ # 解压 harbor 离线包 cd /data tar -xvf harbor-offline-installer-v2.2.1.tgz # 创建数据目录并生成配置文件 mkdir -p /data/harbor-data cd /data/harbor cp harbor.yml.tmpl harbor.ymlharbor.yml.tmpl是模板文件复制成harbor.yml后只改五处就可以启动hostname改成 Harbor 服务所在主机的内网 IPhttps 相关配置全部注释掉内网环境先用 http 省去证书麻烦harbor_admin_password是 admin 初始密码database.password是 Harbor 数据库 root 密码生产环境必须改data_volume改成刚才创建的数据目录。配置项建议值说明hostname内网 IP 或域名不能写 localhost外网客户端要访问https 相关注释掉内网先走 http后续再补证书harbor_admin_password自定义强密码首次安装生效之后在 UI 里改database.password自定义强密码生产环境必须改默认值data_volume/data/harbor-data放独立数据盘别跟系统盘挤一起确认完配置执行./install.sh启动。启动后浏览器访问http://hostname用 admin 和刚才配置的密码登录。Harbor 安装后docker login hostname验证一下后面推送镜像会用到。另外离线环境拉取镜像时每台节点上的 Docker 都需要配置insecure-registries否则 Docker 会拒绝向 http 协议的 Harbor 推送镜像。这个点容易漏配在/etc/docker/daemon.json里和前面的># 在有外网的机器上拉取镜像 docker pull rancher/rancher:v2.5.x # 打内网 Harbor 的标签 docker tag rancher/rancher:v2.5.x harbor地址/library/rancher:v2.5.x # 推送到 Harbor docker push harbor地址/library/rancher:v2.5.xdocker tag的完整写法是docker tag 原镜像名 目标镜像名这里的目标镜像名加了 Harbor 地址前缀。推送时harbor地址必须是节点 Docker 能访问到的地址而且已经配置在insecure-registries里。手动拼接镜像名容易出错一个准确做法是先复制原镜像的 IMAGE ID用docker tag IMAGE ID harbor地址/library/rancher:v2.5.x来避免 tag 拼写问题。4.2 部署 Rancher Serverdocker run 参数拆解镜像准备好后Rancher Server 本体用docker run启动。手册基于 Rancher 2.5.x 版本这个版本用 docker 容器方式部署是官方主推路径# 启动 Rancher Server 容器 docker run -d --restartunless-stopped \ --privileged \ -p 80:80 -p 443:443 \ -v /data/rancher:/var/lib/rancher \ --name rancher-server \ rancher/rancher:v2.5.x-d表示后台运行--restartunless-stopped保证机器重启后容器自动拉起除非手动 stop--privileged是 Rancher 容器内需要操作 iptables 等内核相关能力-p 80:80 -p 443:443把 UI 和 API 端口暴露出来80 会跳转到 443-v /data/rancher:/var/lib/rancher是数据持久化Rancher 的配置、证书和数据库都存在这个目录里升级容器时数据不会丢。启动完成后浏览器访问https://服务器IP首次访问会要求设置 admin 密码。这里有个关键参数容易被忽略Server URL 一定要填内网里其他节点能访问到的地址比如 Rancher Server 的 IP 或 VIP不能填localhost。这个地址会写进集群配置之后所有节点都通过它跟 Rancher 通信填错了后面添加集群时各种连不上。设置完密码后Rancher UI 会引导你创建一个新集群也就是下一步 RKE 做的事情。4.3 RKE 集群搭建cluster.yml 节点角色与 etcd 快照RKERun Kubernetes Everywhere是 Rancher 的 Kubernetes 集群部署工具用一个cluster.yml描述集群拓扑。先准备 SSH 免密登录RKE 需要免密访问所有节点常见做法是生成密钥对后ssh-copy-id到每台节点。下面是生产环境拓扑对应的cluster.yml核心配置nodes: - address: 192.168.1.11 user: root role: [controlplane, etcd] - address: 192.168.1.12 user: root role: [controlplane, etcd] - address: 192.168.1.13 user: root role: [controlplane, etcd] - address: 192.168.1.21 user: root role: [worker] - address: 192.168.1.22 user: root role: [worker] services: etcd: snapshot: true retention: 72hnodes列表里每个节点必须指定address、user和role。role是数组可以组合比如单机 all-in-one 就是role: [controlplane, etcd, worker]。生产环境建议把 etcd 和 controlplane 组合在一起worker 单独一组。services.etcd里的snapshot: true开启 etcd 定时快照retention: 72h表示保留最近 72 小时的快照这个配置对后面做备份恢复非常重要。配置写好后执行# 根据 cluster.yml 创建集群 rke up --config cluster.yml执行过程中 RKE 会输出每个节点的部署日志出现Finished building Kubernetes cluster successfully就说明集群创建成功。执行完当前目录会生成kube_config_cluster.yml文件这是集群的 kubeconfig所有后续运维操作都要用到它。4.4 kubectl、helm 与应用镜像推送集群建完kubectl是第一个要装的工具。版本要和集群 API Server 版本保持在同一个 minor 版本内偏差太大可能出现client and server dont have the same version类的报错。装完直接用kubectl --kubeconfigkube_config_cluster.yml get nodes能列出所有 Ready 状态的节点就说明集群健康。--kubeconfig每次带太啰嗦常见做法是export KUBECONFIG$PWD/kube_config_cluster.yml写进~/.bashrc。helm 是另一个必备工具Rancher 里的监控、istio 等服务组件都是通过 helm chart 部署的。把 helm 二进制放到/usr/local/bin即可。手册里还有一节讲应用镜像构建核心流程就是写 Dockerfile、构建、推到 Harbor# 构建应用镜像注意镜像名带 Harbor 地址和项目名 docker build -t harbor地址/library/myapp:1.0.0 . # 登录 Harbor 后推送 docker login harbor地址 docker push harbor地址/library/myapp:1.0.0镜像推到 Harbor 后在 Rancher UI 里创建工作负载时镜像地址填这个 Harbor 路径节点就能从内网拉取整个「镜像生产到应用部署」的闭环就通了。5. 避坑FAQ 里最常见的翻车现场与排查路径5.1 Failed 与 Unknown 的 Pod先分清镜像问题还是节点失联现象同一工作负载出现多个 Failed 状态的 Pod或者多个工作负载同时出现 Unknown 状态的 Pod。原因Failed 和 Unknown 是两回事。Failed 通常指向 Pod 本身最常见的是镜像拉取失败私有仓库认证问题、镜像 tag 写错、探针失败、资源不足导致调度失败。Unknown 几乎都是节点层面的问题kubelet 失联、节点 NotReady、磁盘压力把 Pod 驱逐了。解决先看节点状态kubectl get nodes如果节点 NotReady排查重点放在节点上看磁盘、看 kubelet。节点正常再查 Pod用kubectl describe pod pod名看 Eventskubectl logs pod名看容器输出。镜像拉取失败的原因在 describe 里会显示Failed to pull image再去检查镜像地址和仓库认证。5.2 NodePort 只通一半从宿主机、Calico 到安全组逐段查现象NodePort 模式的工作负载只能通过运行 Pod 所在的主机 IP 访问或者集群里某几个节点的 IP 访问服务不通其他节点正常。原因这通常和externalTrafficPolicy有关。默认值为Cluster时流量会转发到任意节点的 Pod如果设成Local只有本机有 Pod 时才会转发没有 Pod 的节点自然不通。另一个原因是安全组或防火墙只放行了部分节点的端口Calico 路由异常也会导致跨节点转发失败。解决先看 Service 的externalTrafficPolicy字段需要所有节点都能访问就改成Cluster。改完仍不通逐段排查在不通的节点上curl 节点IP:NodePort再进 Pod 所在节点测试 ClusterIP 访问确认是安全组拦截还是 Calico 转发问题。内网环境尤其要先确认安全组放行了 NodePort 端口段这个最容易被忽略。5.3 Rancher 证书过期提前 30 天处理比事后补救省事现象访问 Rancher UI 时浏览器提示证书错误或者接入集群报x509: certificate has expired。原因Rancher 自签证书默认有效期一年离线环境没有证书续期机制过期后所有基于证书的通信都会报错。这个问题出现得很规律基本是上线后 11 到 12 个月集中爆发。解决手册的处理思路是进入 Rancher Server 容器把旧证书目录改名保留重启容器触发重新生成自签证书。但更建议的做法是提前预防上线时就在日历里标注证书到期时间提前 30 天处理。用配置了有效期更长的证书或者干脆在 Rancher 前端挂一层 Nginx 做 HTTPS 终结由 Nginx 统一管理证书Rancher 本身走 http 内部端口绕开自签证书过期问题。我曾经在处理生产环境证书过期时因为只备份了容器没备份/var/lib/rancher数据目录恢复后集群信息丢失又重新导入了一遍集群这个教训说明证书处理前数据备份是第一步。5.4 新主机加入集群异常token、主机名、时钟三连现象新主机执行注册命令后一直处于等待状态或者加入后在集群里显示 NotReady。原因最常见的原因有三个注册 token 过期、新主机主机名与现有节点重复、新主机时钟与集群时间偏差过大。token 默认有效期有限过期后注册命令就失效了主机名重复会让 kubelet 的节点注册信息互相覆盖时钟偏差则会导致证书校验失败。解决逐项检查。token 过期就在 Rancher UI 里重新生成注册命令主机名用hostnamectl set-hostname改成唯一值注意只允许-和.两种符号时钟问题跑一下第 2.4 节的同步脚本确认date输出与集群时间一致。这里最容易翻车的是复制注册命令时漏了--etcd或--controlplane参数导致角色没按预期加入。5.5 内核版本低导致 calico-node 反复重启现象集群节点上calico-node组件反复重启kubectl get pods -n kube-system里显示 CrashLoopBackOff。原因手册里提到的一个典型场景就是主机内核版本低。Calico 的网络组件依赖内核模块和特性内核太旧会导致部分模块加载失败或运行时异常进而让 calico-node 进程崩溃。解决把内核升级到支持的网络模块版本CentOS 7.8 建议内核升级到满足 Calico 要求的版本然后重启节点。升级前确认业务有冗余节点可以滚动升级。另一个临时缓解手段是查看 calico-node 日志定位具体是哪个模块加载失败有时候是nf_conntrack或ip_set没加载先modprobe加载对应模块看看能不能顶上但兜底方案仍然是升级内核。6. 备份恢复与监控告警上线前先把两个保命动作配好部署完成后的第一优先级不是急着上业务而是把备份和监控这两件事坐实。手册里数据备份恢复给了两套流程一套偏 Rancher 管理面数据一套偏 RKE 集群数据其中 RKE 集群的 etcd 快照是最保命的那个。用 RKE 创建集群时如果cluster.yml里已经开启了snapshot: true集群本身会按照设定的 retention 自动做快照。手动强制备份一条命令# 手动创建 etcd 快照名称建议带上日期 rke etcd snapshot-save --config cluster.yml --name pre-upgrade-20250701恢复流程同样用 rke 命令# 用指定快照恢复整个集群 rke etcd snapshot-restore --config cluster.yml --name pre-upgrade-20250701snapshot-restore会把 etcd 恢复到快照时间点同时会重写各节点的 etcd 数据目录。执行前确认cluster.yml里所有节点都能 SSH 免密登录否则恢复过程会因为连不上节点而中断。恢复完成后 RKE 会把集群重新拉起这时候用kubectl get nodes验证节点状态再抽查几个工作负载是否正常。我每次做集群升级、配置变更这类操作前都会强制先snapshot-save一把这个习惯已经帮我处理过两次升级失败回滚的场景。监控告警方面Rancher 内置了基于 Prometheus 的监控在集群里启用监控 chart 后节点、Pod、容器的指标会自动采集告警规则可以配到 Webhook 或邮箱自定义指标监控通过 ServiceMonitor 定义抓取路径在 UI 里把规则落到具体服务即可。手册的监控与告警章节把这套配置的每个字段都写清楚了按文档走一遍再结合前面的备份恢复一套容器云平台的基础运维体系才算真正闭合。希望帮到你。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联
返回资讯列表 →