kubernetes之sealos搭建高可用集群
如图所示,kuernetes组件组件主要可分为APISERVICE、replication CrontrollerManger、Scheduler、ETCD、Kubelet、Kube_proxy等。部署高可用,实际就是这些组件的高可用。
由于ETCD使用raft算法,所以当部署多个master节点时,会自动组成高可用;CrontrollerManger与Scheduler在设计时也自动组成了高可用。所以搭建kubernetes的高可用就是搭建apiserver的高可用。
注意事项
- 必须同步所有服务器时间
- 所有服务器主机名不能重复
- 系统支持:centos7.6以上(其中centos8不支持) ubuntu16.04以上
- 内核推荐4.14以上, 系统推荐:centos7.7
部署
角色 | ip | 系统 |
---|---|---|
master01 | 192.168.234.136 | CentOS Linux release 7.7.1908 (Core) |
master02 | 192.168.234.137 | CentOS Linux release 7.7.1908 (Core) |
master03 | 192.168.234.138 | CentOS Linux release 7.7.1908 (Core) |
node01 | 192.168.234.139 | CentOS Linux release 7.7.1908 (Core) |
升级系统内核
参考站内博客Linux系统内核升级
设置时间同步
#master端
$ vim /etc/chrony.conf
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
allow 192.168.234.0/24 #允许同步网段
local stratum 10 #权重,三台服务器各自设置不同
#node端
$ vim /etc/chrony.conf
server 192.168.234.136 iburst
server 192.168.234.136 iburst
server 192.168.234.136 iburst
#重启服务,并设为开机自启
$ systemctl restart chronyd && systemctl enable chronyd
设置主机名并配置hosts配置文件
$ hostnamectl set-hostname master01
$ hostnamectl set-hostname master02
$ hostnamectl set-hostname master03
$ hostnamectl set-hostname node01
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.234.136 master01
192.168.234.137 master02
192.168.234.138 master03
192.168.234.139 node01
关闭防火墙、selinux、以及swap分区
$ systemctl stop firewalld && systemctl disable firewalld
$ setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
$ swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
$ sysctl -p /etc/sysctl.d/kubernetes.conf
开启ipvs
$ modprobe br_netfilter #用于向内核中加载模块
$ 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
EOF
$ chmod 755 /etc/sysconfig/modules/ipvs.modules
$ bash /etc/sysconfig/modules/ipvs.modules
以上步骤所有集群机器需要全部执行。
Sealos 部署高可用
Sealos 相关操作只要放入其中一个节点即可,他会自动发送到其他节点
# 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载
$ wget -c https://sealyun-home.oss-cn-beijing.aliyuncs.com/sealos/latest/sealos && \
chmod +x sealos && mv sealos /usr/bin
# 下载离线资源包
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/05a3db657821277f5f3b92d834bbaf98-v1.22.0/kube1.22.0.tar.gz
#安装集群
$ sealos init --passwd '12344' \
--master 192.168.234.136 --master 192.168.234.137 --master 192.168.234.138 \
--node 192.168.234.139 \
--pkg-url /opt/kube1.22.0.tar.gz \
--version v1.22.0 | tee /opt/sealosinit.log
节点查看
#kube-scheduler 状态查看
$ kubectl get endpoints kube-scheduler -n kube-system -o yaml
#kube-controller-manager 状态查看
$ kubectl get endpoints kube-controller-manager -n kube-system -o yaml
Sealos 相关命令
增加 Master 节点
$ sealos join --master 192.168.0.6 --master 192.168.0.7
# 或者多个连续 IP
$ sealos join --master 192.168.0.6-192.168.0.9
增加 node
$ sealos join --node 192.168.0.6 --node 192.168.0.7
# 或者多个连续 IP
$ sealos join --node 192.168.0.6-192.168.0.9
删除指定 Master 节点
$ sealos clean --master 192.168.0.6 --master 192.168.0.7
# 或者多个连续 IP
$ sealos clean --master 192.168.0.6-192.168.0.9
删除指定 node 节点
$ sealos clean --node 192.168.0.6 --node 192.168.0.7
# 或者多个连续 IP
$ sealos clean --node 192.168.0.6-192.168.0.9
清理集群
$ sealos clean --all
备份集群
$ sealos etcd save