部署 Rancher Server 与 K8s 集群

单节点部署 Rancher Server,再通过 Rancher UI 添加自定义 k8s 集群(含 kubelet/kube-api/etcd 等 yaml 参数与网段配置)时读这篇

02-部署安装 / 部署方式
rancher serverRANCHER_CONTAINER_TAGv2.10.3CATTLE_BOOTSTRAP_PASSWORD443端口reset_docker.shpull_rancher_images.shk8s集群自定义集群kubeletkube-apietcdservice_node_port_rangeservice_cluster_ip_rangecluster_cidrextra_binds

部署 Rancher Server 与 K8s 集群

4. 部署 Rancher Server

单节点部署 Rancher Server:

# 清理历史部署痕迹
cd cube-studio/install/kubernetes/rancher/
sh reset_docker.sh
# 进程关闭会有时延。执行后用 docker ps -a 查看是否还有没清理干净的,
# 如果有,重启机器,重新 sh reset_docker.sh

# 提前拉取需要的镜像
sh pull_rancher_images.sh
# 如果拉取失败,配置好 docker 加速器后 systemctl restart docker,再次执行拉取脚本

echo "127.0.0.1 localhost" >> /etc/hosts
sudo timedatectl set-local-rtc 1

# 部署 rancher server
export RANCHER_CONTAINER_TAG=v2.10.3
export PASSWORD=cube-studio
sudo docker run -d --privileged --restart=unless-stopped -p 443:443 --name=myrancher -e AUDIT_LEVEL=3 -e CATTLE_BOOTSTRAP_PASSWORD=$PASSWORD rancher/rancher:$RANCHER_CONTAINER_TAG

# 打开 https://xx.xx.xx.xx:443/ 等待 web 界面可以打开(预计 1~10 分钟)
# 用户名 admin,密码 cube-studio

4.1 Rancher Server 启动可能问题

  • 如果是 centos 8 的配置,按 01 文档的方法修改配置。
  • 机器 docker 存储目录要 >100G,内存 >8G。
  • 要提前拉取镜像 sh pull_rancher_images.sh,不然会因为拉取时间过长造成失败。如果拉取不了,可配置 docker 加速器,参考《节点安装 Containerd 容器运行时》中的镜像加速配置(原文指向 install/kubernetes/rancher/install_docker.md)。
  • permission denied 类型的报错,用 mount 查看所属盘是否有 noexec 限制。
  • 查看 Rancher Server 报错:docker logs -f myrancher,忽略其中同步数据的错误。
  • 查看 k3s 日志报错:容器刚重启后执行 docker exec -it myrancher cat k3s.log > k3s.log,在日志中搜索 error 相关内容:
    • k3s 日志报 iptables 问题:按 01 文档的 centos8 配置 iptables。
    • k3s 日志报 containerd 问题:docker exec -it myrancher mv /var/lib/rancher/k3s/agent/containerd /var/lib/rancher/k3s/agent/_containerd
    • k3s 日志报系统内核没有 xx 模块:降低 linux 系统版本。
    • k3s 日志报 Failed to set sysctl: open /proc/sys/net/netfilter/nf_conntrack_max: permission denied:执行 echo "net.netfilter.nf_conntrack_max = 524288" | sudo tee -a /etc/sysctl.conf 然后 sysctl -p
sudo sysctl -w fs.inotify.max_user_watches=2099999999
sudo sysctl -w fs.inotify.max_user_instances=2099999999
sudo sysctl -w fs.inotify.max_queued_events=2099999999

上面 _containerd 的修复命令在原文中路径有笔误(/varllib/rancher/k3slagent/_containerd),已按正确路径整理为 /var/lib/rancher/k3s/agent/_containerd。见 install/kubernetes/rancher/readme.md:135,请按实际路径确认。

5. 部署 k8s 集群

部署完 Rancher Server 后,进入 https://xx.xx.xx.xx/ 的 web 界面(xx 为服务器 IP)。

选择 "Set a specific password to use" 配置 Rancher 密码,不选 "Allow collection of anonymous statistics....",勾选 "I agree to the terms and conditions ...."。

Rancher 初始设置

之后选择 添加集群 -> 自定义集群 -> 填写集群名称(英文小写)。

添加集群

自定义集群

然后选择 kubernetes 的版本(第一次打开可能刷新不出来,等待 1~2 分钟再刷新)。

注意:选择 1.28 版本的 k8s。

选择 k8s 版本

版本列表

