Rancher+k8s集群部署避坑指南:从虚拟机配置到监控插件安装全流程

Rancher与Kubernetes集群部署实战:从零构建到生产级监控的完整路径

如果你正准备在企业内部或开发环境中搭建一套Kubernetes集群,并且希望有一个直观、强大的管理界面来简化日常运维,那么Rancher很可能已经进入了你的备选清单。作为一个深度使用过多种K8s发行版和管理工具的技术人,我不得不承认,Rancher在降低Kubernetes使用门槛方面做得相当出色。它把复杂的集群部署、应用发布、监控日志等操作,封装成了Web界面上点点鼠标就能完成的事情。但“优雅”地完成一次部署,尤其是在特定网络环境下,远不止运行几条docker run命令那么简单。从虚拟机的基础配置、镜像加速的巧妙设置,到避开那些让新手抓狂的“坑”,每一步都需要细致的规划。这篇文章,我将结合多次在内外网环境部署的经验,为你梳理一条清晰、可复现的路径,目标是让你不仅能成功跑起来,更能理解背后的原理,打造一个稳定、易于维护的容器平台。

1. 基础环境:为集群搭建坚实的地基

在兴奋地敲下第一个Docker命令之前,花些时间把基础环境打磨好,能为后续流程省去无数麻烦。很多人部署失败,问题往往不是出在Rancher或K8s本身,而是底层系统配置没到位。

1.1 虚拟机规划与系统配置

我建议至少准备三台虚拟机来开始你的旅程:一台作为Rancher Server(管理平面),另外两台构成一个最小化的K8s集群(一主一从)。当然,生产环境需要更多节点以保证高可用。这里以四台为例进行规划:

主机名推荐角色最小配置关键用途说明
rancher-serverRancher 管理节点2核CPU, 4GB内存, 50GB磁盘运行Rancher Server容器,提供Web管理界面
k8s-master-01Kubernetes Master 节点2核CPU, 4GB内存, 50GB磁盘运行K8s控制平面组件(API Server, Scheduler等)
k8s-worker-01Kubernetes Worker 节点2核CPU, 4GB内存, 100GB磁盘运行业务应用容器,磁盘空间建议较大
k8s-worker-02Kubernetes Worker 节点2核CPU, 4GB内存, 100GB磁盘同上,实现工作节点冗余

注意:所有节点操作系统建议使用稳定的Linux发行版,如CentOS 7.9+或Ubuntu 20.04 LTS。务必确保所有节点间网络互通,且主机名不要重复。

系统层面的通用配置,需要在所有节点上执行:

  1. 关闭防火墙与SELinux(仅用于实验环境,生产环境需配置安全规则):

    # 对于CentOS/RHEL
    systemctl stop firewalld && systemctl disable firewalld
    setenforce 0
    sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
    
    # 对于Ubuntu
    ufw disable
    
  2. 配置主机名解析:编辑每个节点的/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
    
  3. 加载内核模块与修改系统参数: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的主仪表盘。接下来有几个关乎后续使用流畅度的关键设置:

  1. 设置默认镜像仓库:这是解决后续K8s集群组件(如CoreDNS、Metrics Server)镜像拉取失败的核心。

    • 点击右下角的用户头像,进入Settings & Preferences -> Advanced Settings
    • 找到system-default-registry这一项,将其值修改为registry.cn-hangzhou.aliyuncs.com(阿里云容器镜像服务的公共代理仓库)。这样,Rancher在部署集群时会自动从此仓库拉取系统镜像。
  2. 替换应用商店(Catalog)源:Rancher的应用商店默认从GitHub拉取Chart定义,国内访问可能不稳定。

    • 进入Global视图(左上角切换),选择Apps -> Manage Catalogs
    • 你会看到三个默认的Catalog:librarysystem-libraryrancher-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.xv1.25.x。新版本可能有不兼容的改动。
  • 集群配置选项:这里有很多高级选项,初期可以保持默认。但有一个需要注意:Cloud Provider如果是在纯物理机或虚拟机上,选择None
  • 成员角色:可以配置哪些Rancher用户能访问这个集群,初期可以跳过。

最关键的一步在页面底部:生成节点注册命令。Rancher会为你生成三条(或更多)命令,分别用于部署etcdControl PlaneWorker角色。

3.2 节点角色分配与命令执行

根据之前虚拟机的规划,我们来分配命令:

  1. etcd + Control Plane + Worker:这条命令包含了所有角色,通常只运行在一个节点上,作为集群的“种子”节点。我们将它复制到k8s-master-01上执行。
  2. etcd + Worker:这条命令用于部署额外的etcd节点和Worker。我们将它复制到k8s-worker-01上执行。
  3. 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-infokubectl 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 logskubectl describe),遇到问题善用官方文档和社区,你会逐渐发现这个生态的魅力所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值