本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Kubernetes是当前主流的容器编排系统,kubeadm用于简化集群初始化与升级流程。本资料包详细讲解如何使用kubeadm搭建高可用Kubernetes 1.20.4集群,并将etcd集群独立部署在Kubernetes集群之外,以提升系统稳定性与可维护性。内容涵盖环境准备、控制平面初始化、多Master节点配置、etcd集群搭建、网络与证书管理等关键步骤,适合有一定Kubernetes基础的运维与开发人员进行实战学习。
kubeadm初始化高可用k8s1.20.4集群-etcd集群独立在k8s集群外详细笔记资料包

1. Kubernetes高可用集群的核心价值与部署前准备

1.1 Kubernetes高可用集群的设计目标与核心价值

Kubernetes 高可用(High Availability, HA)集群设计的核心目标是确保控制平面与数据平面的持续可用性与容错能力。在生产环境中,任何单点故障都可能导致服务中断,影响业务连续性。因此,构建一个具备多节点冗余、自动恢复机制的 Kubernetes HA 集群,是保障大规模容器编排系统稳定运行的基础。

高可用集群的价值体现在以下几个方面:

  • 服务连续性 :通过多 Master 节点和负载均衡技术,避免单点故障导致 API Server 不可用。
  • 弹性扩展 :支持灵活的节点扩展机制,满足业务增长时的资源调度需求。
  • 容灾能力 :在节点宕机或网络异常时,具备自动故障转移和数据同步机制,保障集群状态一致性。

1.2 部署前的关键准备工作

在部署 Kubernetes 高可用集群之前,必须进行充分的前期准备,以确保后续配置的顺利进行。主要包括以下几个方面:

1.2.1 服务器资源规划

部署高可用集群至少需要:

  • 3 个 Master 节点 :用于部署 API Server、Controller Manager、Scheduler 等核心组件,支持高可用与 Leader Election。
  • N 个工作节点(Worker Nodes) :用于运行业务容器。
  • 可选:独立 etcd 集群 :将 etcd 从 Master 节点中独立部署,提升性能与容灾能力。

每台节点建议配置如下资源(根据业务规模调整):

节点类型 CPU 内存 存储
Master / etcd 4核以上 8GB以上 100GB SSD
Worker 4核以上 16GB以上 200GB SSD

1.2.2 操作系统环境配置

所有节点应统一操作系统版本,推荐使用:

  • CentOS 7/8
  • Ubuntu 20.04 LTS / 22.04 LTS

基础环境配置包括:

  • 关闭防火墙(或开放相应端口):
    bash systemctl stop firewalld systemctl disable firewalld

  • 关闭 SELinux(临时关闭):
    bash setenforce 0

  • 修改 /etc/selinux/config 文件,设置 SELINUX=permissive (永久关闭)

  • 安装 Docker 与 containerd 容器运行时环境。

1.2.3 网络拓扑与通信规划

Kubernetes 集群依赖稳定的网络通信机制,部署前需明确以下网络配置:

  • 主机名与 DNS 解析 :所有节点需配置静态 IP 地址,并在 /etc/hosts 或 DNS 中配置主机名解析。
  • Pod 网络 CIDR :例如 10.244.0.0/16 (用于 CNI 插件分配 IP)。
  • Service 网络 CIDR :如 10.96.0.0/12 (用于 Service IP 分配)。
  • 负载均衡 IP(VIP) :用于 API Server 的高可用访问。

1.2.4 依赖组件安装

安装 Kubernetes 所需的核心组件包括:

  • kubeadm:集群初始化工具。
  • kubelet:节点代理,负责管理容器生命周期。
  • kubectl:命令行工具,用于集群管理。

安装命令(以 Ubuntu 为例):

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

完成上述准备工作后,即可进入后续章节的 etcd 部署与控制平面初始化工作,构建一个结构清晰、稳定可靠的 Kubernetes 高可用集群。

2. etcd集群的独立部署与运行机制

2.1 etcd在Kubernetes架构中的作用

2.1.1 etcd作为Kubernetes的分布式键值存储核心

etcd 是 Kubernetes 集群中用于存储所有集群状态和配置数据的核心组件。它是一个高度可用、分布式的键值对存储系统,专为一致性设计,广泛用于服务发现、配置共享以及分布式系统的协调。在 Kubernetes 中,etcd 作为集群的“唯一真相源”,保存了所有 API 对象的状态信息,包括 Pod、Service、Deployment、Node、ConfigMap 等。

etcd 采用 Raft 共识算法来确保数据的一致性和高可用性。Raft 机制使得 etcd 能够在多个节点之间进行数据复制,并在主节点失效时自动进行选举,确保服务不中断。

以下是一个 etcd 在 Kubernetes 架构中的基本工作流程图:

graph TD
    A[Kubernetes API Server] --> B[etcd]
    C[Controller Manager] --> B
    D[Scheduler] --> B
    E[kubelet] --> B
    F[etcd集群] --> G[节点1]
    F --> H[节点2]
    F --> I[节点3]
    J[客户端请求] --> A

如图所示,Kubernetes 的各个组件通过 API Server 与 etcd 进行数据交互。etcd 集群内部通过节点之间的 Raft 协议保持数据一致性。

2.1.2 etcd对集群状态和配置的管理机制

etcd 在 Kubernetes 中负责管理以下几类数据:

  • 集群状态信息 :包括节点状态、Pod 状态、资源配额等。
  • API对象定义 :包括 Service、Deployment、ConfigMap、Secret 等资源的定义。
  • 集群配置数据 :例如集群的网络配置、调度策略、RBAC 规则等。
  • 证书与密钥 :部分部署场景中,Kubernetes 会将 TLS 证书、Token、密钥等敏感信息存储在 etcd 中。

