欢迎光临
我们一直在努力

信创 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_NAMEETCD_LISTEN_PEER_URLSETCD_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)
    未经允许不得转载:171主机测评 » 信创 Kubernetes 多主高可用架构完全指南(初学者版)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址