美文网首页
K8S高可用之Sealos

K8S高可用之Sealos

作者: david161 | 来源:发表于2022-03-25 08:35 被阅读0次

Sealos基础

Sealos 是一个 Go 语言开发的简单干净且轻量的 Kubernetes 集群部署工具, Sealos 能很好的支持在生产环境中部署高可用的 Kubernetes 集群。

Sealos 特性与优势
  1. 支持离线安装,工具与部署资源包分离,方便不同版本间快速升级。
  2. 证书有效期默认延期至 99 年。
  3. 工具使用非常简单。
  4. 支持使用自定义配置文件,可灵活完成集群环境定制。
  5. 使用内核进行本地负载,稳定性极高,故障排查也极其简单。
  6. 最主要的优势是不需要翻墙出去!!!
为什么不用 KeepAlived 和 HAProxy 实现集群高可用

无论是通过 KeepAlived 还是 HAProxy 进行高可用集群调度都会存在以下一些劣势。

  1. 软件源不一致可能导致容器中安装的软件版本也不一致,进而会引起相应检查脚本不生效等故障。
  2. 可能因为系统依赖库问题,在某些特定环境下就直接无法完成安装。
  3. 只依靠检测 HAProxy 进程是否存活是无法保证集群高可用的,正确的检测方式应该是判断ApiServer 是否 healthz 状态。
  4. Keepalived 可能存在 Cpu 占满的情况。
本地负载为什么不使用 Envoy 或者 Nginx 实现

Sealos 高可用实现是通过本地负载方式完成的。本地负载实现方式有多种,比如: IPVS 、 Envoy 、 Nginx 等,而 Sealos 采用的是通过内核 IPVS 来实现的。
本地负载:在每个 Node 节点上都启动一个负载均衡,同时监听集群中的多个 Master 节点。
Sealos 选择通过内核 IPVS 来实现主要有以下几个原因:
1)如果使用 Envoy 等需要在每个节点上都跑一个进程,消耗更多资源。虽然 IPVS 实际上也会多跑一个 lvscare 进程 ,但是 lvscare 只是负责管理 IPVS 规则,原理和 Kube-Proxy 类似。真正的流量直接从内核层面走,不需要把数据包先走到用户态中去处理。
2)使用 Envoy 存在启动优先级的问题,比如:Join 集群时,如果负载均衡没有建立,Kubelet 就会启动失败。使用 IPVS 则不会存在这样的问题,因为我们可以在 Join 集群前先建立好转发规则。

为什么要定制 Kubeadm

1)解决默认证书有效期只有一年的问题。
2)更方便的实现本地负载。
3)核心的功能均集成到 Kubeadm 中了,Sealos 只管分发和执行上层命令,相对就更轻量了。

Sealos 执行流程
  1. 通过 SFTP 或者 Wget 命令把离线安装包拷贝到目标机器上,包括所有 Master 和 Node 节点。
  2. 在 Master 0 节点上执行 kubeadm init 命令。
  3. 在其它 Master 节点上执行 kubeadm join 命令并设置控制面。这个过程中多个 Master 节点上的 Etcd 会自动组成一个 Etcd 集群,并启动相应控制组件。
  4. 所有 Node 节点都加入到集群中,这个过程中会在 Node 节点上进行 IPVS 转发规则和/etc/hosts 配置。
    Node 节点对 ApiServer 的访问均是通过域名进行的。因为 Node 节点需要通过 虚拟 IP 连接到多个 Master 上,但是每个 Node 节点的 Kubelet 与 Kube-Proxy 访问 ApiServer 的地址是不同的,所以这里使用域名来解析每个节点上 ApiServer 不同的 IP 地址。

部署准备

sealos官网
官网地址: 
https://sealyun.com/ 

企业级应用的集群离线包需要付费,我们只是学习,使用作者提供的免费离线包:
http://store.lameleg.com/
安装文档
官网中文安装手册: https://github.com/fanux/sealos
sealos下载
可以下载sealos不同版本的二进制文件 
https://github.com/fanux/sealos/releases
K8S离线包

离线包包含所有二进制文件配置文件和镜像

非免费V1.16.0版本下载地址 
https://sealyun.oss-cn- beijing.aliyuncs.com/cf6bece970f6dab3d8dc8bc5b588cc18- 1.16.0/kube1.16.0.tar.gz 

免费V1.17.0版本下载地址 
https://sealyun.oss-cn- beijing.aliyuncs.com/413bd3624b2fb9e466601594b4f72072- 1.17.0/kube1.17.0.tar.gz 

非免费V1.18.0版本下载地址: 
https://sealyun.oss-cn- beijing.aliyuncs.com/7b6af025d4884fdd5cd51a674994359c- 1.18.0/kube1.18.0.tar.gz 

