Rancher 一键安装 Kubernetes 集群
Rancher 除了管理已有的 Kubernetes 集群外,还支持新建自定义集群。
集群初始设置
通过 Rancher 集群列表右上角的【新建】可以自定义一个集群.
在自定义配置过程中,需要重点关注 镜像仓库 的配置,将其设置为私有的仓库,例如 registry.cncfstack.com/docker.io。如果没有配置,默认的镜像都是从 Docker Hub 拉取。
对于运行的 Linux 操作系统,需要支持 Cgroup V2,否则无法正常启动。可以通过 stat -fc %T /sys/fs/cgroup/ 命令确认,正确输出为 cgroup2fs,错误的 tmpfs 。文章为提供配置修改的方法。

点击【创建】完成原数据的生成,在集群页面提供了2步骤。
在步骤1中,可以将所有角色创建在同一台机器,也可以分不同的节点创建不同的角色。例如我这里测试环境就一台机器,所以就将所有的角色全部勾选了。
在步骤2中,如果是使用rancher自签或者自签名的证书,需要勾选 不安全。会给 curl 添加 -k/--insecure 来忽略证书的校验。
curl -fL https://rancher.cncfstack.com/system-agent-install.sh | sudo sh -s - --server https://rancher.cncfstack.com --label 'cattle.io/os=linux' --token pt8q9wp4cdf2pqk9lxr******v2s4f26tzgmd7x7p5kx8t5m9l8 --ca-checksum 1a32f2e6f5e1d583530***ee068953befa7defde68a4ac88da77825d3ad --etcd --controlplane --worker

集群创建成功后,可以对集群进行查看和管理

