当前位置: 首页 > news >正文

在国产麒麟V10系统上,用kubeadm一步步搭建3个master节点的k8s高可用集群(含haproxy+keepalived配置)

国产麒麟V10系统上构建高可用Kubernetes集群实战指南

在信息技术自主可控的大背景下,国产操作系统正逐步成为企业级基础设施的重要选择。本文将详细介绍如何在麒麟V10(Kylin V10)操作系统上,从零开始搭建一个包含3个Master节点的高可用Kubernetes集群。不同于通用Linux发行版的部署方案,我们将特别关注国产化环境中的特殊配置和优化技巧,帮助您构建一个稳定、高效且符合企业级标准的容器化平台。

1. 环境准备与系统调优

麒麟V10作为国产操作系统的代表,其底层基于Linux内核进行了深度定制和优化。在部署Kubernetes集群前,我们需要对系统进行一系列针对性配置,确保其满足容器编排平台的基础要求。

1.1 系统基础配置

首先,我们需要为每个节点配置唯一的主机名和静态IP地址。在麒麟V10中,可以通过以下命令修改主机名:

hostnamectl set-hostname master1 # 在master1节点执行 hostnamectl set-hostname master2 # 在master2节点执行 hostnamectl set-hostname master3 # 在master3节点执行

接下来,编辑/etc/hosts文件,确保所有节点能够通过主机名互相解析:

192.168.1.1 master1 192.168.1.2 master2 192.168.1.3 master3 192.168.1.11 node1 192.168.1.12 node2

1.2 内核参数优化

Kubernetes对Linux内核参数有特定要求,我们需要调整以下关键参数:

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

然后加载必要的内核模块:

modprobe br_netfilter modprobe overlay lsmod | grep -e br_netfilter -e overlay

1.3 系统服务配置

为提高部署成功率,建议暂时关闭防火墙和SELinux:

systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

同时关闭Swap分区:

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

注意:在生产环境中,应根据实际安全需求评估是否重新启用防火墙和SELinux,并配置相应的放行规则。

2. 容器运行时与Kubernetes组件安装

2.1 容器运行时选择与配置

在麒麟V10上,我们推荐使用containerd作为容器运行时。首先安装必要依赖:

yum install -y libseccomp-devel socat conntrack

然后下载并安装containerd:

wget https://github.com/containerd/containerd/releases/download/v1.7.2/containerd-1.7.2-linux-amd64.tar.gz tar Cxzvf /usr/local containerd-1.7.2-linux-amd64.tar.gz

配置systemd服务:

wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service mkdir -p /usr/local/lib/systemd/system mv containerd.service /usr/local/lib/systemd/system/ systemctl daemon-reload systemctl enable --now containerd

生成默认配置文件并启用systemd cgroup驱动:

mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml systemctl restart containerd

2.2 Kubernetes组件安装

配置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=1 repo_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

安装kubelet、kubeadm和kubectl:

yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 --disableexcludes=kubernetes systemctl enable kubelet

3. 高可用架构部署

3.1 HAProxy负载均衡配置

在所有Master节点上安装HAProxy:

yum install -y haproxy

配置HAProxy(/etc/haproxy/haproxy.cfg):

cat > /etc/haproxy/haproxy.cfg <<EOF global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon defaults log global mode tcp option tcplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend k8s-api bind *:16443 default_backend k8s-api-servers backend k8s-api-servers balance roundrobin server master1 192.168.1.1:6443 check server master2 192.168.1.2:6443 check server master3 192.168.1.3:6443 check EOF

启动并验证HAProxy服务:

systemctl enable haproxy && systemctl restart haproxy ss -lntp | grep 16443

3.2 Keepalived虚拟IP管理

安装Keepalived:

yum install -y keepalived

配置主节点(master1)的Keepalived:

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 42 } virtual_ipaddress { 192.168.1.10/24 } track_script { chk_haproxy } } EOF

在备份节点(master2和master3)上,只需修改stateBACKUP并降低priority值(如90和80)。启动服务:

systemctl enable keepalived && systemctl restart keepalived ip addr show eth0 | grep 192.168.1.10

4. Kubernetes集群初始化与扩展

4.1 主节点初始化配置

创建kubeadm配置文件(kubeadm-config.yaml):

apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: 1.28.2 controlPlaneEndpoint: "192.168.1.10:16443" imageRepository: "registry.cn-hangzhou.aliyuncs.com/google_containers" networking: podSubnet: "10.244.0.0/16" serviceSubnet: "10.96.0.0/12" apiServer: certSANs: - "192.168.1.1" - "192.168.1.2" - "192.168.1.3" - "192.168.1.10" --- apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: "192.168.1.1" nodeRegistration: criSocket: "unix:///run/containerd/containerd.sock" kubeletExtraArgs: cgroup-driver: "systemd"

初始化第一个Master节点:

kubeadm init --config=kubeadm-config.yaml --upload-certs

配置kubectl:

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

4.2 添加额外控制平面节点

将证书文件从master1复制到其他Master节点:

for node in master2 master3; do ssh $node "mkdir -p /etc/kubernetes/pki/etcd" scp /etc/kubernetes/pki/ca.* $node:/etc/kubernetes/pki/ scp /etc/kubernetes/pki/sa.* $node:/etc/kubernetes/pki/ scp /etc/kubernetes/pki/front-proxy-ca.* $node:/etc/kubernetes/pki/ scp /etc/kubernetes/pki/etcd/ca.* $node:/etc/kubernetes/pki/etcd/ done

在其他Master节点上执行加入命令(命令来自master1初始化输出):

kubeadm join 192.168.1.10:16443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> \ --control-plane --certificate-key <cert-key>

4.3 添加Worker节点

在Worker节点上执行加入命令:

kubeadm join 192.168.1.10:16443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash>

4.4 网络插件安装

部署Calico网络插件(适配我们配置的podSubnet):

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

验证集群状态:

kubectl get nodes -o wide kubectl get pods -n kube-system -o wide

5. 集群验证与优化

5.1 高可用性测试

验证虚拟IP的故障转移能力:

  1. 在master1上停止keepalived服务:systemctl stop keepalived
  2. 观察虚拟IP是否迁移到master2或master3
  3. 检查Kubernetes API是否仍然可用:kubectl get nodes
  4. 恢复master1的keepalived服务:systemctl start keepalived

5.2 性能调优建议

调整kubelet配置(/var/lib/kubelet/config.yaml):

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration evictionHard: memory.available: "500Mi" nodefs.available: "10%" nodefs.inodesFree: "5%" imagefs.available: "15%" kubeReserved: cpu: "500m" memory: "500Mi" systemReserved: cpu: "500m" memory: "500Mi"

重启kubelet使配置生效:

systemctl restart kubelet

5.3 关键组件监控

部署Prometheus监控栈:

kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/setup.yaml kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/

配置HAProxy和Keepalived的监控:

cat > /etc/prometheus/haproxy.yaml <<EOF - job_name: 'haproxy' static_configs: - targets: ['localhost:8404'] EOF
http://www.jsqmd.com/news/559565/

相关文章:

  • 用RK3588开发板给机械臂装上‘大脑’:从电机驱动到AI视觉抓取的保姆级实践
  • 在移动终端Termux中配置SSH密钥,实现免密安全登录远程服务器
  • 【MySQL】函数:聚合函数
  • Java学习路线:从基础到集成SenseVoice-Small语音识别
  • OFA-VE效果展示:教育题库OCR图+标准答案文本逻辑蕴含验证案例
  • 改进人工蜂群算法求解选址问题
  • Unity游戏里接入豆包AI对话?手把手教你实现Doubao-1.5-pro-32k流式聊天(附完整C#脚本)
  • 【springboot】宝塔快速搭建springboot项目并实现HTTPS加密访问
  • 2026年云南隔墙板生产厂家综合实力盘点:本土深耕者的突围之路 - 深度智识库
  • 天地图三维服务全解析:从WMTS到自定义图层(Cesium 1.58+)
  • TCGA数据下载神器gdc-client实战:Win10系统闪退问题一网打尽
  • 告别“瞎测”:如何用Tessent ATPG生成高效测试向量(Pattern)提升芯片良率
  • 别再和抛物线搞混了!用Python+Matplotlib亲手画出悬链线(附完整代码)
  • Sysmac Studio进阶技巧:用MC_GearInPos实现旋转轴精准同步(含ST语言示例)
  • 墨语灵犀效果展示:康沃尔语复兴运动口号→中文新文化运动风格译文
  • GHelper:华硕笔记本轻量替代性能优化与硬件控制工具
  • 2026珠海全护理养老院机构推荐:拱北/香洲/医养结合/智慧养老院,收自理至全护理老人全覆盖 - 品牌推荐官
  • Java八股文知识库构建:基于BERT分割面试题与答案解析
  • 解决QGIS 3.22.4编译后启动报错:从‘dll未加载’到‘plugins缺失’的实战排错记录
  • 告别B站音频提取难题:BilibiliDown工具的创新解决方案
  • Qwen3-TTS-12Hz-1.7B-Base部署教程:Ubuntu 22.04 + CUDA 12.1环境搭建
  • AI机器学习中回归算法的案例
  • SMT贴片机核心构造与PCB组装效率提升全解析
  • 南北阁Nanbeige 4.1-3B效果展示:数学证明题中逻辑链完整性与步骤可追溯性验证
  • GPT-5.4背景下论文代码复现实战指南:从方法论解析到可执行代码的完整路径
  • 【MISC】集对分析法 (SPA) 与熵权法的融合:优化复杂决策的新视角
  • GHelper终极指南:华硕笔记本性能优化的完整解决方案
  • PDF-Parser-1.0问题解决:服务启动失败、PDF解析错误的快速修复方法
  • AI视频分析终极指南:3步快速掌握智能视频内容提取技术
  • Chord - Ink Shadow 跨模态应用探索:连接文本与MATLAB科学计算