为了确保数据的高可用性与一致性,etcd 集群通常部署为奇数节点(如3、5、7节点),以支持 Raft 算法的选举机制。etcd 的数据结构是基于树状的键值结构,支持 Watch 机制,允许客户端监听特定键的变化,从而实现事件驱动的数据同步。

2.2 etcd集群的独立部署步骤

2.2.1 节点选择与资源分配

etcd 集群的节点通常建议部署在独立于 Kubernetes 控制平面之外的服务器上,以提高系统的隔离性和稳定性。每个 etcd 节点应满足以下基本资源要求:

资源类型 最低要求 推荐配置
CPU 2核 4核以上
内存 4GB 8GB以上
存储 50GB SSD 100GB SSD
网络 1Gbps 10Gbps

在部署时,建议至少使用三个节点以支持 Raft 的选举机制。节点之间应保持低延迟的网络连接,并且时间同步(使用 NTP)以避免 Raft 状态异常。

2.2.2 安全通信配置与证书生成

etcd 支持基于 TLS 的加密通信,以确保数据在节点之间传输的安全性。部署时应为每个节点生成对应的证书,包括:

  • CA 证书(用于签名)
  • etcd 节点证书(server.crt)
  • etcd 客户端证书(client.crt)

使用 cfssl 工具生成证书的示例如下:

# 生成 CA 配置文件 ca-config.json
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "etcd": {
        "usages": ["signing", "key encipherment", "server auth", "client auth"],
        "expiry": "87600h"
      }
    }
  }
}
# 生成 CA 证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

接着为每个节点生成证书请求:

# 生成 etcd 节点证书请求 etcd-csr.json
{
  "CN": "etcd",
  "hosts": [
    "localhost",
    "127.0.0.1",
    "192.168.1.10",  # etcd节点IP
    "192.168.1.11",
    "192.168.1.12"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "Shanghai",
      "O": "ETCD",
      "OU": "System"
    }
  ]
}
# 生成 etcd 证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-csr.json | cfssljson -bare etcd

生成的证书文件包括:

  • etcd.pem :节点证书
  • etcd-key.pem :私钥文件
  • ca.pem :CA 证书

2.2.3 启动etcd服务并验证集群健康状态

安装 etcd 后,可以通过配置文件或命令行方式启动服务。以下是使用 systemd 启动 etcd 的配置示例:

# /etc/systemd/system/etcd.service
[Unit]
Description=etcd
Documentation=https://github.com/coreos/etcd
Conflicts=etcd.service
After=network.target

[Service]
Type=notify
Environment=ETCD_UNSUPPORTED_ARCH=amd64
ExecStart=/usr/local/bin/etcd \
  --name etcd0 \
  --data-dir /var/lib/etcd \
  --listen-client-urls https://0.0.0.0:2379 \
  --advertise-client-urls https://192.168.1.10:2379 \
  --listen-peer-urls https://0.0.0.0:2380 \
  --initial-advertise-peer-urls https://192.168.1.10:2380 \
  --initial-cluster-token etcd-cluster-0 \
  --initial-cluster etcd0=https://192.168.1.10:2380,etcd1=https://192.168.1.11:2380,etcd2=https://192.168.1.12:2380 \
  --initial-cluster-state new \
  --cert-file=/etc/etcd/ssl/etcd.pem \
  --key-file=/etc/etcd/ssl/etcd-key.pem \
  --trusted-ca-file=/etc/etcd/ssl/ca.pem \
  --peer-cert-file=/etc/etcd/ssl/etcd.pem \
  --peer-key-file=/etc/etcd/ssl/etcd-key.pem \
  --peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \
  --peer-client-cert-auth \
  --client-cert-auth

Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

启动 etcd 服务:

systemctl daemon-reload
systemctl enable etcd
systemctl start etcd

验证 etcd 集群状态:

ETCDCTL_API=3 etcdctl \
  --cacert=/etc/etcd/ssl/ca.pem \
  --cert=/etc/etcd/ssl/etcd.pem \
  --key=/etc/etcd/ssl/etcd-key.pem \
  --endpoints=https://192.168.1.10:2379,https://192.168.1.11:2379,https://192.168.1.12:2379 \
  endpoint health

输出应类似如下内容,表示集群健康:

https://192.168.1.10:2379 is healthy: successfully committed proposal: took = 8.369047ms
https://192.168.1.11:2379 is healthy: successfully committed proposal: took = 9.120345ms
https://192.168.1.12:2379 is healthy: successfully committed proposal: took = 7.891234ms

2.3 etcd集群的高可用保障策略

2.3.1 多节点冗余设计与数据同步机制

etcd 集群采用 Raft 共识算法来实现多节点之间的数据同步和一致性保障。每个 etcd 节点在集群中可以处于以下三种状态之一:

  • Leader :负责处理客户端请求并协调数据写入。
  • Follower :接收 Leader 的日志复制请求,并响应心跳。
  • Candidate :在选举期间参与主节点竞选。

Raft 通过日志复制和心跳机制确保所有节点的数据一致性。当 Leader 节点失效时,Follower 节点会发起选举,重新选出新的 Leader,从而实现故障转移。

etcd 集群中数据写入的流程如下:

sequenceDiagram
    participant Client
    participant Leader
    participant Follower1
    participant Follower2

    Client->>Leader: 写请求
    Leader->>Follower1: 日志复制
    Leader->>Follower2: 日志复制
    Follower1-->>Leader: 成功响应
    Follower2-->>Leader: 成功响应
    Leader->>Client: 写入成功

2.3.2 etcd数据持久化与快照备份实践

etcd 的数据默认存储在 --data-dir 指定的目录中,包含 WAL(Write Ahead Log)日志和快照文件。WAL 文件记录了所有对 etcd 的修改操作,用于数据恢复。

快照备份可以通过 etcdctl snapshot save 命令进行:

