安装:
sealos init \
--master 192.168.0.2 \
--master 192.168.0.3 \
--master 192.168.0.4 \ # master地址列表
--node 192.168.0.5 \ # node地址列表
--user root \ # 服务器用户名
--passwd your-server-password \ # 服务器密码,用于远程执行命令
--pkg kube1.14.1.tar.gz \ # 离线安装包名称
--version v1.14.1 # kubernetes 离线安装包版本,这渲染kubeadm配置时需要使用
然后就没有然后了。。。
本文到此为止。
但是字数少了微信公众号文章不让发,所以来补充一堆废话:
一直觉得k8s的HA安装没有一个很优雅的方式,大部分都有外部依赖,haproxy keepalived等,构建部署时就会变得麻烦,所以很多人写了ansible一定程度上缓解了这个问题,但是对于不太熟悉ansible的同志还不是很友好,我们很多客户装出问题了可能日志都不太会看。
更大的问题是依赖的组件变多出问题概率会变大,比如我们遇到的 keepalived无故CPU撑爆,无法很好的跨平台支持,用yum等其他工具安装可能源不一致装不了或者版本不一致造成问题等,最终把keepalived跑在容器里,一定程度缓解一些问题。 haproxy还有一些配置也会影响链接探活时间等,如果是非专业人士的话还是很容易出问题的,当然如果你十分熟悉这些工具基本还是可以很稳定的做HA的。
现在还有很多方案,只是一个HA而已,把方案搞的极重,我承认他们功能做的确实强大,但强大的背后牺牲了复杂度,这是我不认同的理念,所以我十分佩服drone这类的软件,能那么简单还那么强大。
如何看待UI化安装
我是怒喷UI化安装的方式,UI绝逼是自动化道路上的绊脚石。首先论安装效率和易用性,绝对比不上sealos,其次 命令行或者API或者sdk的方式意味着你可以写代码去调用他,举个更明确的例子,比如sealos你就可以接入到ci cd系统中去部署构建你的k8s集群,而任何一个UI安装的是无法做到的,再比如你有1000个节点,你通过写个简单的shell就可以做到,而UI你可能要手动添加1000个ip,还比如你想根据节点故障自动添加节点写一个程序处理这件事,就需要命令行。
就好比你用kubectl和yaml去部署应用绝对比你在UI上填一堆表单靠谱,当然通过页面帮助渲染生成yaml还是可以的。之前使用阿里云也是发现用命令行工具上传到oss比在界面上点来点去快多了,代码还可以复用,还能集成到cicd中自动发布离线包,使用terraform创建虚拟机也比界面上不知道快到哪里去了。总之程序员应当以程序的思维去解决问题,要想从繁杂的手动操作中解脱出来--远离界面。。。
PS 界面用来看或是触发还是可以的。API>CLI>GUI 咱产品首先是面向程序的,其次才是面向人的。
说了这么多该谈sealos的优势了
简单
使用简单一条命令,不多说。
原理简单
安装最核心的两块,一个是定制的kubeadm这个最重要的是kubeadm join时在宿主机上增加了一条ipvs规则去代理所有的master,另一块是lvscare的static pod用于守护这个ipvs规则,不管那个master不可访问就回去清理掉对应ipvs的real server ,master恢复时就去重新添加上。 你可以清楚的用ipvsadm -Ln看到。 也不用担心lvscare的稳定性,因为它同样非常简单,而且底层调用的是kube-proxy用的ipvs库,是非常稳定的。
然后在每台机器上/etc/hosts里加了一条指向apiserver的配置 每个node上都会有这个ipvs规则,有人问每个node上都代理是不是比较浪费资源啥的,这就是内核中一条记录而已,一台机器上创建上万条都不是事,kube-proxy创建虚拟ip时同样每个节点都会创建,不在乎多这一条。所以基本不需要像keepalived haproxy那样消耗额外资源。
代码简单
sealos代码不过两百行左右,所以越简单出问题概率越低,主要包含两个部分,一部分是执行远程命令的库,这个ssh的库已经是比较成熟稳定的了,所以不在需要ssh-pass类似的工具。 另一部分就是在masters 和nodes上执行我们定制的超级kubeadm命令。 sealos只是个执行命令的工具,只要安装成功了就不会因为sealos的问题导致集群有问题,sealos的bug更多是影响集群安装成功率。
稳定
ipvs是内核转发与负载均衡,这个是相当稳定的,kube-proxy ipvs模式就是用的相同方案,真正的流量都是走ipvs走的,lvscare只是负责守护,每5秒检查一次后端master是不是正常的。 可定制安装时可以指定你自定义的kubeadm配置文件,这样使用外部的etcd 自定义证书什么的都不是事
简单的不像强大
总结本人安装k8s多年,来回顾一下心路历程 最初的二进制安装安装复杂,管理维护麻烦,虽然我都写成脚本了,但是还嫌心累
后来用官方的脚本,打开一看6000行的shell... 放弃。。。
kubeadm出现缓解了这一问题,工程化思维去解决安装问题,是个正确的路子,想当年我基于kubeadm做HA时官方文档都没有,社区能搞定这个的也为数不多,后来官方文档一出,教程便铺天盖地了。。。 kubeadm还不够好,现在已经能把node节点变控制节点了,是个很大进步,但是没有解决负载均衡问题 自带负载均衡的出路在哪?答案是ipvs,类似超级kubeadm的实现,我们也会积极的把这个特性贡献给社区。未来安装会变得极其简单,当然如果你是sealyun用户,现在安装就已经是极其简单了,哈哈