1. 为什么选择RKE2单节点集群部署Rancher?
在容器化部署领域,Kubernetes已经成为事实标准,而RKE2作为Rancher实验室推出的轻量级Kubernetes发行版,相比原生K8s和其他发行版有几个独特优势。我去年在三个生产环境项目中全面采用RKE2后,发现它特别适合中小规模部署场景。
RKE2最大的特点是同时兼顾了轻量化和企业级需求。它默认使用containerd作为运行时,比Docker更加轻量,启动速度提升约40%。但同时又内置了Calico网络插件、CoreDNS、Metrics Server等核心组件,开箱即用。单节点模式下,RKE2的资源占用可以控制在2GB内存以内,这对资源有限的开发测试环境非常友好。
选择单节点部署主要考虑以下场景:
- 开发测试环境:需要完整K8s功能但资源有限
- PoC验证:快速验证Rancher功能和工作流
- 边缘计算场景:资源受限的现场设备管理
- 个人学习环境:低成本搭建完整Kubernetes学习平台
重要提示:单节点部署不适合生产环境,生产环境至少需要3个节点组成高可用集群。但作为学习和功能验证,单节点是完全足够的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 硬件与系统要求
我推荐使用Ubuntu 20.04 LTS作为基础系统,这是RKE2官方测试最充分的平台。以下是经过实测的最低配置要求:
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2核 | 4核 |
| 内存 | 2GB | 4GB |
| 磁盘 | 40GB | 100GB |
| 系统 | Ubuntu 20.04 | RHEL 8/CentOS 8 |
网络方面需要确保:
- 端口6443(Kubernetes API)开放
- 端口8472(VXLAN overlay网络)开放
- 端口10250(kubelet)开放
- 能访问外网以下载容器镜像
2.2 系统基础配置
以下配置步骤基于Ubuntu 20.04,其他系统需要相应调整:
bash复制# 禁用swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 设置内核参数
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-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# 安装基础工具
sudo apt-get update && sudo apt-get install -y apt-transport-https curl nfs-common
3. RKE2单节点集群安装
3.1 安装RKE2 Server
RKE2的安装过程异常简单,这也是我推荐它的原因之一:
bash复制# 下载安装脚本
curl -sfL https://get.rke2.io | sudo sh -
# 启用并启动服务
sudo systemctl enable rke2-server.service
sudo systemctl start rke2-server.service
安装完成后,需要将RKE2二进制文件加入PATH:
bash复制echo 'export PATH=$PATH:/var/lib/rancher/rke2/bin' >> ~/.bashrc
echo 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml' >> ~/.bashrc
source ~/.bashrc
3.2 验证集群状态
等待约2-3分钟后,可以检查集群状态:
bash复制kubectl get nodes
# 应该看到类似输出:
# NAME STATUS ROLES AGE VERSION
# ubuntu Ready control-plane,etcd,master 2m v1.21.5+rke2r1
kubectl get pods -A
# 应该看到所有系统pod都处于Running状态
3.3 单节点集群的特殊配置
默认情况下,RKE2会部署完整的控制平面组件。对于单节点环境,我们可以优化一些配置以减少资源占用:
bash复制sudo mkdir -p /etc/rancher/rke2/
cat <<EOF | sudo tee /etc/rancher/rke2/config.yaml
disable:
- rke2-ingress-nginx
- rke2-metrics-server
EOF
# 重启服务使配置生效
sudo systemctl restart rke2-server.service
这个配置禁用了Ingress Controller和Metrics Server,节省约500MB内存。需要时可以通过移除这些配置行重新启用。
4. Rancher管理平台部署
4.1 Helm安装与配置
Rancher推荐使用Helm进行部署,首先安装Helm客户端:
bash复制curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
然后添加Rancher的Helm仓库:
bash复制helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
kubectl create namespace cattle-system
4.2 证书配置选择
Rancher支持三种SSL/TLS配置方式:
- Rancher生成的自签名证书(默认)
- Let's Encrypt自动证书
- 使用已有证书
对于测试环境,使用自签名证书最简单:
bash复制helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin
生产环境强烈建议使用正式证书,可以通过添加以下参数:
--set ingress.tls.source=secret
并提前创建包含证书的secret
4.3 访问Rancher Dashboard
安装完成后,需要等待几分钟让所有Pod就绪。然后可以通过NodePort访问:
bash复制kubectl -n cattle-system get svc rancher
# 记下PORT(S)列中的端口号,通常是443:3xxxx/TCP
# 获取节点IP
IP=$(hostname -I | awk '{print $1}')
echo "访问地址: https://$IP:3xxxx"
首次登录使用用户名admin和设置的bootstrapPassword(示例中为"admin")。
5. 私有镜像仓库搭建
5.1 Harbor仓库部署
Harbor是目前最成熟的开源企业级镜像仓库。使用Helm部署Harbor:
bash复制# 添加Harbor Helm仓库
helm repo add harbor https://helm.goharbor.io
# 创建命名空间
kubectl create namespace harbor
# 安装Harbor
helm install harbor harbor/harbor \
--namespace harbor \
--set expose.type=nodePort \
--set expose.tls.enabled=false \
--set persistence.enabled=true \
--set externalURL=http://harbor.my.org
5.2 访问与初始配置
获取访问信息:
bash复制kubectl -n harbor get svc harbor
# 记下NodePort端口,通常是80:3xxxx/TCP
echo "访问地址: http://$IP:3xxxx"
默认管理员账号:
- 用户名:admin
- 密码:Harbor12345
首次登录后应该:
- 修改管理员密码
- 创建新项目(如"dev")
- 根据需要创建用户和权限
5.3 配置RKE2使用私有仓库
编辑RKE2配置文件:
bash复制sudo cat <<EOF | sudo tee -a /etc/rancher/rke2/config.yaml
mirrors:
"harbor.my.org":
endpoint:
- "http://harbor.my.org"
EOF
# 重启RKE2
sudo systemctl restart rke2-server.service
6. 集成Rancher与私有仓库
6.1 在Rancher中添加私有仓库
- 登录Rancher Dashboard
- 进入"集群"视图,选择你的集群
- 左侧菜单选择"资源 -> 密文"
- 点击"添加密文",选择类型"Docker凭证"
- 填写仓库地址、用户名和密码
- 点击"创建"
6.2 测试镜像拉取
创建一个测试部署验证配置:
yaml复制cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx
image: harbor.my.org/dev/nginx:latest
ports:
- containerPort: 80
EOF
检查Pod状态:
bash复制kubectl get pods
# 应该看到nginx-test pod处于Running状态
7. 常见问题排查
7.1 RKE2服务无法启动
常见原因及解决方案:
-
端口冲突:
bash复制sudo netstat -tulnp | grep 6443如果6443端口被占用,需要修改RKE2配置:
yaml复制tls-san: - myhostname bind-address: 0.0.0.0 https-listen-port: 6444 # 修改端口 -
镜像拉取失败:
bash复制
journalctl -u rke2-server -f查看日志中是否有镜像拉取错误,可能需要配置HTTP代理或镜像加速器。
7.2 Rancher无法访问
检查步骤:
- 确认所有Pod就绪:
bash复制
kubectl -n cattle-system get pods - 检查Ingress配置:
bash复制
kubectl -n cattle-system get ingress - 查看服务日志:
bash复制
kubectl -n cattle-system logs -l app=rancher
7.3 私有仓库连接问题
典型错误及修复:
-
x509证书错误:
yaml复制# 在RKE2配置中添加 mirrors: "harbor.my.org": endpoint: - "http://harbor.my.org" rewrite: "^harbor.my.org/(.*)": "harbor.my.org/$1" -
认证失败:
bash复制# 检查secret是否正确 kubectl get secret regcred -o yaml
8. 性能优化与维护
8.1 资源限制配置
对于单节点环境,合理设置资源限制很重要:
yaml复制# /etc/rancher/rke2/config.yaml
kubelet-arg:
- "kube-reserved=cpu=500m,memory=512Mi"
- "system-reserved=cpu=500m,memory=512Mi"
- "eviction-hard=memory.available<500Mi"
8.2 备份与恢复
RKE2数据备份策略:
- 备份关键目录:
bash复制sudo tar czvf rke2-backup-$(date +%F).tar.gz \ /etc/rancher/rke2/ \ /var/lib/rancher/rke2/server/ \ /var/lib/kubelet/ - 定期备份ETCD:
bash复制sudo rke2 etcd-snapshot save --name pre-upgrade
8.3 日志管理
配置日志轮转:
bash复制sudo cat <<EOF | sudo tee /etc/logrotate.d/rke2
/var/lib/rancher/rke2/server/logs/*.log {
daily
rotate 7
missingok
notifempty
compress
}
EOF
9. 安全加固建议
9.1 基础安全措施
- 限制API访问:
bash复制sudo ufw allow from 192.168.1.0/24 to any port 6443 proto tcp - 启用审计日志:
yaml复制# /etc/rancher/rke2/config.yaml audit-policy-file: "/etc/rancher/rke2/audit.yaml" kube-apiserver-arg: - "audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log" - "audit-log-maxage=30" - "audit-log-maxbackup=10"
9.2 Rancher安全配置
- 启用双因素认证
- 配置角色访问控制(RBAC)
- 定期轮换bootstrap密码
- 启用审计日志
9.3 Harbor安全实践
- 启用内容信任(Notary)
- 配置漏洞扫描
- 设置镜像不可变性规则
- 启用垃圾回收
10. 扩展与升级
10.1 从单节点扩展到多节点
当需要扩展时,可以添加worker节点:
- 在RKE2 server节点获取token:
bash复制sudo cat /var/lib/rancher/rke2/server/node-token - 在worker节点安装RKE2 agent:
bash复制curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sudo sh - - 配置agent:
yaml复制# /etc/rancher/rke2/config.yaml server: https://<server-ip>:6443 token: <node-token>
10.2 RKE2升级流程
RKE2支持原地升级:
bash复制# 查看可用版本
sudo rke2 --version
# 升级到特定版本
sudo rke2 upgrade --version v1.21.5+rke2r2
# 重启服务
sudo systemctl restart rke2-server.service
10.3 Rancher升级策略
通过Helm进行升级:
bash复制helm repo update
helm get values rancher -n cattle-system -o yaml > rancher-values.yaml
helm upgrade rancher rancher-stable/rancher \
-n cattle-system \
-f rancher-values.yaml \
--version 2.6.3
在实际操作中,我发现RKE2的单节点模式虽然资源占用低,但在磁盘I/O上会成为瓶颈。建议使用SSD磁盘,特别是当同时运行多个工作负载时。另外,定期清理不需要的镜像和ETCD数据可以显著提升性能。
