构建Kubernetes高可用集群

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高可用集群)