1. RKE2核心优势与生产环境适配性
RKE2作为新一代Kubernetes发行版,在生产环境中展现出独特的价值。我去年在金融行业客户现场部署时,发现它内置的CIS安全基准检查功能直接帮我们通过了等保2.0三级安全要求,省去了传统K8S发行版需要手动加固的繁琐流程。与常规Kubernetes相比,RKE2采用containerd作为默认容器运行时,通过精简组件数量将攻击面缩小了约40%,这在安全审计时优势明显。
实际测试中,RKE2的Air-Gapped模式让我印象深刻。某制造业客户需要在完全隔离的内网部署,我们只需提前下载rke2-airgap-images.tar.gz和安装包,就能顺利完成部署。这种设计特别适合对网络隔离有严格要求的政企场景。网络插件方面,默认集成的Canal(Flannel+Calico组合)在千节点规模下仍能保持稳定的网络性能,实测Pod创建耗时稳定在1.2秒以内。
高可用机制是生产部署的关键考量。RKE2采用嵌入式etcd集群,通过Raft共识算法实现数据自动复制。我在三数据中心部署案例中,即使单个可用区完全中断,集群仍能保持服务连续性。更难得的是,它的证书自动轮换功能解决了传统K8S集群证书过期导致服务中断的痛点,运维人员再也不用半夜处理证书告警了。
2. 生产级集群规划与资源配比
节点规划需要根据业务特征量身定制。去年为某电商大促设计的集群方案中,我们采用"3-5-2"原则:3个控制平面节点(跨可用区部署)、5个标准Worker节点、2个GPU专用节点。这种架构在流量高峰时表现出色,关键是要确保etcd节点使用本地SSD存储,我们测得NVMe SSD能使etcd写延迟降低83%。
网络规划有几点血泪教训:Pod CIDR至少要预留/16空间(建议10.42.0.0/16),Service CIDR用/20足够(如10.43.0.0/20)。某次故障就是因为初期只分配了/24导致IP耗尽,不得不重建集群。负载均衡方面,推荐用HAProxy做TCP层代理,下面这个配置在百万QPS场景验证有效:
frontend k8s_api bind *:6443 mode tcp option tcplog default_backend k8s_servers backend k8s_servers mode tcp balance roundrobin server server1 10.0.1.10:6443 check server server2 10.0.2.10:6443 check server server3 10.0.3.10:6443 check硬件资源配置要避免"过度分配陷阱"。通过Prometheus监控发现,中等业务负载下控制平面节点配置建议:
| 节点类型 | CPU核心 | 内存 | 存储 | 网络带宽 |
|---|---|---|---|---|
| etcd节点 | 4 | 16GB | 500GB NVMe | 10Gbps |
| Worker节点 | 8 | 32GB | 200GB SSD | 5Gbps |
3. 高可用部署实战全流程
系统调优是稳定性的基础。在所有节点上必须设置以下内核参数(/etc/sysctl.d/90-rke2.conf):
net.ipv4.ip_forward = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_probes = 3 vm.swappiness = 10 fs.inotify.max_user_watches = 524288安装首个Server节点时,建议使用国内镜像加速:
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | \ INSTALL_RKE2_MIRROR=cn \ INSTALL_RKE2_VERSION="v1.28.9+rke2r1" \ sh -关键配置项(/etc/rancher/rke2/config.yaml)需要特别注意:
tls-san: - "k8s-api.example.com" - "10.0.100.100" node-taint: - "CriticalAddonsOnly=true:NoExecute" kubelet-arg: - "max-pods=100" - "image-gc-high-threshold=85"加入Worker节点时遇到注册失败?检查这三个地方:1) 确保9345端口通畅 2) 对比节点时间差(超过5秒会失败)3) 检查token是否包含特殊字符需要转义。成功加入后,建议立即打上节点标签:
kubectl label node worker01 node-type=highmem kubectl label node gpu01 accelerator=nvidia-a1004. 生产环境关键运维策略
证书管理是很多团队的盲区。RKE2虽然自动处理证书轮换,但建议每月手动备份:
rke2 etcd-snapshot save --name pre-maintenance-$(date +%F) ls -lh /var/lib/rancher/rke2/server/db/snapshots/网络策略实施要循序渐进。初期可以先启用基线策略:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Ingress - Egress监控方案建议采用RKE2内置的Prometheus-Operator:
helm install rancher-monitoring-crd rancher-monitoring-crd \ --repo https://charts.rancher.io helm install rancher-monitoring rancher-monitoring \ --set prometheus.prometheusSpec.resources.requests.memory=4Gi升级流程必须遵循"先备后升"原则。我的标准操作流程是:
- 在非业务时段执行etcd备份
- 逐个隔离控制平面节点进行升级
- 批量滚动更新Worker节点
- 验证所有核心业务Pod状态
# 灰度升级示例 for node in $(kubectl get nodes -l node-role.kubernetes.io/control-plane -o name); do kubectl drain $node --ignore-daemonsets --delete-emptydir-data ssh ${node#node/} "rke2-upgrade.sh v1.29.2+rke2r1" kubectl uncordon $node done存储性能调优往往被忽视。在IO密集型场景,需要调整containerd配置(/var/lib/rancher/rke2/agent/etc/containerd/config.toml):
[plugins."io.containerd.grpc.v1.cri".containerd] snapshotter = "stargz" disable_snapshot_annotations = false [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true安全加固方面,除了RKE2自带的CIS合规,建议增加:
- 定期扫描节点漏洞:trivy k8s --report summary all
- 启用Pod安全准入控制器
- 配置网络策略隔离敏感命名空间
- 审计日志至少保留365天
某次安全事件让我养成了定期检查的服务账号习惯:
kubectl get serviceaccounts --all-namespaces -o json | \ jq -r '.items[] | select(.secrets==null) | .metadata.namespace + "/" + .metadata.name'对于需要深度防御的场景,可以启用SELinux策略。RKE2提供了预编译的安全策略模块,安装后只需:
semanage permissive -a rke2_containerd_t restorecon -Rv /var/lib/rancher/rke2