美文网首页容器技术K8s
构建Kubernetes高可用集群

构建Kubernetes高可用集群

作者: bear_small | 来源:发表于2021-07-09 11:17 被阅读0次

    1. 统一环境配置(构建Kubernetes基础系统镜像防止后面逐台安装)

    此处为加固印象,本人重新构建,技术嘛,多动手

    • 节点配置信息规划
    节点 IP 系统配置信息 配置 磁盘
    kubernetes-master-01 192.168.141.150 Master Ubuntu Server 18.04 2核2G 20G
    kubernetes-master-02 192.168.141.151 Master Ubuntu Server 18.04 2核2G 20G
    kubernetes-master-03 192.168.141.152 Master Ubuntu Server 18.04 2核2G 20G
    kubernetes-node-01 192.168.141.160 Node Ubuntu Server 18.04 2核4G 20G
    kubernetes-node-02 192.168.141.161 Node Ubuntu Server 18.04 2核4G 20G
    kubernetes-node-03 192.168.141.162 Node Ubuntu Server 18.04 2核4G 20G

    ①. 操作系统的配置项

    • 关闭交换空间
      swapoff -a
    • 避免开机启动交换空间
      vi /etc/fstab
      注释 swap 开头的行
    • 关闭防火墙
      ufw disable
    • 配置 DNS
      vi /etc/systemd/resolved.conf
      取消 DNS 行注释,并增加 DNS 配置如:114.114.114.114,修改后重启下计算机
      reboot

    ②. 安装 Docker
    见之前博客:构建kubernetes基础系统镜像-安装Docker

    ③. 配置 Docker 加速器
    见之前博客:构建kubernetes基础系统镜像-安装Docker(国内镜像加速器可能会很卡,请替换成你自己阿里云镜像加速器)

    ④. 安装 kubeadm,kubelet,kubectl
    构建kubernetes基础系统镜像-基于kubeadm安装kubernetes环境

    ⑤. 同步时间

    • 设置时区
      dpkg-reconfigure tzdata
      选择 Asia(亚洲)
      选择 Shanghai(上海)
    • 时间同步
      • 安装 ntpdate
        apt-get install ntpdate
      • 设置系统时间与网络时间同步(cn.pool.ntp.org 位于中国的公共 NTP 服务器)
        ntpdate cn.pool.ntp.org
      • 将系统时间写入硬件时间
        hwclock –systohc
    • 确认时间
      date
      自行对照与系统时间是否一致

    ⑥. 配置 IPVS

    • 安装系统工具
      apt-get install -y ipset ipvsadm
    • 配置并加载 IPVS 模块
      mkdir -p /etc/sysconfig/modules/
      vim /etc/sysconfig/modules/ipvs.modules
    • 输入如下内容
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    
    • 4.执行脚本,注意:如果系统重启则需要重新运行该脚本
      chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
      设置脚本权限,执行脚本,查看信息
      执行脚本输出如下:
      image.png

    ⑦. 配置内核参数

    • 配置参数
      vim /etc/sysctl.d/k8s.conf
    • 输入如下内容
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_nonlocal_bind = 1
    net.ipv4.ip_forward = 1
    vm.swappiness=0
    
    • 应用参数
      sysctl –system
    • 4.应用参数输出如下(找到 Applying /etc/sysctl.d/k8s.conf 开头的日志)


      image.png

    ⑧. 修改 cloud.cfg
    vim /etc/cloud/cloud.cfg
    该配置默认为 false,修改为 true 即可

    preserve_hostname: true
    

    以上配置完成后作为Kubernetes基础系统镜像,以此为基础复制其他集群


    2. 单独节点配置

    为 Master 和 Node 节点单独配置对应的 IP 和 主机名

    ①. 配置 IP

    • 编辑配置文件
      vim /etc/netplan/50-cloud-init.yaml
      image.png
    • 配置生效
      netplan apply

    ②. 配置主机名

    • 修改主机名
      hostnamectl set-hostname kubernetes-master-01
    • 配置 hosts(命令)
    cat >> /etc/hosts << EOF
    > 192.168.2.150 kubernetes-master-01
    > EOF
    

    3. Master节点安装 HAProxy + Keepalived

    ①. 创建 HAProxy 启动脚本(kubernetes-master-01 执行)
    mkdir -p /usr/local/kubernetes/lb
    vi /usr/local/kubernetes/lb/start-haproxy.sh

    • 输入内容如下
    #!/bin/bash
    # 修改为你自己的 Master 地址
    MasterIP1=192.168.141.150
    MasterIP2=192.168.141.151
    MasterIP3=192.168.141.152
    # 这是 kube-apiserver 默认端口,不用修改
    MasterPort=6443
    
    # 容器将 HAProxy 的 6444 端口暴露出去
    docker run -d --restart=always --name HAProxy-K8S -p 6444:6444 \
            -e MasterIP1=$MasterIP1 \
            -e MasterIP2=$MasterIP2 \
            -e MasterIP3=$MasterIP3 \
            -e MasterPort=$MasterPort \
            wise2c/haproxy-k8s
    
    • 设置权限
      chmod +x start-haproxy.sh

    ②. 创建 Keepalived 启动脚本(kubernetes-master-01 执行)
    mkdir -p /usr/local/kubernetes/lb
    vi /usr/local/kubernetes/lb/start-keepalived.sh

    • 输入内容如下
    #!/bin/bash
    # 修改为你自己的虚拟 IP 地址
    VIRTUAL_IP=192.168.141.200
    # 虚拟网卡设备名
    INTERFACE=ens33
    # 虚拟网卡的子网掩码
    NETMASK_BIT=24
    # HAProxy 暴露端口,内部指向 kube-apiserver 的 6443 端口
    CHECK_PORT=6444
    # 路由标识符
    RID=10
    # 虚拟路由标识符
    VRID=160
    # IPV4 多播地址,默认 224.0.0.18
    MCAST_GROUP=224.0.0.18
    
    docker run -itd --restart=always --name=Keepalived-K8S \
            --net=host --cap-add=NET_ADMIN \
            -e VIRTUAL_IP=$VIRTUAL_IP \
            -e INTERFACE=$INTERFACE \
            -e CHECK_PORT=$CHECK_PORT \
            -e RID=$RID \
            -e VRID=$VRID \
            -e NETMASK_BIT=$NETMASK_BIT \
            -e MCAST_GROUP=$MCAST_GROUP \
            wise2c/keepalived-k8s
    

    VIRTUAL_IP:可为自定义网段的任意ip,未被占用即可,此处ip指代下文中的VIP

    • 设置权限
      chmod +x start-keepalived.sh

    ③. 复制脚本到其它 Master 地址

    • 分别在 kubernetes-master-02 和 kubernetes-master-03 执行创建工作目录命令
      mkdir -p /usr/local/kubernetes/lb
    • 将 kubernetes-master-01 中的脚本拷贝至其它 Master
      scp start-haproxy.sh start-keepalived.sh 192.168.2.151:/usr/local/kubernetes/lb
      scp start-haproxy.sh start-keepalived.sh 192.168.2.152:/usr/local/kubernetes/lb
      image.png
      如上输入yes,并输入对应服务器的密码
    • 分别在 3 个 Master 中启动容器(执行脚本)
      sh /usr/local/kubernetes/lb/start-haproxy.sh && sh /usr/local/kubernetes/lb/start-keepalived.sh
    • 查看容器运行情况和网卡绑定的虚拟 IP
      image.png
      image.png
      特别注意:Keepalived 会对 HAProxy 监听的 6444 端口进行检测,如果检测失败即认定本机 HAProxy 进程异常,会将 VIP 漂移到其他节点,所以无论本机 Keepalived 容器异常或 HAProxy 容器异常都会导致 VIP 漂移到其他节点

    4. 部署 Kubernetes 集群

    初始化 Master
    ①. 创建工作目录
    mkdir -p /usr/local/kubernetes/cluster
    导出配置文件到工作目录
    kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
    ②. 修改配置文件,如图:

    image.png
    在1.19版本之前,kubeadm部署方式启用ipvs模式时,初始化配置文件需要添加以下内容:
    image.png
    之后如下:
    image.png
    见配置项:https://kubernetes.io/docs/reference/config-api/kube-proxy-config.v1alpha1/
    ③. kubeadm 初始化
    kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
    image.png
    配置 kubectl
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    验证是否成功
    kubectl get node
    image.png
    ④. 安装网络插件
    参考官方文档安装:https://docs.projectcalico.org/getting-started/kubernetes/quickstart
    下载文件,方便更改
    wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
    更改默认的网段,前面有说明
    vim calico.yaml
    将 192.168.0.0/16 修改为 10.244.0.0/16
    命令快速查找
    显示行号::set number
    查找字符:/要查找的字符,输入小写 n 下一个匹配项,输入大写 N 上一个匹配项
    安装(Master 节点操作)
    kubectl apply -f calico.yaml
    image.png
    确认安装是否成功
    watch kubectl get pods --all-namespaces
    需要等待所有状态为 Running,注意时间可能较久,3 - 5 分钟的样子
    ⑤. 加入master节点
    • 查看kubeadm-init.log文件,获取join操作命令
      cat /usr/local/kubernetes/cluster/kubeadm-init.log
    • kubernetes-master-02和kubernetes-master-03分别执行


      image.png

      ⑥. 6.加入node节点
      kubernetes-node-01,kubernetes-node-02,kubernetes-node-03分别执行


      image.png

    根据次版本核配置,本人已搭建集群与高可用集群环境,如遇到相关问题,未在文章中说明,可联系本人
    谢谢大家关注,点个赞呗~
    如需转载请标明出处,谢谢~~

    相关文章

      网友评论

        本文标题:构建Kubernetes高可用集群

        本文链接:https://www.haomeiwen.com/subject/zgtsultx.html