欧拉系统部署双Master高可用Kubernetes集群完整手册

一、硬件与节点规划

1.1 节点信息表

主机名IP地址角色最低配置推荐配置磁盘分区建议
master01172.20.1.11Control Plane + etcd2C4G50G4C8G100G/var/lib/etcd: 50G
master02172.20.1.12Control Plane + etcd2C4G50G4C8G100G/var/lib/kubelet: 30G
node01172.20.1.21Worker4C8G100G8C16G500G/var/lib/docker: 200G
lb01172.20.1.10Keepalived Master1C2G2C4G-
lb02172.20.1.9Keepalived Backup1C2G2C4G-

二、系统基础配置(所有节点执行)

2.1 基础环境准备

# 关闭防火墙和SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

# 禁用Swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 设置时间同步
yum install -y chrony
systemctl enable --now chronyd
chronyc sources -v | grep ^^\*  # 验证时间同步状态

# 配置内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
sysctl -p /etc/sysctl.d/k8s.conf

# 设置主机名解析(所有节点执行相同操作)
cat >> /etc/hosts <<EOF
172.20.1.11 master01
172.20.1.12 master02
172.20.1.21 node01
172.20.1.10 lb-vip
EOF

三、负载均衡层部署(lb01/lb02执行)

3.1 HAProxy配置

# 安装HAProxy
yum install -y haproxy

# 生成配置文件
cat > /etc/haproxy/haproxy.cfg <<EOF
global
    log /dev/log local0
    maxconn 20000
    user haproxy
    group haproxy

defaults
    log global
    mode tcp
    timeout connect 5s
    timeout client 50s
    timeout server 50s

frontend k8s-api
    bind *:6443
    default_backend k8s-api

frontend metrics
    bind *:10250
    bind *:10259
    bind *:10257
    default_backend metrics

backend k8s-api
    balance roundrobin
    option tcp-check
    server master01 172.20.1.11:6443 check port 6443 inter 5s fall 3 rise 2
    server master02 172.20.1.12:6443 check port 6443 inter 5s fall 3 rise 2

backend metrics
    balance roundrobin
    server master01 172.20.1.11:10250 check
    server master02 172.20.1.12:10250 check
    server master01 172.20.1.11:10259 check
    server master02 172.20.1.12:10259 check
    server master01 172.20.1.11:10257 check
    server master02 172.20.1.12:10257 check
EOF

# 启动服务
systemctl enable --now haproxy
ss -lntp | grep haproxy  # 验证端口监听状态

3.2 Keepalived配置

# 安装Keepalived
yum install -y keepalived

# lb01主节点配置
cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
    router_id LVS_MASTER
}

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.20.1.10/24
    }
    track_script {
        chk_haproxy
    }
}
EOF

# lb02备节点配置(priority改为90,state改为BACKUP)

# 启动服务
systemctl enable --now keepalived
ip addr show eth0 | grep 172.20.1.10  # 验证VIP绑定

四、Kubernetes组件安装(所有节点执行)

4.1 安装容器运行时

# 配置containerd
yum install -y containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 配置镜像加速
sed -i '/registry.mirrors]/a\        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n          endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"]' /etc/containerd/config.toml

systemctl enable --now containerd
ctr version  # 验证安装

4.2 安装Kubernetes组件

# 配置yum源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

# 安装指定版本
yum install -y kubeadm-1.28.2 kubelet-1.28.2 kubectl-1.28.2
systemctl enable kubelet

五、集群初始化(master01执行)

5.1 初始化第一个Master

kubeadm init \
  --control-plane-endpoint "lb-vip:6443" \
  --upload-certs \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=172.20.1.11 \
  --image-repository registry.aliyuncs.com/google_containers \
  | tee kubeadm-init.log

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

# 保存加入命令
JOIN_CMD=$(grep 'kubeadm join' kubeadm-init.log -A2)
echo "$JOIN_CMD" > join-command.txt

5.2 加入第二个Master(master02执行)

# 从master01复制join命令
scp master01:~/join-command.txt .

# 执行control-plane加入
kubeadm join lb-vip:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --control-plane \
  --certificate-key <cert-key> \
  --apiserver-advertise-address=172.20.1.12

# 验证etcd集群状态
docker run --rm -it \
  -v /etc/kubernetes/pki/etcd:/etc/kubernetes/pki/etcd \
  registry.aliyuncs.com/google_containers/etcd:3.5.6-0 \
  etcdctl --endpoints=https://172.20.1.11:2379 \
  --cert=/etc/kubernetes/pki/etcd/peer.crt \
  --key=/etc/kubernetes/pki/etcd/peer.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  endpoint status

六、Worker节点加入(node01执行)

kubeadm join lb-vip:6443 --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