ETCDCTL_API=3 etcdctl \
  --cacert=/etc/etcd/ssl/ca.pem \
  --cert=/etc/etcd/ssl/etcd.pem \
  --key=/etc/etcd/ssl/etcd-key.pem \
  --endpoints=https://192.168.1.10:2379 \
  snapshot save /backup/etcd-snapshot.db

恢复快照的操作如下:

ETCDCTL_API=3 etcdctl \
  --cacert=/etc/etcd/ssl/ca.pem \
  --cert=/etc/etcd/ssl/etcd.pem \
  --key=/etc/etcd/ssl/etcd-key.pem \
  snapshot restore /backup/etcd-snapshot.db \
  --data-dir=/var/lib/etcd-backup \
  --initial-cluster etcd0=https://192.168.1.10:2380,etcd1=https://192.168.1.11:2380,etcd2=https://192.168.1.12:2380 \
  --initial-cluster-token etcd-cluster-0 \
  --name etcd0

2.3.3 故障恢复与节点替换操作指南

当 etcd 集群中某个节点发生故障时,可以通过以下步骤进行恢复或替换:

故障节点恢复流程:
  1. 停止故障节点的 etcd 服务
    bash systemctl stop etcd

  2. 清理本地数据目录 (可选):
    bash rm -rf /var/lib/etcd

  3. 从快照恢复数据 (如上节所示)。

  4. 重启 etcd 服务
    bash systemctl start etcd

替换节点流程:
  1. 从集群中移除故障节点
    bash ETCDCTL_API=3 etcdctl \ --cacert=/etc/etcd/ssl/ca.pem \ --cert=/etc/etcd/ssl/etcd.pem \ --key=/etc/etcd/ssl/etcd-key.pem \ --endpoints=https://192.168.1.10:2379 \ member remove <member-id>

  2. 在新节点上部署 etcd 并加入集群
    bash etcd \ --name etcd3 \ --initial-cluster etcd0=https://192.168.1.10:2380,etcd1=https://192.168.1.11:2380,etcd3=https://192.168.1.13:2380 \ --initial-advertise-peer-urls https://192.168.1.13:2380 \ --listen-peer-urls https://0.0.0.0:2380 \ --listen-client-urls https://0.0.0.0:2379 \ --advertise-client-urls https://192.168.1.13:2379 \ --data-dir /var/lib/etcd \ --cert-file=/etc/etcd/ssl/etcd.pem \ --key-file=/etc/etcd/ssl/etcd-key.pem \ --trusted-ca-file=/etc/etcd/ssl/ca.pem \ --peer-cert-file=/etc/etcd/ssl/etcd.pem \ --peer-key-file=/etc/etcd/ssl/etcd-key.pem \ --peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \ --peer-client-cert-auth \ --client-cert-auth

  3. 验证新节点状态
    bash etcdctl --cacert=ca.pem --cert=etcd.pem --key=etcd-key.pem --endpoints=https://192.168.1.10:2379 member list

通过以上章节内容的详细阐述与实践操作指南,读者应能掌握 etcd 集群在 Kubernetes 高可用部署中的核心原理、独立部署流程以及高可用保障策略,为后续控制平面组件的部署打下坚实基础。

3. 基于kubeadm的Kubernetes控制平面初始化

Kubernetes 控制平面是整个集群的大脑,负责管理集群的状态、调度任务、处理 API 请求等核心功能。在高可用部署中,控制平面的初始化是整个部署流程中的关键环节。本章将围绕 kubeadm 工具,从其核心功能、初始化流程、高可用扩展机制等方面进行深入剖析,并通过具体的代码和配置示例,帮助读者掌握如何使用 kubeadm 完成 Kubernetes 控制平面的初始化和多节点扩展。

3.1 kubeadm工具的核心功能与适用场景

kubeadm 是 Kubernetes 官方提供的集群初始化工具,它简化了集群部署过程,适用于开发、测试以及生产环境。其核心目标是快速构建符合标准的 Kubernetes 集群。

3.1.1 kubeadm在集群初始化中的作用

