信创 Kubernetes 多主高可用架构完全指南(初学者版)
适配环境:国产化芯片(鲲鹏、飞腾、海光等)+ 国产操作系统(银河麒麟 V10、统信 UOS、华为欧拉等)
适用人群:K8s 初学者、信创环境运维工程师、云原生技术入门者
1 背景认知
1.1 什么是信创 K8s 多主高可用架构?
- 信创:即 “信息技术应用创新”,核心是采用国产化软硬件(芯片、操作系统、中间件)构建 IT 基础设施,保障数据安全与自主可控。
- K8s 多主架构:指部署 3 个及以上 Master 节点(控制平面),避免单 Master 节点的 “单点故障”,确保集群持续运行。
- 高可用(HA):通过组件冗余、故障自动转移、负载均衡等机制,实现集群服务可用性达 99.95% 以上(年中断时间≤4.38 小时),满足企业级生产环境要求。
1.2 为什么需要多主高可用架构?
1.2.1 单主架构的痛点
- 单点故障风险:单 Master 节点承载 API Server、Controller Manager 等核心组件,一旦宕机,整个集群失控。
- 业务中断损失:生产环境服务中断可能导致经济损失、合规风险(如金融、政务场景)。
- 维护受限:单 Master 节点升级、重启时,集群需停机,影响业务连续性。
1.2.2 多主架构的核心价值
- 消除单点故障:多个 Master 节点冗余,单个节点故障不影响整体集群。
- 负载均衡:客户端请求(kubectl、应用程序)均匀分发到多个 Master 节点,提升并发处理能力。
- 灵活维护:可离线维护单个 Master 节点,不中断集群服务。
- 信创适配:兼容国产化软硬件,满足政策合规要求(如等保 2.0、信创目录适配)。
1.3 高可用架构的核心目标
- 消除单点故障:Master 节点、etcd 存储集群均冗余部署。
- 故障自动转移:主节点故障时,10 秒内自动切换到备用节点。
- 数据一致性:集群状态(如 Pod 配置、节点信息)通过 etcd 集群同步,确保所有节点数据一致。
- 最小化中断:故障恢复时间(RTO)≤5 分钟,数据丢失量(RPO)≈0。
1.4 两种主流架构模式(初学者重点掌握)
|
架构模式 |
堆叠(Stacked)etcd 拓扑 |
外部(External)etcd 拓扑 |
|
部署方式 |
etcd 与 Master 组件(API Server 等)部署在同一节点 |
etcd 集群独立部署,与 Master 节点分离 |
|
优点 |
部署简单、资源需求低、配置简洁 |
隔离性强、性能优、故障域小(推荐生产环境) |
|
缺点 |
组件耦合度高,节点故障影响控制平面 + 存储 |
部署复杂、需要更多服务器资源 |
|
适用场景 |
测试环境、中小型集群(≤50 节点) |
生产环境、中大型集群(≥50 节点) |
|
信创适配 |
支持国产化芯片 / OS |
支持国产化芯片 / OS(推荐选型) |
2 核心配置
2.1 硬件配置推荐(信创环境适配)
2.1.1 节点数量要求
- Master 节点:≥3 个(高可用最小配置,推荐 3 个)
- Worker 节点:≥2 个(应用运行节点,可根据业务需求扩展)
- etcd 节点:外部 etcd 拓扑需≥3 个(存储集群,推荐与 Master 节点独立)
2.1.2 服务器规格(国产化服务器示例)
|
节点类型 |
推荐规格(鲲鹏 920 / 飞腾 2000+) |
用途说明 |
|
Master 节点 |
8 核 CPU + 32GB 内存 + 40GB ESSD 系统盘 + 100GB ESSD 数据盘 |
运行控制平面组件,需较高 CPU / 内存 |
|
Worker 节点 |
8 核 CPU + 16GB 内存 + 40GB ESSD 系统盘 + 200GB ESSD 数据盘 |
运行应用 Pod,需较大存储容量 |
|
etcd 节点(外部) |
4 核 CPU + 16GB 内存 + 200GB ESSD(IOPS≥10000) |
etcd 为 I/O 密集型,需高性能 SSD |
2.2 核心组件与作用
2.2.1 控制平面组件(Master 节点)
- kube-apiserver:集群 “入口网关”,提供 RESTful API,所有组件通信都需经过它(需负载均衡)。
- kube-controller-manager:集群 “控制器”,维护集群期望状态(如 Pod 副本数、节点健康),通过 Leader Election 机制确保仅 1 个活跃实例。
- kube-scheduler:集群 “调度器”,为新创建的 Pod 选择合适的 Worker 节点,同样通过 Leader Election 实现高可用。
2.2.2 高可用关键组件
- etcd 集群:分布式键值存储,保存集群所有状态数据(如 Pod 配置、用户权限),需 3 个节点实现高可用。
- 负载均衡器:
- HAProxy:软件负载均衡,分发 API Server 请求(端口 6443)到多个 Master 节点。
- Keepalived:为 HAProxy 提供虚拟 IP(VIP),实现 HAProxy 高可用(避免负载均衡器单点故障)。
- 容器运行时:containerd(推荐,Docker 已弃用),负责运行容器,需适配国产化架构(arm64/amd64)。
2.2.3 信创适配组件
- 国产化容器运行时:华为容器引擎、统信 containerd。
- 国产化负载均衡:开源 HAProxy(适配 arm64)、深信服硬件负载均衡(可选)。
- 部署工具:kt(适配信创环境,简化 arm64 架构部署)。
2.3 网络配置要求
2.3.1 端口开放清单(所有节点)
|
组件 |
端口范围 |
协议 |
用途 |
|
kube-apiserver |
6443 |
TCP |
集群 API 通信 |
|
etcd |
2379-2380 |
TCP |
etcd 集群通信 |
|
kubelet |
10250 |
TCP |
节点与控制平面通信 |
|
HAProxy |
6443(转发) |
TCP |
负载均衡 API Server 请求 |
|
Keepalived |
8200 |
TCP |
健康检查 |
|
应用 Pod |
30000-32767 |
TCP/UDP |
容器应用对外暴露端口 |
2.3.2 网络规划示例(VPC 环境)
- VPC 网段:192.168.1.0/24
- Master 节点 IP:192.168.1.10(master1)、192.168.1.11(master2)、192.168.1.12(master3)
- Worker 节点 IP:192.168.1.20(node1)、192.168.1.21(node2)
- etcd 节点 IP(外部):192.168.1.30(etcd1)、192.168.1.31(etcd2)、192.168.1.32(etcd3)
- 虚拟 IP(VIP):192.168.1.100(HAProxy 对外提供的统一入口)
3 基础实操(分步部署,不省略任何步骤)
3.1 前置条件
- 已准备 3 台 Master 节点、2 台 Worker 节点、3 台 etcd 节点(外部拓扑),均安装国产操作系统(如银河麒麟 V10)。
- 所有节点网络互通(同一 VPC / 局域网),可通过 SSH 登录。
- 服务器已挂载 ESSD 数据盘(推荐≥100GB)。
3.2 步骤 1:所有节点环境初始化(信创环境适配)
3.2.1 关闭防火墙与 SELinux
|
# 关闭防火墙(银河麒麟/统信UOS) sudo systemctl stop firewalld sudo systemctl disable firewalld # 关闭SELinux(永久生效) sudo setenforce 0 # 临时关闭 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 永久关闭 |
3.2.2 关闭 Swap 分区(K8s 强制要求)
|
sudo swapoff -a # 临时关闭 sudo sed -i '/ swap / s/^<inline_LaTeX_Formula>.*inline_LaTeX_Formula>$/#\1/g' /etc/fstab # 永久关闭(注释swap分区) |
3.2.3 配置内核参数(容器网络所需)
|
# 创建内核配置文件 cat < sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF # 加载模块 sudo modprobe overlay sudo modprobe br_netfilter # 配置网络参数 cat < tee /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 # 生效配置 sudo sysctl --system |
3.2.4 配置 hosts 文件(所有节点互认)
|
sudo vi /etc/hosts # 编辑hosts文件,添加以下内容(替换为实际IP) 192.168.1.10 master1 192.168.1.11 master2 192.168.1.12 master3 192.168.1.20 node1 192.168.1.21 node2 192.168.1.30 etcd1 192.168.1.31 etcd2 192.168.1.32 etcd3 192.168.1.100 k8s-vip # 虚拟IP |
3.2.5 安装依赖工具(信创环境适配)
|
# 银河麒麟/华为欧拉(yum) sudo yum install -y ipset ipvsadm wget curl socat conntrack-tools # 统信UOS(apt) sudo apt update && sudo apt install -y ipset ipvsadm wget curl socat conntrack |
3.3 步骤 2:部署 etcd 集群(外部拓扑,3 节点)
etcd 是集群 “数据库”,需先部署且确保高可用。
3.3.1 安装 etcd(所有 etcd 节点)
|
# 下载etcd(信创适配版本,以v3.5.10为例) wget https://github.com/etcd-io/etcd/releases/download/v3.5.10/etcd-v3.5.10-linux-arm64.tar.gz # arm64架构 # 若为amd64架构,替换为:etcd-v3.5.10-linux-amd64.tar.gz # 解压并安装 tar -zxvf etcd-v3.5.10-linux-arm64.tar.gz sudo mv etcd-v3.5.10-linux-arm64/etcd* /usr/local/bin/ # 创建etcd数据目录与配置目录 sudo mkdir -p /data/etcd /etc/etcd |
3.3.2 配置 etcd 集群(以 etcd1 为例,其他节点修改对应参数)
|
# 创建etcd配置文件 sudo vi /etc/etcd/etcd.conf |
添加以下内容(替换ETCD_NAME、ETCD_LISTEN_PEER_URLS、ETCD_LISTEN_CLIENT_URLS为当前节点信息):
|
ETCD_NAME="etcd1" # etcd2节点改为"etcd2",etcd3改为"etcd3" ETCD_DATA_DIR="/data/etcd" ETCD_LISTEN_PEER_URLS="https://192.168.1.30:2380" # 当前节点IP ETCD_LISTEN_CLIENT_URLS="https://192.168.1.30:2379,https://127.0.0.1:2379" ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.30:2379" ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.30:2380" ETCD_INITIAL_CLUSTER="etcd1=https://192.168.1.30:2380,etcd2=https://192.168.1.31:2380,etcd3=https://192.168.1.32:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-token" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_CERT_FILE="/etc/etcd/server.crt" ETCD_KEY_FILE="/etc/etcd/server.key" ETCD_TRUSTED_CA_FILE="/etc/etcd/ca.crt" ETCD_PEER_CERT_FILE="/etc/etcd/peer.crt" ETCD_PEER_KEY_FILE="/etc/etcd/peer.key" ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/ca.crt" |
3.3.3 生成 etcd 证书(任选一个 etcd 节点执行)
|
# 安装cfssl工具(证书生成) wget https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_arm64 wget https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_arm64 wget https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl-certinfo_1.6.4_linux_arm64 sudo chmod +x cfssl* sudo mv cfssl* /usr/local/bin/ # 创建证书配置文件 mkdir -p /etc/etcd/certs && cd /etc/etcd/certs # 生成CA证书 cat <.json { "signing": { "default": { "expiry": "87600h" }, "profiles": { "etcd": { "usages": ["signing", "key encipherment", "server auth", "client auth"], "expiry": "87600h" } } } } EOF cat < | tee ca-csr.json { "CN": "etcd-ca", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "O": "xinchuang", "OU": "k8s", "ST": "Beijing" } ] } EOF # 生成CA证书和密钥 cfssl gencert -initca ca-csr.json | cfssljson -bare ca # 生成etcd服务器证书 cat < | tee server-csr.json { "CN": "etcd-server", "hosts": [ "127.0.0.1", "192.168.1.30", "192.168.1.31", "192.168.1.32" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "O": "xinchuang", "OU": "k8s", "ST": "Beijing" } ] } EOF cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd server-csr.json | cfssljson -bare server # 生成etcdpeer证书 cat < | tee peer-csr.json { "CN": "etcd-peer", "hosts": [ "127.0.0.1", "192.168.1.30", "192.168.1.31", "192.168.1.32" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "O": "xinchuang", "OU": "k8s", "ST": "Beijing" } ] } EOF cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd peer-csr.json | cfssljson -bare peer # 复制证书到所有etcd节点 sudo scp ca.pem ca-key.pem server.pem server-key.pem peer.pem peer-key.pem root@etcd2:/etc/etcd/ sudo scp ca.pem ca-key.pem server.pem server-key.pem peer.pem peer-key.pem root@etcd3:/etc/etcd/ |
3.3.4 启动 etcd 集群(所有 etcd 节点)
|
# 创建etcd系统服务 sudo vi /usr/lib/systemd/system/etcd.service |
添加以下内容:
|
[Unit] Description=Etcd Server After=network.target [Service] Type=notify ExecStart=/usr/local/bin/etcd --config-file=/etc/etcd/etcd.conf Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target |
|
# 启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start etcd sudo systemctl enable etcd # 验证etcd集群状态(任意etcd节点) etcdctl --endpoints=https://192.168.1.30:2379,https://192.168.1.31:2379,https://192.168.1.32:2379 \ --ca-file=/etc/etcd/ca.pem \ --cert-file=/etc/etcd/server.pem \ --key-file=/etc/etcd/server.key \ endpoint health # 成功输出示例: # https://192.168.1.30:2379 is healthy: successfully committed proposal: took = 1.234ms # https://192.168.1.31:2379 is healthy: successfully committed proposal: took = 1.567ms # https://192.168.1.32:2379 is healthy: successfully committed proposal: took = 1.345ms |
3.4 步骤 3:部署负载均衡器(HAProxy+Keepalived,所有 Master 节点)
3.4.1 安装 HAProxy(负载均衡 API Server)
|
# 安装HAProxy sudo yum install -y haproxy # 银河麒麟/华为欧拉 # sudo apt install -y haproxy # 统信UOS # 配置HAProxy sudo vi /etc/haproxy/haproxy.cfg |
添加以下配置(替换为 Master 节点 IP):
|
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults mode tcp log global option tcplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend k8s-api bind *:6443 mode tcp option tcplog default_backend k8s-master-servers backend k8s-master-servers mode tcp option tcplog option tcp-check balance roundrobin server master1 192.168.1.10:6443 check fall 3 rise 2 server master2 192.168.1.11:6443 check fall 3 rise 2 server master3 192.168.1.12:6443 check fall 3 rise 2 |
|
# 启动HAProxy并设置开机自启 sudo systemctl start haproxy sudo systemctl enable haproxy sudo systemctl status haproxy # 验证状态,确保active |
3.4.2 安装 Keepalived(提供虚拟 IP)
|
# 安装Keepalived sudo yum install -y keepalived # 银河麒麟/华为欧拉 # sudo apt install -y keepalived # 统信UOS # 配置Keepalived(以master1为例,master2/master3修改priority和state) sudo vi /etc/keepalived/keepalived.conf |
添加以下配置(master1 为 MASTER,优先级 100;master2/master3 为 BACKUP,优先级 90/80):
|
! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_script chk_haproxy { script "/usr/bin/systemctl is-active haproxy" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER # master2/master3改为BACKUP interface eth0 # 替换为服务器实际网卡名(通过ip addr查看) virtual_router_id 51 priority 100 # master2改为90,master3改为80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 # 虚拟IP(VIP) } track_script { chk_haproxy } } |
|
# 启动Keepalived并设置开机自启 sudo systemctl start keepalived sudo systemctl enable keepalived sudo systemctl status keepalived # 验证虚拟IP(master1节点执行,应看到VIP已绑定) ip addr | grep 192.168.1.100 |
3.5 步骤 4:部署 K8s Master 节点(3 个节点)
3.5.1 安装容器运行时(containerd)
|
# 安装containerd(信创适配版本) sudo yum install -y containerd.io # 银河麒麟/华为欧拉 # sudo apt install -y containerd.io # 统信UOS # 配置containerd sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml # 修改配置(适配K8s,设置SystemdCgroup=true) sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml # 重启containerd并设置开机自启 sudo systemctl restart containerd sudo systemctl enable containerd |
3.5.2 配置 K8s YUM 源(信创镜像)
|
cat < sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF |
3.5.3 安装 K8s 组件(kubelet、kubeadm、kubectl)
|
# 安装指定版本(推荐1.26.x,稳定且信创适配好) sudo yum install -y kubelet-1.26.10 kubeadm-1.26.10 kubectl-1.26.10 --disableexcludes=kubernetes # 设置kubelet开机自启(暂不启动,等待初始化) sudo systemctl enable kubelet |
3.5.4 初始化第一个 Master 节点(master1)
|
# 初始化集群(替换VIP和etcd节点信息) sudo kubeadm init \ --control-plane-endpoint "192.168.1.100:6443" \ # 虚拟IP:端口 --upload-certs \ # 上传证书,用于添加其他Master节点 --pod-network-cidr=10.244.0.0/16 \ # Pod网络网段(后续部署Calico需一致) --service-cidr=10.96.0.0/12 \ # 服务网段 --etcd-servers=https://192.168.1.30:2379,https://192.168.1.31:2379,https://192.168.1.32:2379 \ # 外部etcd集群地址 --etcd-cafile=/etc/etcd/ca.pem \ --etcd-certfile=/etc/etcd/server.pem \ --etcd-keyfile=/etc/etcd/server.key # 初始化成功后,会输出以下关键信息(务必保存!): # 1. 配置kubectl的命令 # 2. 添加其他Master节点的命令(含证书密钥) # 3. 添加Worker节点的命令 |
3.5.5 配置 kubectl(master1 节点)
|
# 普通用户配置(推荐) mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 验证kubectl(应看到master1节点状态Ready) kubectl get nodes |
3.5.6 添加其他 Master 节点(master2、master3)
在 master2 和 master3 节点执行初始化成功后输出的 “添加控制平面节点” 命令(示例,需替换实际证书和 IP):
|
sudo kubeadm join 192.168.1.100:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ --control-plane \ --certificate-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
|
# 配置kubectl(master2、master3节点,重复3.5.5步骤) mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 验证所有Master节点(任意Master节点执行) kubectl get nodes # 成功输出示例(3个Master节点均为Ready): # NAME STATUS ROLES AGE VERSION # master1 Ready control-plane 30m v1.26.10 # master2 Ready control-plane 20m v1.26.10 # master3 Ready control-plane 15m v1.26.10 |
3.6 步骤 5:部署网络插件(Calico,任意 Master 节点)
K8s 集群需网络插件实现 Pod 间通信,推荐 Calico(信创适配好)。
|
# 下载Calico配置文件 wget https://docs.projectcalico.org/v3.26/manifests/calico.yaml # 修改Pod网络网段(与初始化时--pod-network-cidr一致) sudo sed -i 's/192.168.0.0\/16/10.244.0.0\/16/g' calico.yaml # 部署Calico kubectl apply -f calico.yaml # 验证Calico Pod状态(所有Pod需为Running) kubectl get pods -n kube-system | grep calico |
3.7 步骤 6:添加 Worker 节点(可选,扩展计算资源)
在 Worker 节点(node1、node2)执行初始化成功后输出的 “添加工作节点” 命令(示例):
|
sudo kubeadm join 192.168.1.100:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
|
# 验证Worker节点(Master节点执行) kubectl get nodes # 成功输出示例(新增node1、node2为Ready): # NAME STATUS ROLES AGE VERSION # master1 Ready control-plane 40m v1.26.10 # master2 Ready control-plane 30m v1.26.10 # master3 Ready control-plane 25m v1.26.10 # node1 Ready <none> 10m v1.26.10 # node2 Ready <none> 5m v1.26.10 |
3.8 步骤 7:高可用性测试(验证架构有效性)
3.8.1 故障转移测试(模拟 Master 节点故障)
|
# 1. 查看当前活跃的kube-controller-manager Leader(master1节点) kubectl get endpoints kube-controller-manager -n kube-system -o jsonpath='{.subsets[0].addresses[0].ip}' # 2. 停止master1节点的kube-controller-manager sudo systemctl stop kube-controller-manager # 3. 等待10秒后,再次查看Leader(应切换到master2或master3) kubectl get endpoints kube-controller-manager -n kube-system -o jsonpath='{.subsets[0].addresses[0].ip}' # 4. 恢复master1节点的kube-controller-manager sudo systemctl start kube-controller-manager |
3.8.2 负载均衡测试(验证 HAProxy)
|
# 查看API Server连接分布(master1节点) sudo netstat -anp | grep 6443 | grep ESTABLISHED # 应看到客户端连接均匀分布在3个Master节点 |
4 高阶用法
4.1 集群监控与告警(信创适配)
4.1.1 部署 Prometheus+Grafana(监控集群状态)
|
# 下载监控组件配置(信创优化版) git clone https://gitee.com/xinchuang-cloud/k8s-monitor.git cd k8s-monitor # 部署Prometheus kubectl apply -f prometheus/ # 部署Grafana kubectl apply -f grafana/ # 暴露Grafana服务(NodePort方式) kubectl expose deployment grafana -n monitoring --type=NodePort --port=3000 kubectl get svc grafana -n monitoring # 查看暴露的端口(如30008) |
- 访问地址:http://Worker节点IP:30008(默认账号密码:admin/admin)
- 导入 K8s 监控模板(ID:8588),可查看 Master 节点状态、etcd 集群健康度、Pod 运行状态。
4.1.2 配置告警(邮件 / 短信通知)
在 Grafana 中配置告警规则(如 Master 节点宕机、etcd 集群异常),对接国产化邮件服务器(如网易企业邮、自建 Postfix)或短信网关(如阿里云短信、华为云短信)。
4.2 集群备份与恢复(etcd 数据安全)
4.2.1 手动备份 etcd 数据
|
# 备份命令(任意Master节点执行) sudo ETCDCTL_API=3 etcdctl --endpoints=https://192.168.1.30:2379,https://192.168.1.31:2379,https://192.168.1.32:2379 \ --ca-file=/etc/etcd/ca.pem \ --cert-file=/etc/etcd/server.pem \ --key-file=/etc/etcd/server.key \ snapshot save /data/etcd-backup/etcd-snapshot-$(date +%Y%m%d%H%M%S).db |
4.2.2 自动备份(定时任务)
|
# 创建备份脚本 sudo vi /usr/local/bin/etcd-backup.sh |
添加以下内容:
|
#!/bin/bash BACKUP_DIR="/data/etcd-backup" DATE=$(date +%Y%m%d%H%M%S) ETCD_ENDPOINTS="https://192.168.1.30:2379,https://192.168.1.31:2379,https://192.168.1.32:2379" # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份 ETCDCTL_API=3 etcdctl --endpoints=$ETCD_ENDPOINTS \ --ca-file=/etc/etcd/ca.pem \ --cert-file=/etc/etcd/server.pem \ --key-file=/etc/etcd/server.key \ snapshot save $BACKUP_DIR/etcd-snapshot-$DATE.db # 保留最近7天的备份 find $BACKUP_DIR -name "etcd-snapshot-*.db" -mtime +7 -delete |
|
# 添加执行权限并设置定时任务(每天凌晨2点备份) sudo chmod +x /usr/local/bin/etcd-backup.sh sudo crontab -e # 添加:0 2 * * * /usr/local/bin/etcd-backup.sh |
4.3 集群升级(不中断业务)
信创环境推荐 “滚动升级”,避免集群停机:
|
# 1. 升级kubeadm(所有节点) sudo yum install -y kubeadm-1.27.5 --disableexcludes=kubernetes # 2. 验证升级计划(master1节点) sudo kubeadm upgrade plan # 3. 升级控制平面(master1节点) sudo kubeadm upgrade apply v1.27.5 # 4. 升级其他Master节点(master2、master3) sudo kubeadm upgrade node # 5. 升级kubelet和kubectl(所有节点) sudo yum install -y kubelet-1.27.5 kubectl-1.27.5 --disableexcludes=kubernetes sudo systemctl daemon-reload sudo systemctl restart kubelet # 6. 升级Worker节点(逐个升级,避免同时离线) sudo kubeadm upgrade node sudo yum install -y kubelet-1.27.5 --disableexcludes=kubernetes sudo systemctl daemon-reload sudo systemctl restart kubelet |
5 拓展建议
5.1 信创环境适配技巧
- 组件选型:优先选择信创目录内的组件(如华为容器引擎、统信 containerd、麒麟 etcd),避免兼容性问题。
- 架构优化:中大型集群(≥100 节点)推荐 “外部 etcd 拓扑 + 独立负载均衡节点”,提升性能和稳定性。
- 国产化工具:使用 kt 工具(信创适配版)简化部署,支持一键初始化、离线部署、arm64 架构适配。
5.2 常见问题排查(初学者必看)
5.2.1 Master 节点 NotReady
- 原因:Calico 网络插件未正常运行、kubelet 未启动。
- 解决:
|
# 查看kubelet日志 sudo journalctl -u kubelet -f # 重启Calico kubectl delete pods -n kube-system -l k8s-app=calico-node |
5.2.2 etcd 集群健康检查失败
- 原因:证书配置错误、节点网络不通。
- 解决:
|
# 检查etcd日志 sudo journalctl -u etcd -f # 验证etcd节点间网络(2379/2380端口) telnet 192.168.1.31 2379 |
5.2.3 虚拟 IP(VIP)未绑定
- 原因:Keepalived 配置错误、HAProxy 未启动。
- 解决:
|
# 查看Keepalived日志 sudo journalctl -u keepalived -f # 验证HAProxy状态 sudo systemctl status haproxy |
5.3 学习资源推荐
- 官方文档:Kubernetes 中文文档(https://kubernetes.io/zh-cn/docs/home/)、etcd 官方文档(https://etcd.io/docs/)。
- 信创适配:华为云容器服务文档(https://support.huaweicloud.com/cce/)、麒麟软件知识库(https://www.kylinos.cn/support/)。
- 实战课程:51CTO 学堂《信创 K8s 高可用集群部署实战》、CSDN《K8s 多主架构从入门到精通》。
5.4 生产环境最佳实践
- 节点隔离:Master 节点不运行应用 Pod,仅承担控制平面功能;etcd 节点独立部署,避免资源竞争。
- 安全加固:开启 API Server 认证授权、加密 etcd 数据、定期更换证书(建议 1 年)。
- 容量规划:根据应用需求预留 20% CPU / 内存资源,避免集群过载;etcd 存储预留 50% 空闲空间。
- 灾备方案:跨可用区部署 Master 节点(如政务云多区域),etcd 备份数据异地存储。
更多推荐




所有评论(0)