一、架构(3 Master 高可用)

前提:


二、所有节点统一初始化(3 Master + 所有 Worker 都执行)

# 1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 2. 关闭 SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 3. 关闭 swap(必须关)
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 4. 内核参数(桥接、流量转发)
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

# 5. 安装 docker/containerd(这里用 containerd)
yum install -y containerd.io
systemctl enable --now containerd

# 6. 添加 k8s 源
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

# 7. 安装 kubeadm kubelet kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

三、在 第一台 Master(k8s-master-1) 执行:初始化集群

kubeadm init \
  --apiserver-advertise-address=192.168.1.10 \
  --control-plane-endpoint=192.168.1.100 \  # 这里是 LB/VIP
  --kubernetes-version=v1.28.2 \
  --pod-network-cidr=10.244.0.0/16 \
  --upload-certs

执行完会输出两条关键命令,你要保存好:

  1. 加入 Master 节点的命令(带 --control-plane)
  2. 加入 Worker 节点的命令

四、配置 kubectl(所有 Master 都要做)

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

五、安装网络插件(Calico/Flannel)

kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml

六、把 Master2、Master3 加入集群(高可用)

master2、master3 上执行 init 生成的 join 命令,类似:

kubeadm join 192.168.1.100:6443 \
  --token xxx \
  --discovery-token-ca-cert-hash sha256:xxx \
  --control-plane \
  --certificate-key xxx

只要带 --control-plane,就是加入 Master 节点


七、验证 3 Master 高可用集群

kubectl get nodes

你会看到:

k8s-master-1   Ready    control-plane,master
k8s-master-2   Ready    control-plane,master
k8s-master-3   Ready    control-plane,master

查看 etcd 集群状态:

kubectl exec -n kube-system etcd-k8s-master-1 -- etcdctl endpoint status --cluster

八、面试必背 4 句话(直接背)

  1. 3 Master K8s 高可用 = 3 个控制平面节点 + 3 节点 etcd 集群 + 前端负载均衡
  2. kubeadm init 必须用 --control-plane-endpoint 指定 LB 地址
  3. 新 Master 加入要加 --control-plane 参数
  4. 只要 > 一半 Master 存活,集群就可用,3 台允许挂 1 台

我给你一套阿里云ECS + 3 Master 高可用K8s集群最简可直接照做流程,专门适配阿里云环境,面试/实操都能用


一、阿里云 3 Master 高可用 K8s 架构(必懂)


二、阿里云前期准备(一步都不能少)

1. 买 3 台 ECS(配置建议)

2. 创建阿里云 SLB(关键!高可用必须)

  1. 控制台 → 负载均衡 SLB → 创建 内网SLB
  2. 监听 TCP:6443
  3. 后端服务器:添加 3 台 Master ECS,端口 6443
  4. 健康检查:TCP 6443
  5. 拿到 SLB 内网地址:
    示例:k8s-lb-xxxxxxx.cn-beijing.alb.aliyuncs.com
    或内网IP:192.168.x.x

这个 SLB 就是你的 control-plane-endpoint


三、所有3台Master节点执行:初始化环境

# 1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 2. 关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 3. 关闭swap(必须)
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 4. 桥接网络
modprobe br_netfilter
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

安装 containerd(阿里云推荐)

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y containerd.io

containerd config default > /etc/containerd/config.toml

# 修改镜像源为阿里云(必须)
sed -i 's|sandbox_image.*|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml

systemctl enable --now containerd

安装 kubeadm、kubelet、kubectl(阿里云源)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
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
EOF

yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

四、在 Master-1 初始化高可用集群(核心命令)

SLB地址 替换成你的:

kubeadm init \
  --apiserver-advertise-address=0.0.0.0 \
  --control-plane-endpoint=你的SLB地址:6443 \
  --kubernetes-version=v1.29.0 \
  --pod-network-cidr=10.244.0.0/16 \
  --image-repository=registry.aliyuncs.com/google_containers \
  --upload-certs

执行后会输出 两条命令,你必须保存:

  1. 添加 Master 节点的命令(带 --control-plane)
  2. 添加 Worker 节点的命令

五、配置 kubectl(3台Master都执行)

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

六、安装网络插件 Calico

kubectl apply -f https://docs.projectcalico.org/v3.27/manifests/calico.yaml

七、把 Master2、Master3 加入集群

Master2、Master3 执行上面生成的 join 命令,示例:

kubeadm join SLB地址:6443 \
  --token xxx \
  --discovery-token-ca-cert-hash sha256:xxx \
  --control-plane \
  --certificate-key xxx

八、验证集群

kubectl get nodes

# 看到 3 个 Ready control-plane 就成功

查看 etcd 集群:

kubectl exec -n kube-system etcd-节点名 -- etcdctl endpoint status --cluster

九、阿里云特别注意(面试必说)

  1. 必须用 SLB 做 apiserver 负载均衡
  2. 安全组必须放开6443、2379、2380
  3. 镜像仓库必须用阿里云:registry.aliyuncs.com/google_containers
  4. 3 Master 高可用,允许挂1台
  5. etcd 自动是 3 节点集群,无需手动搭建

十、你只要背这 4 句(面试满分)

  1. 阿里云 3 Master 高可用 K8s = 3台ECS + SLB负载均衡 + 3节点etcd
  2. 初始化用 --control-plane-endpoint 指向SLB。
  3. 镜像仓库必须换成阿里云。
  4. 3 Master 挂 1 台仍正常工作。

我给你一份面试能直接说、特别清晰
SLB(阿里云负载均衡) vs HAProxy 功能对比,不绕弯、直接干货。


一句话先记住


一、核心功能对比(最清晰版)

1. 身份与部署

2. 高可用谁来做

3. 支持协议

两者基本一样:

4. 负载均衡策略

5. 健康检查

6. 会话保持

7. 性能与并发

8. 费用

9. 运维成本(重点!)


二、最简单总结(面试直接背)

  1. SLB 是云厂商托管负载均衡,省心、高可用自带、不用运维。
  2. HAProxy 是开源软件,功能更强更灵活,但要自己装、自己维护高可用。
  3. 阿里云上 K8s 3 Master 高可用,推荐用 SLB,稳定、简单、不出坑
  4. 自建机房/不想用云产品 → 用 HAProxy。

三、你在阿里云搭 3 Master K8s 应该怎么选?

标准答案:用 SLB