如何在RHEL 9上配置并优化Kubernetes 1.23高可用集群,提升大规模容器化应用的自动化部署与管理?

本文面向具备 Linux 运维与容器基础的读者,A5IDC系统讲解在 RHEL 9 上配置并优化 Kubernetes 1.23 高可用(HA)集群的完整解决方案。内容包括硬件规划、操作系统准备、Kubernetes 安装与配置、一致性网络插件、存储方案、调度性能优化、监控与日志、自动化部署脚本及评估表格。所有内容均围绕实际生产部署展开。


一、项目背景与目标

我们将在三台控制平面节点和三台工作节点上,通过 kubeadm 构建高可用 Kubernetes 1.23 集群,并实现:

  • 多节点高可用控制平面(etcd 集群 3 节点)
  • CNI 网络采用 Calico
  • 自动化部署脚本(可重复部署)
  • 集群性能优化:调度调优、kubelet 参数、内核网络参数
  • 日志与监控方案集成(Prometheus + Grafana + EFK)

二、香港服务器www.a5idc.com硬件与网络规划

2.1 推荐硬件配置

角色 CPU 内存 存储 网络
控制平面节点(3 台) 8 核 16 GB 200 GB SSD 千兆/万兆网卡
工作节点(3+ 台) 16 核 32 GB 500 GB NVMe 千兆/万兆网卡
存储节点(可选) 8 核 32 GB 4+ TB SSD RAID 10 千兆/万兆网卡
负载均衡器(HAProxy) 4 核 8 GB 100 GB SSD 千兆

2.2 网络规划

子网 用途 A5IDC建议 CIDR
Pod 网络 容器互通 192.168.0.0/16
Service 网络 服务 ClusterIP 10.96.0.0/12
节点管理 主机通讯 172.16.0.0/16

三、操作系统准备(RHEL 9)

确保所有节点使用 RHEL 9.2+ 并已启用订阅:

bash 复制代码
subscription-manager register --username <您的RHID> --password <RH密码>
subscription-manager attach --auto
subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpms \
                             --enable=rhel-9-for-x86_64-appstream-rpms

3.1 系统参数调整

编辑 /etc/sysctl.d/k8s.conf

bash 复制代码
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

3.2 关闭防火墙和 SELinux

bash 复制代码
systemctl disable --now firewalld
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
setenforce 0

3.3 安装必备组件

bash 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

四、容器运行时 --- containerd 配置

4.1 安装 containerd

bash 复制代码
yum install -y containerd

4.2 配置

bash 复制代码
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

编辑 /etc/containerd/config.toml 启用 Systemd cgroup:

toml 复制代码
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  runtime_type = "io.containerd.runc.v2"
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

启动 containerd:

bash 复制代码
systemctl enable --now containerd

五、Kubernetes 安装与 HA 配置

5.1 添加 Kubernetes 仓库

bash 复制代码
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg \
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

5.2 安装 kubeadm、kubelet、kubectl

指定版本 1.23:

bash 复制代码
yum install -y kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0
systemctl enable --now kubelet

六、控制平面 HA 构建

6.1 负载均衡器配置(HAProxy)

在独立节点上:

bash 复制代码
yum install -y haproxy
cat <<EOF > /etc/haproxy/haproxy.cfg
global
  log /dev/log local0
defaults
  mode http
  timeout connect 5000ms
  timeout client 50000ms
  timeout server 50000ms

frontend k8s-api
  bind *:6443
  default_backend k8s-masters

backend k8s-masters
  balance roundrobin
  server master1 10.0.0.11:6443 check
  server master2 10.0.0.12:6443 check
  server master3 10.0.0.13:6443 check
EOF
systemctl enable --now haproxy

10.0.0.100:6443 作为 Kubernetes API 的 VIP。

6.2 初始化第一个控制平面

bash 复制代码
kubeadm init \
  --control-plane-endpoint "10.0.0.100:6443" \
  --upload-certs \
  --pod-network-cidr=192.168.0.0/16 \
  --kubernetes-version=v1.23.17

记录输出的 join 命令。

6.3 加入其它控制平面节点

bash 复制代码
kubeadm join 10.0.0.100:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --control-plane \
  --certificate-key <cert-key>

6.4 加入工作节点

bash 复制代码
kubeadm join 10.0.0.100:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

七、网络插件 Calico 安装

推荐使用 Calico v3.20 与 Kubernetes 1.23 兼容。

bash 复制代码
kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml

确认 Pod 网络状态:

bash 复制代码
kubectl get pods -n calico-system

八、存储方案(动态 PV)

8.1 本地 PV (Local Path Provisioner)

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.23/deploy/local-path-storage.yaml

设置 StorageClass 默认:

bash 复制代码
kubectl patch storageclass local-path \
  -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

九、调度与性能优化

9.1 kubelet 参数优化

编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,加入:

ini 复制代码
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd --eviction-hard=memory.available<500Mi"

重载:

bash 复制代码
systemctl daemon-reload
systemctl restart kubelet

9.2 内核网络参数(大规模网络)

bash 复制代码
cat <<EOF >> /etc/sysctl.d/99-k8s-tuning.conf
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_syn_backlog = 4096
EOF
sysctl --system

十、监控与日志方案

10.1 Prometheus + Grafana

可通过 Helm 安装:

bash 复制代码
kubectl create ns monitoring
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm install kube-prometheus prometheus-community/kube-prometheus-stack -n monitoring

10.2 EFK(Elasticsearch + Fluentd + Kibana)

通过 Operator 或 Helm 部署:

bash 复制代码
helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch -n logging

十一、自动化部署脚本

11.1 deploy-k8s-ha.sh 示例

bash 复制代码
#!/bin/bash

set -e

for host in control1 control2 control3 worker1 worker2 worker3; do
  ssh root@$host "yum install -y kubeadm kubelet kubectl"
done

ssh root@control1 "kubeadm init --control-plane-endpoint 10.0.0.100:6443 \
  --upload-certs --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.23.17"

# 剩余自动 join 逻辑

十二、评估与验证

12.1 集群状态检查

bash 复制代码
kubectl get nodes
kubectl get pods --all-namespaces

12.2 性能基准

测试项 工具 说明
网络连通性 iperf3 各节点 Pod 相互带宽
调度延迟 kube-bench 获取每秒调度数量
API 延迟 k6 模拟并发请求

测试示例(API 延迟):

bash 复制代码
k6 run -e API_SERVER=https://10.0.0.100:6443 -u 200 -d 120s tests/api-load.js

十三、常见问题与最佳实践

问题 解决方向
控制平面故障 多节点 Etcd + HAProxy
节点资源瓶颈 节点水平扩容 + CPU/内存请求限制
日志爆炸 Fluentd 过滤与 Elasticsearch 索引策略

结语

A5IDC从系统准备、安装部署、网络存储、性能优化、监控、安全策略等方面,全面剖析了在 RHEL 9 上搭建 Kubernetes 1.23 高可用集群的实践与细节。所有步骤可根据实际业务规模调整,部署脚本与参数配置也可集成到 CI/CD 自动化流水线中。欢迎根据业务特点进一步深化集群调优与云原生治理策略。

相关推荐
BingoGo19 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack19 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
阿里云云原生3 天前
Kubernetes 官方再出公告,强调立即迁移 Ingress NGINX
kubernetes