构建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集群。

相关推荐
每天要多喝水2 小时前
zookeeper 的使用
分布式·zookeeper·云原生
TAPD敏捷研发3 小时前
腾讯TAPD × CNB 联合赋能,开通TAPD项目管理工具就送价值1万元CNB云原生构建资源包!
人工智能·云原生·项目管理·代码管理·腾讯云ai代码助手·mcp·ai代码助手
醉颜凉3 小时前
夜莺-Nightingale-开源云原生监控分析系统部署 Prometheus 作为时序库使用(配置多数据源)
云原生·开源·prometheus·nightingale·夜莺监控
一个天蝎座 白勺 程序猿3 小时前
Jenkins X + AI:重塑云原生时代的持续交付范式
人工智能·云原生·jenkins
kk的matlab学习之路3 小时前
深入解析Calico:云原生网络的安全守护者
网络·其他·安全·云原生
GEM的左耳返3 小时前
Java面试深度剖析:从JVM到云原生的技术演进
jvm·spring boot·云原生·中间件·java面试·分布式架构·ai技术
AI 搜索引擎技术3 小时前
基于云原生的电商平台
ai·云原生
马克Markorg4 小时前
使用 Docker Compose 本地部署 GitLab 教程
docker·容器·gitlab
nix.gnehc4 小时前
Spring Cloud + Nacos 在 K8s+物理机/虚拟机多部署形态下的优雅适配(零业务改动)
spring cloud·容器·kubernetes