修改 Advanced option,主要是禁用 nginx ingress、修改端口范围;用 docker info 检查服务器上的 docker 根目录是否和默认一致,不一致则需要更改。

之后选择编辑 yaml 文件,添加 kubelet 的挂载参数,需要把分布式存储的位置都加入挂载:

    kube-api:
      ...
    kubelet:
      extra_args:
        # 与 apiserver 会话时的并发数,默认是 10
        kube-api-burst: "30"
        # kubelet 默认一次拉取一个镜像,设置为 false 可同时拉取多个镜像,
        # 前提是存储驱动要为 overlay2,对应的 Docker 也需要增加下载并发数
        serialize-image-pulls: "false"
        # 节点资源预留
        enforce-node-allocatable: "pods"
        system-reserved: "cpu=0.25,memory=200Mi"
        kube-reserved: "cpu=0.25,memory=1500Mi"
        # docker 存储不能和根目录是同一个分区才生效
        image-gc-high-threshold: 95
        image-gc-low-threshold: 90
        eviction-hard: "imagefs.available<5%,nodefs.available<5%,nodefs.inodesFree<5%"
        # 不限制最大并行拉取次数
        registry-qps: 0
        registry-burst: 10

      extra_binds:
        - '/data:/data'

编辑 yaml

这个 yaml 文件控制着 k8s 基础组件的启动方式(kubelet、api-server 等的启动参数)。

有几个需要修改的是 k8s 使用的网段,默认使用 10.xx,如果和公司网段重复,可以改为其他网段,例如 172.16.0.0/16172.17.0.0/16 两个网段。

services 部分的示例(注意缩进对齐):

  services:
    etcd:
      backup_config:
        enabled: true
        interval_hours: 12
        retention: 6
        safe_timestamp: false
      creation: 12h
      extra_args:
        election-timeout: '5000'
        heartbeat-interval: '500'
      gid: 0
      retention: 72h
      snapshot: false
      uid: 0
    kube-api:
      always_pull_images: false
      pod_security_policy: false
      # 服务 node port 范围
      service_node_port_range: 10-32767
      # 服务的 ip 范围,如果公司 ip 网段与 k8s 网段有冲突,则需要改这里
      service_cluster_ip_range: 172.16.0.0/16
      # 证书 https 版本 istio 需要,k8s 在 1.21 版本以下的,需要加 extra_args
      extra_args:
        service-account-issuer: kubernetes.default.svc
        service-account-signing-key-file: /etc/kubernetes/ssl/kube-service-account-token-key.pem
    kube-controller:
      # 集群 pod 的 ip 范围
      cluster_cidr: 172.17.0.0/16
      # 集群服务的 ip 范围
      service_cluster_ip_range: 172.16.0.0/16
    kubelet:
      # dns 服务的 ip
      cluster_dns_server: 172.16.0.10
      extra_args:
        # 配置特殊的端口
        port: 10250
        image-gc-high-threshold: 90
        image-gc-low-threshold: 85
        resolv-conf: "/etc/resolv-src.conf"
      # kubelet 挂载主机目录,这样才能使用 subpath,所有情况下部署都必加,且仅此处是必须要加的
      extra_binds:
        - '/data:/data'
        - '/etc/resolv-src.conf:/etc/resolv-src.conf'
    kubeproxy: {}
    scheduler: {}

如果有其他参数需要后面修改,可以再在这里对 yaml 文件进行修改,然后升级集群。修改后直接进入下一步。

接着选择节点的角色:

  • etcd:k8s 的数据库,可多个节点。
  • control:相当于 k8s 的 master(控制组件),可多节点实现高可用。
  • worker:工作节点。

可以在部署 Rancher Server 的这台机器上添加 etcd/control 角色。(单机部署或简单尝试,可以把所有角色都选上。)

选择角色

最后复制页面中显示的命令,在 Rancher Server 的终端上粘贴执行,注意在命令后面加上参数 --node-name xx.xx.xx.xx(服务器主机的内网 ip 地址)。

复制命令

部署完成后,集群状态会变为 "Active",之后就可以下载 kubeconfig 文件连接 k8s 集群。

集群 Active

6. 部署完成后需要部分修正

由于 coredns 的资源 limits 太小,可以取消 coredns 的 limits 限制,不然 dns 会非常慢,整个集群都会缓慢。


集群跑起来后的故障处理见《Rancher 运维与故障处理》;扩容、多用户、迁移见《扩容多用户与重建迁移》

最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki