部署 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 ...."。

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


然后选择 kubernetes 的版本(第一次打开可能刷新不出来,等待 1~2 分钟再刷新)。
注意:选择 1.28 版本的 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 文件控制着 k8s 基础组件的启动方式(kubelet、api-server 等的启动参数)。
有几个需要修改的是 k8s 使用的网段,默认使用 10.xx,如果和公司网段重复,可以改为其他网段,例如 172.16.0.0/16 和 172.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 集群。

6. 部署完成后需要部分修正
由于 coredns 的资源 limits 太小,可以取消 coredns 的 limits 限制,不然 dns 会非常慢,整个集群都会缓慢。
集群跑起来后的故障处理见《Rancher 运维与故障处理》;扩容、多用户、迁移见《扩容多用户与重建迁移》。