免费V1.18.1版本下载地址: 
https://sealyun.oss-cn- beijing.aliyuncs.com/7b6af025d4884fdd5cd51a674994359c- 1.18.0/kube1.18.0.tar.gz 

非免费V1.18.2版本下载地址: 
https://sealyun.oss-cn- beijing.aliyuncs.com/9a8299ea8016abe32e1564a44d5162e4- 1.18.2/kube1.18.2.tar.gz
Sealos 常用参数说明
--master Master 节点服务器地址列表 
--node Node 节点服务器地址列表 
--user 服务器 SSH 用户名 
--passwd 服务器 SSH 用户密码 
--pkg-url 离线包所在位置,可以是本地目录,也可以是一个 HTTP 地址 
--version 指定需要部署的 Kubernetes 版本 
--pk 指定 SSH 私钥所在位置,默认为 /root/.ssh/id_rsa 

Other flags: 

  --kubeadm-config string kubeadm-config.yaml 用于指定自定义 kubeadm 配置文件 
  --vip string virtual ip (default "10.103.97.2") 本地负载时虚拟 IP ,不推荐修改,集群外不可访问

部署集群

节点信息

服务器用户名:root,服务器密码:123456


image.png
安装相关环境依赖
通过 Sealos 进行 Kubernetes 集群部署,你需要先准备好以下环境。 
1.在所有要部署的机器上,先完成 Docker 的安装和启动。 
2.下载 Kubernetes 离线安装包。 
3.下载最新版本 Sealos。 
4.对所有服务器进行时间同步。 
5.系统支持:centos7.2以上,ubuntu16.04以上。内核推荐4.14以上。推荐配置:centos7.8 
6.主机名不可重复 
7.master节点CPU必须2C以上 
8.请使用sealos 3.2.0以上版本

升级系统内核

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 
yum --enablerepo=elrepo-kernel install -y kernel-lt 
grep initrd16 /boot/grub2/grub.cfg 
grub2-set-default 0 

reboot

修改Cgroup Driver

修改/etc/docker/daemon.json,新增:

"exec-opts": ["native.cgroupdriver=systemd"] 

重启docker服务:
systemctl daemon-reload 
systemctl restart docker 

查看修改后状态: 
docker info | grep Cgroup

设置hostname

cat <<EOF >>/etc/hosts 
192.168.198.121 sealos-master01 
192.168.198.122 sealos-master02 
192.168.198.123 sealos-master03 
192.168.198.124 sealos-node01 
192.168.198.125 sealos-node02 
192.168.198.126 sealos-node03 
EOF
初始化安装

多master

将sealos二进制文件上传sealos-master01:/data 
将kubernates离线安装包上传sealos-master01:/data 
cd /data 

授权并移动到/usr/bin目录中 
chmod +x sealos && mv sealos /usr/bin 

多master HA: 
sealos init \ 
    --master 192.168.198.121 \ 
    --master 192.168.198.122 \ 
    --master 192.168.198.123 \ 
    --node 192.168.198.124 \
    --node 192.168.198.125 \ 
    --node 192.168.198.126 \ 
    --user root \ 
    --passwd 123456 \ 
    --version v1.17.0 \ 
    --pkg-url /data/kube1.17.0.tar.gz

单master多node: 
sealos init --master 192.168.198.121 \ 
    --node 192.168.198.124 \ 
    --node 192.168.198.125 \ 
    --node 192.168.198.126 \ 
    --user root \ 
    --passwd 123456 \ 
    --version v1.17.0 \ 
    --pkg-url /data/kube1.17.0.tar.gz

kubectl命令自动补全
sealos默认已经帮我们安装命令补全功能。

echo "source <(kubectl completion bash)" >> ~/.bash_profile 
source ~/.bash_profile

master节点操作

增加master
sealos join --master 192.168.198.127 --master 192.168.198.128 

或者多个连续IP 
sealos join --master 192.168.198.127-192.168.198.128
删除指定master节点
sealos clean --master 192.168.198.122 --master 192.168.198.123 

或者多个连续IP 
sealos clean --master 192.168.198.122-192.168.198.123

node节点操作

增加node
sealos join --node 192.168.198.127 --node 192.168.198.128 

或者多个连续IP 
sealos join --node 192.168.198.127-192.168.198.128
删除指定node节点
sealos clean --node 192.168.198.125 --node 192.168.198.126 

或者多个连续IP
sealos clean --node 192.168.198.125-192.168.198.126

清理集群

sealos clean --all -f

相关文章

网友评论

      本文标题:K8S高可用之Sealos

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