命令行访问集群
使用 Rancher 部署的 Kuberentes 集群,可以在 ControlPlane(即Master)节点获取到 admin 的 kubeconfig,也可以通过 Web 页面的集群详情中单独下载 kubeconfig 文件。
为了便于使用,可以在 ~/.bashrc 中添加 alias 别名的方式
alias helm='/usr/local/bin/helm --kubeconfig=/var/lib/rancher/rke2/server/cred/admin.kubeconfig'
alias kubectl='/var/lib/rancher/rke2/bin/kubectl --kubeconfig=/var/lib/rancher/rke2/server/cred/admin.kubeconfig'
服务分析
RKE2 部署的集群在节点上核心运行两个服务 rancher-system-agent.service 和 rke2-server.service
rancher-system-agent.service它作为一个常驻守护进程,通过 WebSocket 与 Rancher Server 保持长连接。它负责向 Rancher Server 注册节点,并持续上报节点状态。
rke2-server.service 是 Kubernetes 集群的核心进程,负责实际运行控制平面组件。这包括 kube-apiserver(接口服务)、etcd(存储)、kube-scheduler(调度器)和 kube-controller-manager(控制器)等关键组件。
rancher-system-agent.service服务启动
[root@ceph-mon rancher]# systemctl cat rancher-system-agent
# /etc/systemd/system/rancher-system-agent.service
[Unit]
Description=Rancher System Agent
Documentation=https://www.rancher.com
Wants=network-online.target
After=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
EnvironmentFile=-/etc/default/rancher-system-agent
EnvironmentFile=-/etc/sysconfig/rancher-system-agent
EnvironmentFile=-/etc/systemd/system/rancher-system-agent.env
Type=simple
Restart=always
RestartSec=5s
Environment=CATTLE_LOGLEVEL=info
Environment=CATTLE_AGENT_CONFIG=/etc/rancher/agent/config.yaml
Environment=CATTLE_AGENT_STRICT_VERIFY=false
ExecStart=/usr/local/bin/rancher-system-agent sentinel
rke2-server.service的服务启动配置
[root@ceph-mon rancher]# systemctl cat rke2-server
# /usr/local/lib/systemd/system/rke2-server.service
[Unit]
Description=Rancher Kubernetes Engine v2 (server)
Documentation=https://github.com/rancher/rke2#readme
Wants=network-online.target
After=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
EnvironmentFile=-/etc/default/%N
EnvironmentFile=-/etc/sysconfig/%N
EnvironmentFile=-/usr/local/lib/systemd/system/%N.env
KillMode=process
Delegate=yes
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecCondition=/bin/sh -c 'if systemctl is-active --quiet rke2-agent.service; then echo "Error: rke2-agent is running!"; exit 1; fi'
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/rke2 server
ExecStopPost=-/bin/sh -c "systemd-cgls /system.slice/%n | grep -Eo '[0-9]+ (containerd|kubelet)' | awk '{print $1}' | xargs -r kill"
EnvironmentFile=-/var/lib/rancher/rke2/system-agent-installer/rke2-sa.env
数据目录分析
通过启动服务可以看到,Rancher 核心的配置文件 /etc/rancher/
/etc/rancher配置文件管理目录
[root@ceph-mon rancher]# tree /etc/rancher/
/etc/rancher/
├── agent
│ ├── cattle-id
│ ├── config.yaml
│ └── registries.yaml
├── node
│ └── password
└── rke2
├── config.yaml.d
│ └── 50-rancher.yaml
├── registries.yaml
├── rke2-pss.yaml
└── rke2.yaml
4 directories, 8 files
Kubernetes 的核心服务是通过 kubernetes 的 Static Pod 的方式运行。通过 kubelet 监听一个目录中 Pod Yaml 文件进行创建和删除。这些服务默认在 Kubernetes 集群中通过 kubectl 不可见。
[root@ceph-mon rancher]# tree -L 3 /var/lib/rancher
.
├── agent
│ ├── applied
│ │ ├── 20260706-150106-applied.plan
│ ├── interlock
│ └── rancher2_connection_info.json
├── capr
│ └── idempotence
│ └── idempotent.sh
└── rke2
├── agent
│ ├── client-ca.crt
│ ├── client-kubelet.crt
│ ├── client-kubelet.key
│ ├── client-kube-proxy.crt
│ ├── client-kube-proxy.key
│ ├── client-rke2-controller.crt
│ ├── client-rke2-controller.key
│ ├── containerd // 容器运行时目录
│ ├── etc
│ ├── images // 容器镜像地址
│ ├── kubelet.kubeconfig
│ ├── kubeproxy.kubeconfig
│ ├── logs
│ ├── pod-manifests // agent节点的 Static Pod 配置目录
│ ├── rke2controller.kubeconfig
│ ├── server-ca.crt
│ ├── serving-kubelet.crt
│ └── serving-kubelet.key
├── bin -> /var/lib/rancher/rke2/data/v1.35.6-rke2r1-fc80fcc88ac9/bin
├── data
│ └── v1.35.6-rke2r1-fc80fcc88ac9
├── server
│ ├── agent-token
│ ├── cred
│ ├── db // etcd的数据目录
│ ├── etc
│ ├── manifests // server节点的 Static Pod 配置目录
│ ├── node-token -> /var/lib/rancher/rke2/server/token
│ ├── tls
│ └── token
└── system-agent-installer
├── rke2_restart_stamp
└── rke2-sa.env
22 directories, 26 files
0 directories, 6 files
Cgroup V1 修改为 V2
1、根据操作系统,如果使用的 grub 启动的,
# 备份配置文件
cp /etc/default/grub /etc/default/grub.bak
# 查看当前启动参数
cat /etc/default/grub | grep GRUB_CMDLINE_LINUX
2、添加 systemd.unified_cgroup_hierarchy=1 配置
# 注意:是添加到引号内的参数后面,不是替换整行
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1 /' /etc/default/grub
# 确认修改结果
cat /etc/default/grub | grep GRUB_CMDLINE_LINUX
3、重新生成 grub 配置
# 判断启动模式
ls /sys/firmware/efi
# 如果有输出,则是 UEFI 模式:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
# 或者
grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
# 或者
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# 如果没有输出,则是 BIOS 模式:
grub2-mkconfig -o /boot/grub2/grub.cfg
4、重启并验证
reboot
# 重启后验证
stat -fc %T /sys/fs/cgroup/