前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >终极k8s HA方式 - 附上个人安装心路历程

终极k8s HA方式 - 附上个人安装心路历程

作者头像
sealyun
发布2019-07-25 17:42:31
1.8K0
发布2019-07-25 17:42:31
举报
文章被收录于专栏:sealyun

项目地址

安装:

代码语言:javascript
复制
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用户,现在安装就已经是极其简单了,哈哈

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 sealyun 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档