1. 为什么选择AlmaLinux 10 + RKE2搭建K8s集群
作为一个刚接触Kubernetes的新手,我花了整整两周时间才搞明白如何部署一个可用的K8s集群。官方文档对初学者极不友好,各种专业术语和复杂的配置步骤让人望而生畏。直到我发现RKE2这个神器——它完美结合了K3S的轻量化和RKE1的企业级特性,让K8s部署变得前所未有的简单。
RKE2最大的优势在于:
- 内置了容器运行时(containerd),省去了繁琐的Docker安装配置
- 自动处理证书管理和集群通信加密
- 提供符合CIS安全基准的默认配置
- 支持标准的Kubernetes API,完全兼容原生K8s生态
选择AlmaLinux 10作为操作系统是因为:
- 它是RHEL的完美替代品,100%兼容RHEL生态
- 相比CentOS Stream更稳定可靠
- 官方明确支持RKE2运行
- 阿里云镜像下载速度快(实测能到50MB/s)
2. 环境准备与硬件规划
2.1 基础环境检查清单
在开始前,请确保你的开发机满足以下要求:
| 资源类型 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU核心 | 4核 | 8核+ | 需要支持虚拟化技术 |
| 内存 | 8GB | 16GB+ | 每个worker节点至少2GB |
| 磁盘空间 | 60GB | 100GB+ | 系统盘建议50GB,数据盘单独挂载 |
| 网络 | 稳定外网 | 100Mbps+ | 需要下载大量镜像 |
实测发现:内存不足会导致etcd频繁崩溃,磁盘空间不足会让集群处于不可用状态
2.2 虚拟机配置要点
使用VirtualBox创建虚拟机时,这几个配置项至关重要:
-
网络设置:
- 选择"桥接网卡"模式(Bridged Adapter)
- 建议使用Intel PRO/1000 MT Desktop网卡类型
- 启用"混杂模式"为"全部允许"
-
系统配置:
bash复制# 创建虚拟机示例命令(VBoxManage方式) VBoxManage createvm --name k8s-node1 --ostype "RedHat_64" --register VBoxManage modifyvm k8s-node1 --memory 4096 --cpus 2 VBoxManage modifyvm k8s-node1 --nic1 bridged --bridgeadapter1 en0 -
存储优化:
- 使用VDI格式动态分配磁盘
- 启用IO APIC和EFI启动
- 为每个节点分配独立的磁盘控制器
3. AlmaLinux 10系统初始化
3.1 基础系统配置
所有节点都需要执行以下初始化操作:
-
关闭防火墙和SELinux(生产环境慎用):
bash复制systemctl stop firewalld && systemctl disable firewalld sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config setenforce 0 -
配置内核参数:
bash复制cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system -
配置主机名解析:
bash复制cat <<EOF | sudo tee -a /etc/hosts 192.168.56.109 node1 192.168.56.110 node2 192.168.56.111 node3 EOF
3.2 SSH免密登录配置
在控制节点(node1)上执行:
bash复制ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
for node in node1 node2 node3; do
ssh-copy-id -i ~/.ssh/id_rsa.pub $node
done
验证配置:
bash复制ssh node2 "hostname" # 应该返回node2而不提示输入密码
4. RKE2集群部署实战
4.1 Server节点安装
在node1上执行:
bash复制curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION="v1.34.3" sh -
systemctl enable rke2-server.service
systemctl start rke2-server.service
关键文件位置:
- 配置文件:
/etc/rancher/rke2/config.yaml - kubeconfig文件:
/etc/rancher/rke2/rke2.yaml - 日志文件:
/var/log/syslog或journalctl -u rke2-server -f
获取node token(用于agent加入集群):
bash复制cat /var/lib/rancher/rke2/server/node-token
4.2 Worker节点安装
在每个worker节点执行:
bash复制curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" INSTALL_RKE2_VERSION="v1.34.3" sh -
配置agent(以node2为例):
bash复制mkdir -p /etc/rancher/rke2/
cat <<EOF > /etc/rancher/rke2/config.yaml
server: https://node1:9345
token: <上一步获取的token>
EOF
启动agent:
bash复制systemctl enable rke2-agent.service
systemctl start rke2-agent.service
4.3 集群验证
在server节点检查节点状态:
bash复制export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
/var/lib/rancher/rke2/bin/kubectl get nodes -o wide
预期输出:
code复制NAME STATUS ROLES AGE VERSION
node1 Ready control-plane,etcd 5m v1.34.3+rke2r1
node2 Ready <none> 3m v1.34.3+rke2r1
node3 Ready <none> 2m v1.34.3+rke2r1
5. 常见问题与解决方案
5.1 网络问题排查
现象:节点状态为NotReady,kubelet日志显示网络插件未就绪
解决方案:
- 检查Calico Pod是否正常运行:
bash复制
kubectl get pods -n kube-system | grep calico - 如果Calico未自动安装,手动部署:
bash复制
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
5.2 证书过期处理
RKE2默认证书有效期为1年,续期方法:
bash复制systemctl stop rke2-server
rke2 certificate rotate
systemctl start rke2-server
5.3 资源不足处理
内存不足:
- 修改server节点配置:
yaml复制# /etc/rancher/rke2/config.yaml kube-controller-manager-arg: - "terminated-pod-gc-threshold=10" kubelet-arg: - "eviction-hard=memory.available<500Mi"
磁盘空间不足:
- 清理旧镜像:
bash复制
crictl rmi --prune - 调整etcd存储大小:
yaml复制# /etc/rancher/rke2/config.yaml etcd-extra-env: - "ETCD_QUOTA_BACKEND_BYTES=2147483648" # 2GB
6. 生产环境优化建议
-
持久化存储配置:
bash复制# 安装local-path-provisioner kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml -
监控方案:
bash复制# 安装Prometheus Operator helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack -
备份策略:
bash复制# 安装etcd备份工具 curl -sL https://raw.githubusercontent.com/rancher/rke2/master/rke2-backup.sh | bash -
安全加固:
- 定期轮换证书:
rke2 certificate rotate - 启用PSP(Pod安全策略)
- 配置网络策略限制Pod间通信
- 定期轮换证书:
我在实际部署中发现,RKE2的自动恢复能力非常强——即使意外重启server节点,集群也能在2-3分钟内自动恢复。对于worker节点,建议配置至少2个副本的Deployment,这样单个节点故障不会影响服务可用性。
