如何在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 自动化流水线中。欢迎根据业务特点进一步深化集群调优与云原生治理策略。

相关推荐
ghostwritten18 小时前
Kubernetes 网络模式深入解析?
网络·容器·kubernetes
vx-bot55566619 小时前
企业微信接口在自动化工作流中的关键角色与设计模式
设计模式·自动化·企业微信
weixin_4624462319 小时前
【原创实践】LangChain + Qwen 智能体项目完整解析:构建RPA自动化操作代理
langchain·自动化·rpa
cly119 小时前
Ansible自动化(九):循环语句
windows·自动化·ansible
cly119 小时前
Ansible自动化(十):配置文件管理模块(lineinfile / blockinfile)
运维·自动化·ansible
ben9518chen19 小时前
Linux文件系统基础
linux·服务器·php
0思必得019 小时前
[Web自动化] Selenium简单使用
前端·python·selenium·自动化·web自动化
原神启动119 小时前
K8S(七)—— Kubernetes Pod 基础概念与实战配置
云原生·容器·kubernetes
不想画图20 小时前
Kubernetes(五)——rancher部署和Pod详解
linux·kubernetes·rancher