构建3 Master + 3 Node K8s集群完整步骤

完整的3 Master + 3 Node K8s集群部署步骤。包括:

  1. 实例准备和网络规划
  2. 系统环境配置
  3. Kubernetes组件安装
  4. 高可用集群配置

涵盖从ECS实例创建到Kubernetes集群部署的全过程。

构建3 Master + 3 Node K8s集群完整步骤

一、基础设施规划与准备

1.1 实例配置推荐
  • Master节点(3个) :推荐使用 ecs.g9i.2xlarge(8核CPU,32GB内存)
    • 用途:运行Kubernetes控制平面组件
    • 数量:3个以实现高可用
  • Node节点(3个) :推荐使用 ecs.c9i.2xlarge(8核CPU,16GB内存)
    • 用途:运行应用程序Pod
    • 数量:3个以提供足够的计算资源
1.2 存储配置
  • 系统盘:建议使用ESSD云盘,容量40GB以上
  • 数据盘:根据应用需求,可额外挂载ESSD云盘作为持久化存储
1.3 网络规划
  • VPC:创建独立的VPC用于K8s集群
  • 安全组:开放必要端口(6443、2379-2380、10250-10252、30000-32767)

二、环境初始化

2.1 创建ECS实例
  1. 登录阿里云控制台,进入ECS实例创建页面
  2. 选择上述推荐的实例规格
  3. 镜像选择:推荐使用Alibaba Cloud Linux 3或Ubuntu 20.04
  4. 网络配置:选择同一VPC和交换机
  5. 安全组:创建包含K8s所需端口的安全组
2.2 系统配置(所有节点执行)
bash 复制代码
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 关闭SELinux(如果是CentOS/Alibaba Cloud Linux)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 配置内核参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo 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

# 加载所需模块
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh

# 安装ipset和ipvsadm
sudo yum install ipset ipvsadm -y
2.3 配置hosts文件(所有节点执行)
bash 复制代码
# 编辑/etc/hosts文件,添加所有节点的IP和主机名映射
sudo vi /etc/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.22 node3

三、安装Docker或Containerd

3.1 安装Containerd(推荐)
bash 复制代码
# 安装containerd
sudo yum install -y containerd.io

# 配置containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

# 修改配置文件,设置SystemdCgroup = true
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

# 启动并设置开机自启
sudo systemctl restart containerd
sudo systemctl enable containerd

四、安装Kubernetes组件

4.1 配置Kubernetes YUM源
bash 复制代码
cat <<EOF | 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
EOF
4.2 安装kubelet、kubeadm、kubectl
bash 复制代码
# 设置SELinux为permissive模式(有效禁用它)
sudo setenforce 0
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 设置kubelet开机自启但不启动
sudo systemctl enable kubelet

五、高可用集群部署

5.1 在第一个Master节点初始化集群
bash 复制代码
# 初始化第一个master节点
sudo kubeadm init \
  --control-plane-endpoint "LOAD_BALANCER_DNS:6443" \
  --upload-certs \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=MASTER1_IP

# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.2 安装HAProxy和Keepalived(可选,用于API Server高可用)

在每个Master节点上安装并配置HAProxy和Keepalived:

bash 复制代码
# 安装HAProxy
sudo yum install -y haproxy

# 配置HAProxy (/etc/haproxy/haproxy.cfg)
global
    log /dev/log local0
    log /dev/log local1 notice
    daemon

defaults
    mode http
    log global
    retries 2
    timeout connect 3000ms
    timeout client 50000ms
    timeout server 50000ms

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

backend kubernetes-backend
    mode tcp
    balance roundrobin
    server master1 MASTER1_IP:6443 check
    server master2 MASTER2_IP:6443 check
    server master3 MASTER3_IP:6443 check
5.3 加入其他Master节点
bash 复制代码
# 在第二个和第三个Master节点执行以下命令
sudo kubeadm join LOAD_BALANCER_IP:6443 --token <token> \
    --discovery-token-ca-cert-hash sha256:<hash> \
    --control-plane --certificate-key <key>
5.4 加入Worker节点
bash 复制代码
# 在所有Worker节点执行以下命令
sudo kubeadm join LOAD_BALANCER_IP:6443 --token <token> \
    --discovery-token-ca-cert-hash sha256:<hash>

六、配置网络插件

6.1 安装Flannel网络插件
bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

或者安装Calico:

bash 复制代码
kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml

七、验证集群状态

7.1 检查节点状态
bash 复制代码
kubectl get nodes
7.2 检查系统Pod状态
bash 复制代码
kubectl get pods -n kube-system

八、部署常用组件

8.1 部署Metrics Server
bash 复制代码
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# 修改Metrics Server配置以允许不安全连接
kubectl patch deployment metrics-server -n kube-system -p '{"spec":{"template":{"spec":{"containers":[{"name":"metrics-server","args":["--cert-dir=/tmp","--secure-port=4443","--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname","--kubelet-use-node-status-port","--metric-resolution=15s","--kubelet-insecure-tls"]}]}'
8.2 部署Dashboard(可选)
bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

# 创建管理员用户
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF

cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

# 获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

九、安全加固建议

  1. 限制API Server访问:配置RBAC权限控制
  2. 启用审计日志:记录所有API请求
  3. 定期更新:及时升级Kubernetes版本
  4. 备份策略:定期备份etcd数据

十、监控与维护

  1. 部署Prometheus + Grafana监控栈
  2. 配置日志收集系统(如EFK)
  3. 设置告警机制
  4. 制定灾难恢复计划

这个完整的部署方案涵盖了从基础设施准备到集群部署的所有关键步骤。按照这些步骤操作,将能够成功构建一个高可用的3 Master + 3 Node K8s集群。

相关推荐
知已难寻7 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
阿里云云原生11 小时前
车企数据隐私保护必修课:如何用 SLS mask 守住日志中的敏感信息
云原生
阿里云云原生12 小时前
切换模型会损失缓存,智能路由还省钱吗?
云原生
闲云野鹤在人间12 小时前
Kubernetes Service 与 kube-proxy 详解
云原生·容器·kubernetes
我不会起名字32213 小时前
节点 NotReady:kubelet 与容器运行时的 4 步排查
云原生·kubernetes·kubelet·排查
说实话起个名字真难啊13 小时前
实战docker部署dify及注意点
运维·docker·容器
闲云自留地14 小时前
K8s Service 全解:服务发现、四种类型、会话保持、金丝雀发布一篇通
容器·kubernetes·服务发现
分布式存储与RustFS14 小时前
GPU 在空转等数据?PyTorch 训练集进 RustFS 的三种接法
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
choumin15 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
时间售卖铺17 小时前
MySQL 备份
运维·数据库·mysql·云原生