k8s高可用架构部署

 
kubeadm介绍kubeadm概述参考《附003.Kubeadm部署Kubernetes》 。
kubeadm功能参考《附003.Kubeadm部署Kubernetes》 。
本方案描述· 本方案采用kubeadm部署Kubernetes 1.18.3版本;
· etcd采用混部方式;
· KeepAlived:实现VIP高可用;
· HAProxy:以系统systemd形式运行,提供反向代理至3个master 6443端口;
· 其他主要部署组件包括:
· Metrics:度量;
· Dashboard:Kubernetes 图形UI界面;
· Helm:Kubernetes Helm包管理工具;
· Ingress:Kubernetes 服务暴露;
· Longhorn:Kubernetes 动态存储组件 。
回到顶部
部署规划节点规划Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master 。

k8s高可用架构部署

文章插图
 
Kubernetes高可用架构中etcd与Master节点组件混布方式特点:
1. 所需机器资源少
2. 部署简单,利于管理
3. 容易进行横向扩展
4. 风险大,一台宿主机挂了,master和etcd就都少了一套,集群冗余度受到的影响比较大 。
提示:本实验使用Keepalived+HAProxy架构实现Kubernetes的高可用 。
初始准备[root@master01 ~]# hostnamectl set-hostname master01 #其他节点依次修改
[root@master01 ~]# cat >> /etc/hosts << EOF
172.24.8.71 master01
172.24.8.72 master02
172.24.8.73 master03
172.24.8.74 worker01
172.24.8.75 worker02
172.24.8.76 worker03
EOF
[root@master01 ~]# vi k8sinit.sh
# Initialize the machine. This needs to be executed on every machine.
# Install Docker
useradd -m docker
yum -y install yum-utils device-mApper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://dbzucv6w.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
systemctl restart docker
systemctl enable docker
systemctl status docker
# Disable the SELinux.
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# Turn off and disable the firewalld.
systemctl stop firewalld
systemctl disable firewalld
# Modify related kernel parameters & Disable the swap.
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.tcp_tw_recycle = 0
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
net.ipv6.conf.all.disable_ipv6 = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf >&/dev/null
swapoff -a
sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
modprobe br_netfilter
# Add ipvs modules
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
modprobe -- nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
# Install rpm
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget
# Update kernel
rpm --import http://down.linuxsb.com:8888/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://down.linuxsb.com:8888/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" install -y kernel-ml
sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT=0/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
yum update -y
# Reboot the machine.
# reboot
提示:对于某些特性,可能需要升级内核,内核升级操作见《018.Linux升级内核》 。4.19版及以上内核nf_conntrack_ipv4已经改为nf_conntrack 。
互信配置为了更方便远程分发文件和执行命令,本实验配置master01节点到其它节点的 ssh 信任关系 。
[root@master01 ~]# ssh-keygen -f ~/.ssh/id_rsa -N ''
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master01
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master02


推荐阅读