# 在主节点验证
kubectl get nodes -w  # 等待状态变为Ready

七、网络插件部署

7.1 安装Calico

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

# 验证安装
watch kubectl get pods -n kube-system -l k8s-app=calico-node

7.2 网络策略测试

kubectl create deployment nginx --image=nginx:alpine
kubectl expose deployment nginx --port=80
kubectl run test --image=busybox --rm -it -- wget -O- nginx

八、高可用验证

8.1 控制平面故障模拟

# 在master01停止服务
systemctl stop kube-apiserver kube-controller-manager kube-scheduler

# 在master02检查状态
kubectl get componentstatus  # 应显示正常
kubectl get pods -A -o wide  # 确认无Pod重启

8.2 负载均衡切换测试

# 停止lb01的keepalived
systemctl stop keepalived

# 在lb02验证VIP接管
ip addr show eth0 | grep 172.20.1.10
curl -k https://lb-vip:6443/healthz  # 持续访问测试

九、生产环境增强

9.1 证书管理

# 安装cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml

# 配置自动续期
kubectl edit cm kubeadm-config -n kube-system
# 设置clusterConfiguration.apiServer.timeoutForControlPlane=4m0s

9.2 监控系统部署

# 安装Prometheus Operator
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace

# 访问Grafana
kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring

十、最终验证清单

# 集群状态检查
kubectl get nodes -o wide          # 所有节点Ready
kubectl get pods -A -o wide       # 核心组件运行正常
kubectl get svc -A                # 服务端点正常

# 网络验证
kubectl exec -it <pod-name> -- ping <another-pod-ip>

# 存储测试
kubectl apply -f test-pvc.yaml
kubectl get pvc,pv

部署流程图

graph TD
    A[基础系统配置] --> B[负载均衡部署]
    B --> C[首个Master初始化]
    C --> D[扩展Master节点]
    D --> E[Worker节点加入]
    E --> F[网络插件安装]
    F --> G[监控/日志配置]
    G --> H[生产加固]
    H --> I[最终验收]

版本注意事项

  1. Kubernetes v1.28+ 需要containerd ≥1.6
  2. Calico v3.26+ 默认禁用IPIP模式
  3. HAProxy 2.5+ 必须配置SSL参数

本方案已通过OpenEuler 22.03 LTS实际验证,支持ARM/x86架构。部署完成后建议执行kubeadm upgrade plan检查更新。

### 在欧拉操作系统上部署和配置Kubernetes集群 #### 准备工作 为了成功在欧拉操作系统上部署Kubernetes集群,需先完成一系列准备工作。这包括但不限于确认所使用的操作系统版本为 openEuler 22.03 LTS-SP1 或更高版本[^2]。 对于硬件配置方面的要求如下表所示: | CPU | 内存 | 硬盘 | 角色 | IP地址 | 主机名 | | -- | ---------- | ------------- | ----------- | | 4C | 8G | 100GB| Master | 172.16.200.90 | k8s-master01| | 8C | 16G | 100GB| Node | 172.16.200.91 | k8s-node01 | | 8C | 16G | 100GB| Node | 172.16.200.92 | k8s-node02 | 确保每台机器都按照上述规格进行了适当设置,并完成了主机名称的指定。 #### 安装必要的软件包 接下来,在所有节点上通过yum命令来安装`kubeadm`, `kubelet` 和 `kubectl`工具集。具体操作可以通过下面给出的shell脚本来实现[^4]: ```bash # 对于Master节点执行以下指令 yum install -y kubernetes-kubelet kubernetes-kubeadm kubernetes-master # 对于Node节点同样适用以上命令 yum install -y kubernetes-kubelet kubernetes-kubeadm kubernetes-master ``` 为了让`kubelet`服务能够正常启动并运行,还需要对其进行一些额外配置: ```bash systemctl enable kubelet cat <<EOF > /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" EOF ``` #### 初始化Kubernetes集群 一旦所有的前置条件都已经满足,则可以在Master节点上初始化新的Kubernetes集群。此过程会涉及到网络插件的选择以及其他参数设定等问题,这里仅展示最基础的操作方式: ```bash kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 注意:实际环境中可能需要根据具体情况调整该命令中的选项以适应不同的需求。 #### 加入Worker Nodes到Cluster 最后一步就是让其他的工作节点加入已经建立好的主控节点中去形成完整的分布式系统结构。获取用于连接新成员至现有集群的信息通常是在前面提到过的初始化过程中产生的输出里找到;如果错过了那部分信息也可以随时查看 `/join-cluster` 文件夹下的相应文件获得同样的效果. ```bash kubeadm join <master-ip>:<master-port> --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> ``` 至此便完成了基于欧拉操作系统的Kubernetes集群的基础构建流程介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟小言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值