【sealos】一条命令部署多master的高可用k8s集群

2019/11/20 23:13
阅读数 138

sealos

简单介绍

今天分享一个完全自动化安装kubernetes高可用环境的安装工具,之前我也不太相信,能把操作繁杂的搭建k8s的过程做的这么简单高效,完全是一条命令,包含所有的依赖,并且解决了很多日常维护时的痛点:

  • 完全使用ipvs高可用apiserver,并且带apiserver的健康监测
  • 抛弃传统的高可用搭配服务(haproxy和keepalived)
  • 支持99年的证书(几乎不用担心证书过期的问题了)
  • 安装简单,一条命令,包含所有的依赖
  • 支持离线部署,工具与资源包(二进制程序,配置文件,镜像,yaml文件等)分离,不存在因为无法科学上网拉去不了镜像等问题

认识sealon

sealos如文章前面说了,通过ssh进行文件分发,没有使用流行的ansible配置管理工具以及高可用负载服务方案,主要是因为简化用户的操作,快速的安装使用。了解作者开发的一些意图:

为什么不使用ansilbe

1.0版本确实是用ansible实现,但是用户还是需要先装ansible,装ansible有需要装python和一些依赖等,为了不让用户那么麻烦把ansible放到了容器里供用户使用。如果不想配置免密钥使用用户名密码时又需要ssh-pass等,总之不能让我满意,不是我想的极简。

所以我想就来一个二进制文件工具,没有任何依赖,文件分发与远程命令都通过调用sdk实现所以不依赖其它任何东西,总算让我这个有洁癖的人满意了。

为什么不用keepalived haproxy

haproxy用static pod跑没有太大问题还算好管理,keepalived现在大部分开源ansible脚本都用yum 或者apt等装,这样非常的不可控,有如下劣势:

  • 源不一致可能导致版本不一致,版本不一直连配置文件都不一样,我曾经检测脚本不生效一直找不到原因,后来才知道是版本原因
  • 系统原因安装不上,依赖库问题某些环境就直接装不上了
  • 看了网上很多安装脚本,很多检测脚本与权重调节方式都不对,直接去检测haproxy进程在不在,其实是应该去检测apiserver是不是healthz的,api挂了即使haproxy在集群也会不正常了,就是伪高可用了。
  • 管理不方便,通过prometheus对集群进行监控,是能直接监控到static pod的但是用systemd跑又需要单独设置监控,且重启啥的还需要单独拉起。不如kubelet统一管理来的干净简洁。
  • 我们还出现过keepalived把CPU占满的情况。

所以为了解决这个问题,我把keepalived跑在了容器中(社区提供的镜像基本是不可用的) 改造中间也是发生过很多问题,最终好在解决了。

总而言之,累觉不爱,所以在想能不能甩开haproxy和keepalived做出更简单更可靠的方案出来,还真找到了。。。

本地负载为什么不使用envoy或者nginx

我们通过本地负载解决高可用问题

解释一下本地负载,就是在每个node节点上都启动一个负载均衡,上游就是三个master,负载方式有很多 ipvs envoy nginx等,我们最终使用内核ipvs

如果使用envoy等需要在每个节点上都跑一个进程,消耗更多资源,这是我不希望的。ipvs实际也多跑了一个进程lvscare,但是lvscare只是负责管理ipvs规则,和kube-proxy类似,真正的流量还是从很稳定的内核走的,不需要再把包走到用户态中去处理。

实现上有个问题会让使用envoy等变得非常尴尬,就是join时如果负载均衡没有建立那是会卡住的,kubelet就不会起,所以为此你需要先把envory起起来,意味着你又不能用static pod去管理它,同上面keepalived宿主机部署一样的问题,用static pod就会相互依赖,逻辑死锁,鸡说要先有蛋,蛋说要先有鸡,最后谁都没有。

使用ipvs就不一样,我可以在join之前先把ipvs规则建立好,再去join就可以join进去了,然后对规则进行守护即可。一旦apiserver不可访问了,会自动清理掉所有node上对应的ipvs规则, master恢复正常时添加回来。

为什么要定制kubeadm

首先是由于kubeadm把证书时间写死了,所以需要定制把它改成99年,虽然大部分人可以自己去签个新证书,但是我们还是不想再依赖个别的工具,就直接改源码了。

其次就是做本地负载时修改kubeadm代码是最方便的,因为在join时我们需要做两个事,第一join之前先创建好ipvs规则,第二创建static pod,如果这块不去定制kubeadm就把报静态pod目录已存在的错误,忽略这个错误很不优雅。 而且kubeadm中已经提供了一些很好用的sdk供我们去实现这个功能。

且这样做之后最核心的功能都集成到kubeadm中了,sealos就单单变成分发和执行上层命令的轻量级工具了,增加节点时我们也就可以直接用kubeadm了

安装

安耐不住好奇的心里,还是快速的克隆了三个(2c4g)的Centos虚拟机,在kubernetes中,默认至少要有2核CPU的。在准备和部署的整个过程好像也没有10分钟吧!

下载sealos

sealos是golang开发的一个二进制文件,我们可以在github上快速的下载并安装它(https://github.com/fanux/sealos/releases/download/v2.0.7/sealos)。和docker-compose安装一样的特别方便

wget https://github.com/fanux/sealos/releases/download/v2.0.7/sealos && \
chmod +x sealos && mv sealos /usr/bin

该命令特点的简单易用,了解一下命令行选项

--master   master服务器地址列表
--node     node服务器地址列表
--user     服务器ssh用户名
--passwd   服务器ssh用户密码
--pkg-url  离线包位置,可以放在本地目录,也可以放在一个http服务器上,sealos会wget到安装目标机
--version  kubernetes版本
--pk       ssh私钥地址,配置免密钥默认就是/root/.ssh/id_rsa

安装Kubernetes集群

简单的就一条命令,相信一眼就能看明白每个参数的含义

sealos init --passwd YOUR_SERVER_PASSWD \
--master 172.16.132.144  --master 172.16.132.145   \
--node 172.16.132.146 \
--pkg-url https://sealyun.oss-cn-beijing.aliyuncs.com/37374d999dbadb788ef0461844a70151-1.16.0/kube1.16.0.tar.gz \
--version v1.16.0

在安装kubernetes集群的时候,主要下载kube1.16.0.tar.gz文件包比较耗时,因此我们可以将该文件提前下载到服务器上,然后通过本地加载的方式安装集群。

sealos init --passwd YOUR_SERVER_PASSWD \
--master 172.16.132.144  --master 172.16.132.145   \
--node 172.16.132.146 \
--pkg-url /root/kube1.16.0.tar.gz \
--version v1.16.0

对于sealos工具来说,你可以指定多个--master--node来定制化你需要多少个master几点高可用以及多少个work节点用于调度资源。

检查安装是否正常

检查安装是否正常:

root@node1:~# kubectl get nodes -o wide
NAME    STATUS   ROLES    AGE     VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
node1   Ready    master   2m14s   v1.16.0   172.16.132.144   <none>        Ubuntu 16.04.6 LTS   4.4.0-142-generic   docker://19.3.4
node2   Ready    master   88s     v1.16.0   172.16.132.145   <none>        Ubuntu 16.04.6 LTS   4.4.0-142-generic   docker://19.3.4
node3   Ready    <none>   15s     v1.16.0   172.16.132.146   <none>        Ubuntu 16.04.6 LTS   4.4.0-142-generic   docker://19.3.4

剩下的就是继续研究学习kubernetes了。

本文分享自微信公众号 - 云原生生态圈(CloudNativeEcoSystem)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部