kubeadm 提供了以下核心功能:

  • 初始化控制平面节点( kubeadm init
  • 添加工作节点( kubeadm join
  • 管理集群证书和配置文件
  • 支持多种网络插件集成
  • 提供集群升级支持( kubeadm upgrade

它通过调用底层组件(如 kubelet kapiserver )来完成集群初始化,同时确保集群结构的标准化。

3.1.2 kubeadm支持的高可用部署模式

kubeadm 支持以下两种高可用部署模式:

部署模式 特点 适用场景
单控制平面节点 简单易用,但存在单点故障风险 开发测试环境
多控制平面节点 支持多个 Master 节点,结合负载均衡实现高可用 生产环境

在多节点部署中, kubeadm 可通过 --control-plane-endpoint 参数指定负载均衡地址,并在后续添加控制平面节点时保持一致性。

3.2 初始化Kubernetes控制平面

本节将介绍使用 kubeadm init 初始化控制平面的全过程,包括参数配置、命令执行、组件启动等关键步骤。

3.2.1 配置初始化参数与证书策略

在初始化之前,建议通过 kubeadm config print init-defaults 查看默认配置,并根据实际需求修改配置文件(如 kubeadm.yaml ):

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
bootstrapTokens:
  - token: "9a08jv.c0ij0123456789"
nodeRegistration:
  name: "master-node"
  criSocket: "/run/containerd/containerd.sock"
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.0
controlPlaneEndpoint: "192.168.1.100:6443"
networking:
  podSubnet: "10.244.0.0/16"
  serviceSubnet: "10.96.0.0/12"

参数说明:

  • kubernetesVersion :指定 Kubernetes 版本。
  • controlPlaneEndpoint :指定控制平面的统一访问地址(负载均衡器地址)。
  • podSubnet :Pod 网络 CIDR,需与后续 CNI 插件配置一致。
  • criSocket :指定容器运行时的 socket 路径。

3.2.2 执行kubeadm init命令并分析输出日志

执行以下命令初始化控制平面:

sudo kubeadm init --config kubeadm.yaml

输出示例片段如下:

[init] Using Kubernetes version: v1.28.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[kubeconfig] Writing "admin.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[etcd] Creating static Pod manifest for local etcd
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests".
[apiclient] All control plane components are healthy after 23.456s
[upload-config] Storing the configuration in ConfigMap "kubeadm-config" in the "kube-system" namespace
[kubelet] Creating a ConfigMap "kubelet-config" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs to upload certificates to the cluster
[mark-control-plane] Marking the node master-node as control-plane by adding the label "node-role.kubernetes.io/control-plane" and taint "node-role.kubernetes.io/control-plane:NoSchedule"
[bootstrap-token] Using token: 9a08jv.c0ij0123456789
[bootstrap-token] Configured RBAC rules to allow the node bootstrap token to post CSRs in order for nodes to join the cluster
[bootstrap-token] Configured RBAC rules to allow the node bootstrap token to list and watch nodes
[bootstrap-token] Created the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes master has initialized successfully!

关键日志分析:

  • [preflight] :预检阶段,检查系统依赖、端口、镜像等是否满足要求。
  • [certs] :生成 TLS 证书,用于组件间通信。
  • [control-plane] :生成静态 Pod 配置文件,部署 kube-apiserver、kube-controller-manager、kube-scheduler。
  • [addons] :部署 CoreDNS、kube-proxy 等核心组件。

3.2.3 控制平面组件的启动与状态检查

初始化完成后,可以通过以下命令检查组件状态:

systemctl status kubelet
kubectl get nodes
kubectl get pods -n kube-system

输出示例:

NAME         STATUS   ROLES           AGE   VERSION
master-node  Ready    control-plane   5m    v1.28.0
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
kube-system   coredns-5644d7b6d9-2xqkl        1/1     Running   0          5m
kube-system   kube-apiserver-master-node       1/1     Running   0          5m
kube-system   kube-controller-manager-master-node 1/1 Running   0          5m
kube-system   kube-proxy-42q9f                 1/1     Running   0          5m
kube-system   kube-scheduler-master-node       1/1     Running   0          5m

3.3 高可用模式下的控制平面扩展

在高可用部署中,通常需要部署多个控制平面节点,并通过负载均衡实现访问统一。 kubeadm 支持在已有集群基础上添加新的控制平面节点。

3.3.1 多Master节点的添加流程

在已有集群的基础上添加新 Master 节点的步骤如下:

  1. 在新节点上安装 Kubernetes 组件(kubelet、kubeadm、kubectl)
  2. 执行以下命令加入控制平面:
sudo kubeadm join 192.168.1.100:6443 \
  --token 9a08jv.c0ij0123456789 \
  --discovery-token-ca-cert-hash sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890ab \
  --control-plane
  1. 等待新节点加入后,检查节点状态:
kubectl get nodes

输出示例:

NAME          STATUS   ROLES           AGE   VERSION
master-node   Ready    control-plane   1h    v1.28.0
master-node2  Ready    control-plane   5m    v1.28.0

3.3.2 API Server的负载均衡配置

在多 Master 架构下,API Server 的访问应通过负载均衡器统一入口访问。常见方案包括:

负载均衡器 说明 优点
HAProxy 轻量级 TCP/HTTP 负载均衡器 部署简单,性能高
Keepalived 实现虚拟 IP(VIP)漂移 支持高可用
Nginx 支持 HTTP/HTTPS 代理 功能丰富
云服务商 LB 如 AWS NLB、阿里云 SLB 易于集成云环境

HAProxy 配置示例:

frontend kubernetes
    bind *:6443
    mode tcp
    option tcplog
    default_backend k8s-masters

backend k8s-masters
    mode tcp
    balance roundrobin
    server master-node 192.168.1.101:6443 check
    server master-node2 192.168.1.102:6443 check

3.3.3 控制平面节点的健康检查与自动恢复

Kubernetes 自带健康检查机制,通过以下组件实现:

  • kube-controller-manager :负责节点状态同步与调度
  • kube-scheduler :负责 Pod 调度与故障转移
  • etcd :负责状态一致性与数据持久化

健康检查流程图:

graph TD
    A[API Server] --> B(kube-controller-manager)
    A --> C(kube-scheduler)
    B --> D[节点健康状态检查]
    C --> E[Pod调度与容错]
    D --> F{节点是否离线?}
    F -->|是| G[标记节点为NotReady]
    G --> H[将Pod重新调度到其他节点]
    F -->|否| I[保持正常状态]

自动恢复机制:

  • kubelet 定期上报节点状态
  • controller-manager 检测节点异常后标记为 NotReady
  • scheduler 将原节点上的 Pod 调度到其他健康节点

总结

本章详细介绍了使用 kubeadm 初始化 Kubernetes 控制平面的全过程,包括配置文件编写、初始化命令执行、组件状态检查等核心操作。同时探讨了在高可用架构下如何添加控制平面节点、配置 API Server 负载均衡、以及健康检查与自动恢复机制。这些内容为后续的集群扩展与运维打下了坚实基础,也为构建生产级 Kubernetes 高可用集群提供了实践指导。

4. 负载均衡与多节点配置实践

在Kubernetes高可用集群中,负载均衡器与节点配置的正确部署是保障集群稳定运行的关键。负载均衡器负责将客户端请求合理分配到多个API Server节点,避免单点故障;而多Master节点与工作节点的加入流程则决定了集群的扩展性与高可用能力。本章将围绕负载均衡器的选型与部署、多Master节点的配置与同步、以及工作节点的加入与管理展开详细实践操作,帮助读者构建一个真正具备高可用能力的Kubernetes集群。

4.1 负载均衡器的选型与部署

在Kubernetes高可用集群中,API Server作为控制平面的核心组件,承担着接收客户端请求、与etcd交互、调度Pod等关键职责。为了确保API Server的高可用性和负载分担能力,必须引入负载均衡器。本节将从负载均衡器的选型对比、部署实践两个方面进行深入讲解。

4.1.1 常见负载均衡方案对比(如HAProxy、Keepalived等)

在Kubernetes环境中,常见的负载均衡方案包括 HAProxy Keepalived Nginx 以及云厂商提供的负载均衡服务(如AWS ELB、GCP Load Balancer)等。它们各自适用于不同的部署场景,具体对比如下:

方案 类型 适用场景 优点 缺点
HAProxy 软件负载均衡 本地数据中心、私有云 高性能、灵活配置、社区支持好 配置复杂,需维护健康检查机制
Keepalived 虚拟IP + VRRP 需要VIP漂移实现高可用 高可用性强、配置简单 不具备轮询负载能力
Nginx 反向代理 Web流量代理、简单负载均衡 简单易用、支持HTTP/HTTPS 功能不如HAProxy全面
云厂商LB 硬件/托管服务 公有云环境部署 自动伸缩、高可用、管理简单 成本高、依赖云平台

推荐实践
- 对于本地部署或混合云场景,推荐使用 HAProxy + Keepalived 组合,既能实现负载均衡又能保证VIP的高可用。
- 对于公有云环境,可直接使用平台提供的负载均衡器服务,简化部署与维护成本。

4.1.2 实现Kubernetes API Server的高可用访问

以下以 HAProxy + Keepalived 组合为例,演示如何部署负载均衡器以实现Kubernetes API Server的高可用访问。

1. 环境准备
  • 两台服务器作为负载均衡节点(LB1 和 LB2)
  • 至少两个Kubernetes Master节点(master1、master2)
  • 操作系统:Ubuntu 20.04 LTS 或 CentOS 8
2. 安装HAProxy与Keepalived
# Ubuntu系统安装命令
sudo apt update
sudo apt install haproxy keepalived -y
3. 配置HAProxy(/etc/haproxy/haproxy.cfg)
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    mode http
    log global
    option httplog
    option dontlognull
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms

frontend kubernetes
    bind *:6443
    default_backend k8s-masters

backend k8s-masters
    balance roundrobin
    server master1 192.168.1.10:6443 check
    server master2 192.168.1.11:6443 check
4. 配置Keepalived(/etc/keepalived/keepalived.conf)
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

注意 :在LB2节点中,将 state MASTER 改为 state BACKUP priority 设置为90。

5. 启动服务并设置开机自启
sudo systemctl enable haproxy --now
sudo systemctl enable keepalived --now
6. 验证负载均衡与VIP漂移
  • 查看VIP是否生效:
ip addr show eth0
  • 使用 curl 测试API Server访问:
curl https://192.168.1.100:6443/version --insecure
代码逻辑分析与参数说明
  • frontend kubernetes :定义前端监听6443端口(Kubernetes API默认端口)。
  • backend k8s-masters :定义后端真实API Server节点,采用 roundrobin 轮询策略。
  • server master1 192.168.1.10:6443 check :每个节点配置了健康检查机制,确保只将流量转发到可用节点。
  • virtual_ipaddress :定义虚拟IP地址,用于对外提供统一访问入口。

4.1.3 小结

通过本节的实践操作,我们完成了HAProxy与Keepalived的部署与配置,实现了Kubernetes API Server的高可用访问。这种负载均衡方案不仅适用于Kubernetes,也可用于其他需要高可用入口的服务。

4.2 多Master节点的配置与同步

在Kubernetes高可用集群中,单个Master节点存在单点故障风险。为提升集群的可用性,通常会部署多个Master节点,并通过etcd集群与API Server的负载均衡实现控制平面的冗余设计。本节将重点讲解多Master节点的加入流程、状态同步机制,以及etcd与API Server之间的协同工作方式。

4.2.1 节点加入控制平面的认证机制

Kubernetes使用Token和证书机制来实现节点加入控制平面的认证。在初始化第一个Master节点时, kubeadm init 会生成一个Token和CA证书哈希值,用于后续节点的加入。

生成Token与证书哈希
kubeadm token generate
# 输出示例:abcdef.0123456789abcdef

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 输出示例:70:6c:0b:8d:9a:ee:65:55:0b:47:6d:68:8c:5d:41:7a:49:4c:45:4b:8b:31:64:27:4c:5d:3f:1e:3a:4b:5d:6e
加入Master节点的命令
kubeadm join 192.168.1.100:6443 \
  --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:706c0b8d9aee65550b476d688c5d417a494c454b8b3164274c5d3f1e3a4b5d6e \
  --control-plane

4.2.2 Master节点间的状态同步与选举机制

在多Master节点环境中,Kubernetes通过以下机制实现状态同步与主节点选举:

1. etcd集群的多节点冗余
  • etcd集群通常由3或5个节点组成,采用Raft共识算法进行数据一致性同步。
  • 每个Master节点上的API Server连接到etcd集群,共享集群状态。
2. API Server的无状态设计
  • API Server本身是无状态的,所有数据存储在etcd中。
  • 多个API Server通过负载均衡器对外提供服务,请求可被任意API Server处理。
3. 控制器管理器与调度器的Leader Election机制
  • kube-controller-manager kube-scheduler 默认运行多个副本,但只有一个实例处于Active状态。
  • 通过向etcd写入Lease和Endpoint对象实现Leader选举。

配置示例 :在部署YAML文件中启用Leader Election

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-controller-manager
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: kube-controller-manager
  template:
    metadata:
      labels:
        k8s-app: kube-controller-manager
    spec:
      containers:
        - name: kube-controller-manager
          image: k8s.gcr.io/kube-controller-manager:v1.25.0
          args:
            - --leader-elect=true
            - --leader-elect-resource-namespace=kube-system

4.2.3 高可用集群中etcd与API Server的协同工作

etcd与API Server是Kubernetes控制平面中最核心的两个组件,它们之间的协同机制如下:

etcd与API Server交互流程图(mermaid)
graph TD
    A[客户端请求] --> B(API Server)
    B --> C{操作类型}
    C -->|读操作| D[etcd]
    C -->|写操作| E[etcd]
    D --> F[返回数据]
    E --> G[写入数据]
    G --> H[通知其他API Server]
    H --> I[缓存更新]
关键机制说明
  • 读写操作一致性 :API Server通过etcd的watch机制监听数据变更,确保本地缓存一致性。
  • Leader选举与同步 :etcd集群内部通过Raft算法保证数据一致性,API Server通过etcd获取最新集群状态。
  • 故障转移 :当某个API Server节点宕机,负载均衡器自动将其从后端移除,不影响整体服务。

4.3 工作节点的加入与配置管理

在完成控制平面的高可用配置后,下一步是将工作节点(Worker Node)加入集群,并进行网络与运行时配置。本节将详细介绍如何生成加入令牌、配置CNI网络插件以及节点状态监控与异常处理。

4.3.1 生成并分发工作节点加入令牌

Kubernetes使用Token机制控制节点加入权限,管理员可生成Token并设定有效期。

生成Token
kubeadm token create --print-join-command
# 输出示例:
# kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:706c0b8d9aee65550b476d688c5d417a494c454b8b3164274c5d3f1e3a4b5d6e
设置Token有效期
kubeadm token create --ttl 2h

4.3.2 工作节点网络与运行时配置

1. 安装容器运行时(如containerd)
# Ubuntu安装containerd
sudo apt install containerd -y
sudo systemctl enable containerd --now
2. 安装CNI插件(如Calico)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
3. 配置kubelet并启动
sudo kubeadm join 192.168.1.100:6443 \
  --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:706c0b8d9aee65550b476d688c5d417a494c454b8b3164274c5d3f1e3a4b5d6e

4.3.3 节点状态监控与异常处理

查看节点状态
kubectl get nodes
查看节点详细信息
kubectl describe node <node-name>
常见问题排查
  • 节点NotReady :检查kubelet状态、网络插件是否正常、磁盘空间是否不足。
  • Pod无法调度 :检查节点标签、污点配置、资源配额等。
自动驱逐与恢复配置
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: my-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: my-app

小结

本章详细讲解了负载均衡器的选型与部署、多Master节点的配置与同步机制、以及工作节点的加入与管理流程。通过HAProxy + Keepalived实现API Server的高可用访问,结合kubeadm的join命令完成多节点的加入流程,并通过CNI插件配置网络环境,最终实现一个具备高可用特性的Kubernetes集群。

5. 网络通信与安全配置详解

在Kubernetes高可用集群中,网络通信和安全配置是确保服务稳定运行与数据安全的关键环节。本章将围绕Pod网络插件的选择与部署、集群通信安全与证书管理、以及常见网络故障的排查方法展开深入讲解,帮助读者构建一个安全、稳定、高效的Kubernetes网络环境。

5.1 Pod网络插件的选择与部署

Kubernetes使用容器网络接口(CNI)来实现Pod之间的网络互通,而Pod网络插件是CNI的具体实现。选择合适的网络插件对集群的性能、安全性和可扩展性有直接影响。

5.1.1 常见CNI插件(如Calico、Flannel)对比

在Kubernetes生态系统中,常见的CNI插件包括 Calico Flannel Weave Net Cilium 等。以下是它们的主要特点对比:

插件名称 网络模型 性能 安全性 易用性 支持网络策略
Calico BGP路由 高(支持NetworkPolicy) 中等
Flannel VXLAN/Host-GW 中等 中等(默认不支持策略) ❌(需配合其他插件)
Weave Net Overlay 中等 中等 ✅(原生支持)
Cilium eBPF 高(支持L3-L7策略) 中等

选择建议
- 如果需要高安全性与网络策略控制,推荐使用 Calico Cilium
- 如果追求简单部署和快速上手, Flannel 是不错的选择。
- 如果希望结合eBPF技术提升网络性能并支持现代策略模型, Cilium 是理想选择。

5.1.2 CNI插件的安装与配置实践

Calico 为例,介绍其安装与配置流程:

安装步骤(使用官方manifest):
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml

该命令将自动部署Calico的各个组件,包括:
- calico-node :运行在每个节点上,负责Pod网络接口管理。
- calico-kube-controllers :负责Kubernetes资源的同步。
- calico-typha (可选):用于大规模集群的代理服务。

配置说明:

Calico默认使用 bird 实现BGP路由协议,节点之间自动建立BGP连接进行路由同步。如需自定义配置,可修改 calico.yaml 文件中的 ConfigMap

kind: ConfigMap
apiVersion: v1
metadata:
  name: calico-config
  namespace: kube-system
data:
  typha_service_name: "none"
  veth_mtu: "1440"
  calico_backend: "bird"
  • typha_service_name :是否启用Typha服务(用于大规模集群)。
  • veth_mtu :虚拟以太网设备的MTU值,影响网络性能。
  • calico_backend :后端协议选择(bird表示BGP)。
验证安装:
kubectl get pods -n kube-system -l k8s-app=calico-node
kubectl get nodes

确保所有节点上的 calico-node 状态为 Running ,且节点状态为 Ready

5.1.3 网络策略的制定与隔离机制

Calico支持Kubernetes的 NetworkPolicy API,允许定义基于标签的网络访问控制策略。

示例:限制Pod之间的访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: default
spec:
  podSelector: {}
  ingress: []
  policyTypes:
  - Ingress

该策略将拒绝所有进入 default 命名空间中Pod的流量。

示例:允许特定标签的Pod访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-backend
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
  policyTypes:
  - Ingress

该策略允许带有标签 app: frontend 的Pod访问带有 app: backend 标签的Pod。

策略验证:
kubectl apply -f network-policy.yaml
kubectl get networkpolicy -n default

确保策略已成功应用,并测试Pod之间的网络连通性变化。

5.2 集群通信安全与证书管理

Kubernetes集群的通信安全依赖于强大的TLS证书体系,保障API Server、etcd、kubelet等核心组件之间的通信加密和身份验证。

5.2.1 Kubernetes证书体系概述

Kubernetes使用X.509证书来实现组件间的双向TLS认证,主要包括以下角色:

组件 用途 证书类型
API Server 接收客户端请求 Server Cert
kubelet 运行在节点上,与API Server通信 Client Cert
etcd 分布式键值存储 Server & Client Cert
kube-proxy 代理Pod流量 Client Cert
用户 kubectl 用户 Client Cert

证书的颁发通常由 Kubernetes CA(Certificate Authority) 负责,也可以使用外部CA(如Vault)进行集中管理。

5.2.2 自签名证书的生成与更新策略

以生成API Server证书为例,展示如何使用 openssl 工具生成自签名证书:

生成CA证书:
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/CN=kubernetes-ca"
生成API Server证书:
openssl genrsa -out apiserver.key 2048
openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=kubernetes" -addext "subjectAltName = DNS:kubernetes, DNS:kubernetes.default, IP:10.96.0.1"
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver.crt -days 365 -extfile <(printf "subjectAltName=DNS:kubernetes,DNS:kubernetes.default,IP:10.96.0.1")
  • CN :Common Name,指定证书主体名称。
  • subjectAltName :扩展字段,定义SAN(Subject Alternative Name),确保证书可被多主机名或IP访问。
证书更新策略:
  1. 证书有效期管理 :建议设置较短的有效期(如90天),通过自动化工具(如cert-manager)进行自动续签。
  2. 滚动更新 :更新证书时,先在新节点上应用新证书,再逐步替换旧证书,避免服务中断。
  3. 证书监控 :使用Prometheus + kube-state-metrics监控证书过期时间,提前预警。

5.2.3 TLS通信的配置与安全加固

Kubernetes组件之间通信默认启用TLS,但需要正确配置以保证安全性。

启用API Server的HTTPS:

kubeadm 初始化时,默认启用HTTPS。若手动部署,需配置 --tls-cert-file --tls-private-key-file

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
apiServer:
  certSANs:
  - "kubernetes.example.com"
  extraArgs:
    tls-cert-file: /etc/kubernetes/pki/apiserver.crt
    tls-private-key-file: /etc/kubernetes/pki/apiserver.key
kubelet TLS配置:

kubelet使用 --client-ca-file 参数指定CA证书路径:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
clientCAFile: /etc/kubernetes/pki/ca.crt
安全加固建议:
  • 启用RBAC :限制API访问权限,防止越权操作。
  • 禁用HTTP端口 :确保所有组件仅通过HTTPS通信。
  • 启用审计日志 :记录所有API请求,便于追踪安全事件。
  • 启用加密Secrets :使用 EncryptionConfiguration 对Secret数据加密。

5.3 高可用集群中的网络故障排查

在高可用Kubernetes集群中,网络问题可能涉及多个层级,包括Pod网络、服务发现、DNS解析等。掌握基本的排查方法至关重要。

5.3.1 网络连通性测试与日志分析

测试Pod之间的网络连通性:
kubectl exec -it <pod1-name> -- ping <pod2-ip>
kubectl exec -it <pod1-name> -- curl http://<service-ip>:<port>
查看网络插件日志:
kubectl logs -n kube-system <calico-node-pod-name>
journalctl -u kubelet -f
使用 tcpdump 抓包分析:
kubectl debug node/<node-name> -it --image=nicolaka/netshoot
tcpdump -i eth0 host <target-ip>

5.3.2 DNS解析异常与Pod通信问题排查

检查CoreDNS状态:
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl logs <coredns-pod-name> -n kube-system
测试DNS解析:
kubectl exec -it <pod-name> -- nslookup kubernetes.default
kubectl exec -it <pod-name> -- dig @10.96.0.10 kubernetes.default
常见问题排查流程图(Mermaid):
graph TD
    A[网络不通] --> B{Pod内部网络}
    B -->|是| C[检查CNI插件状态]
    B -->|否| D{跨节点网络}
    D -->|是| E[检查路由表和BGP状态]
    D -->|否| F{DNS解析}
    F -->|失败| G[检查CoreDNS Pod状态]
    F -->|成功| H[检查服务配置与Endpoints]

提示 :在排查过程中,优先从网络连通性开始,再逐步深入到服务配置、DNS解析等层级。

本章通过深入分析Pod网络插件的选择与部署、集群通信安全机制、以及网络故障排查方法,为构建一个安全、稳定的Kubernetes高可用集群提供了全面指导。在实际部署中,建议结合具体业务需求选择合适的网络插件,并持续优化安全策略与网络管理流程。

6. 集群健康检查与自动化运维实践

在Kubernetes高可用集群的部署完成后,运维工作的核心任务之一就是确保集群的持续稳定运行。本章将深入探讨集群的健康检查机制、自动化运维策略以及版本升级与维护实践,帮助读者构建一个具备自愈能力、可扩展性强、安全可控的生产级Kubernetes平台。

6.1 集群状态监控与健康检查机制

Kubernetes内置了多个用于健康检查和状态监控的组件,同时结合第三方监控工具可以实现更全面的可视化管理。

6.1.1 Kubernetes内置健康检查组件

  • kube-controller-manager :负责集群状态的协调,如Node Controller负责检测节点是否存活。
  • kube-scheduler :负责调度Pod到健康的节点上。
  • kubelet :运行在每个节点上,负责上报节点状态和Pod运行状态。

示例:查看节点状态命令

kubectl get nodes

输出示例:

NAME     STATUS   ROLES    AGE   VERSION
node-1   Ready    <none>   2d    v1.26.3
node-2   Ready    <none>   2d    v1.26.3

参数说明:
- STATUS :表示节点当前状态, Ready 为正常, NotReady 可能存在问题。
- ROLES :节点角色,如Master、Worker等。

6.1.2 利用Prometheus与Grafana构建可视化监控体系

Prometheus 是一个强大的时间序列数据库,常用于Kubernetes监控。Grafana则用于数据可视化。

部署Prometheus Operator示例:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack

Grafana访问方式:

kubectl port-forward svc/prometheus-grafana 3000

访问 http://localhost:3000 即可进入Grafana界面,使用默认账号密码 admin/prom-operator 登录。

图表示例(Grafana Dashboard):
- 节点CPU、内存使用率
- Pod重启次数
- API Server请求延迟
- etcd写入延迟等关键指标

通过可视化监控,可以快速定位异常节点或服务,及时响应潜在问题。

6.2 自动化运维与故障自愈机制

为了提升Kubernetes集群的稳定性与可靠性,自动化运维和故障自愈机制是不可或缺的。

6.2.1 使用Operator实现自动化运维

Operator 是一种 Kubernetes 原生的自动化运维模式,用于管理复杂应用的生命周期。

以 etcd-operator 为例:

  1. 安装 etcd-operator(基于Helm):
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install etcd bitnami/etcd
  1. Operator将自动管理etcd集群的创建、扩容、故障恢复等操作。

Operator优势:
- 自动化部署和升级
- 故障检测与自愈
- 状态管理与一致性保障

6.2.2 自动修复策略配置与节点驱逐机制

Kubernetes内置了自动修复机制,例如:

  • PodDisruptionBudget :限制可以同时中断的Pod数量。
  • Node Affinity/Taint & Toleration :控制Pod调度策略。
  • Eviction API :在节点异常时自动触发Pod迁移。

示例:配置PodDisruptionBudget(PDB)

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: app-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: myapp

说明:
- 保证至少有两个Pod可用,防止因滚动更新或节点故障导致服务中断。

6.2.3 日志收集与分析系统部署(如ELK Stack)

ELK(Elasticsearch + Logstash + Kibana)是常用的日志分析解决方案。

部署Elastic Stack示例(使用Helm):

helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch
helm install kibana elastic/kibana
helm install logstash elastic/logstash

日志采集方式:
- 使用Filebeat采集节点日志
- 使用Fluentd采集容器日志并发送至Logstash
- 数据最终写入Elasticsearch,通过Kibana进行可视化查询

Kibana查询示例:
- 过滤某个Pod的错误日志
- 查看API Server请求失败次数
- 分析etcd操作延迟日志

日志系统的建设是自动化运维的重要组成部分,能帮助快速定位问题根源。

6.3 高可用集群的持续维护与升级

Kubernetes是一个持续演进的平台,定期维护和升级是保障集群安全与性能的关键。

6.3.1 Kubernetes版本升级策略与操作步骤

Kubernetes建议按小版本逐步升级,避免跳版本带来的兼容性问题。

升级步骤示例:

  1. 升级kubeadm工具:
sudo apt-get update && sudo apt-get install -y kubeadm=1.27.0-00
  1. 执行控制平面升级:
sudo kubeadm upgrade apply v1.27.0
  1. 升级kubelet和kubectl:
sudo apt-get install -y kubelet=1.27.0-00 kubectl=1.27.0-00
sudo systemctl restart kubelet
  1. 升级工作节点:
kubectl drain <node-name> --ignore-daemonsets
ssh <node-name> "sudo apt-get install -y kubelet=1.27.0-00 && sudo systemctl restart kubelet"
kubectl uncordon <node-name>

6.3.2 etcd集群的定期备份与恢复演练

etcd是集群的核心,必须定期备份并演练恢复流程。

使用etcdctl进行备份:

ETCDCTL_API=3 etcdctl \
  --endpoints=https://<etcd-ip>:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot save /opt/etcd-backup.db

恢复etcd快照:

ETCDCTL_API=3 etcdctl \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot restore /opt/etcd-backup.db

建议每月进行一次etcd备份恢复演练,确保灾难恢复能力。

6.3.3 安全补丁更新与权限审计实践

定期更新操作系统和容器镜像的安全补丁,并进行权限审计。

安全加固建议:
- 使用 kube-bench 进行CIS合规检查
- 配置RBAC策略限制用户权限
- 定期检查 kubectl get events 和审计日志

示例:配置审计日志记录
kube-apiserver 配置中添加以下参数:

--audit-log-path=/var/log/kube-apiserver-audit.log
--audit-log-maxage=30
--audit-log-maxbackup=3
--audit-log-maxsize=100

审计日志示例内容:

{
  "user": {"username": "admin"},
  "verb": "create",
  "resource": {"resource": "pods", "namespace": "default"},
  "status": {"code": 201}
}

通过审计日志可以追溯操作记录,提升集群安全性。

本章通过健康检查、自动化运维与集群维护三个方面,详细介绍了高可用Kubernetes集群的运维管理方法,为后续的稳定性保障与持续演进打下坚实基础。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Kubernetes是当前主流的容器编排系统,kubeadm用于简化集群初始化与升级流程。本资料包详细讲解如何使用kubeadm搭建高可用Kubernetes 1.20.4集群,并将etcd集群独立部署在Kubernetes集群之外,以提升系统稳定性与可维护性。内容涵盖环境准备、控制平面初始化、多Master节点配置、etcd集群搭建、网络与证书管理等关键步骤,适合有一定Kubernetes基础的运维与开发人员进行实战学习。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