Blogs

最简单的kubernetes HA安装方式-sealos详解

kubernetes集群三步安装

概述

本文教你如何用一条命令构建k8s高可用集群且不依赖haproxy和keepalived,也无需ansible。通过内核ipvs对apiserver进行负载均衡,并且带apiserver健康检测。

快速入门

sealos项目地址

准备条件

  • 装好docker并启动docker
  • 离线安装包 下载好拷贝到所有节点的/root目录下, 不需要解压,如果有文件服务器更好,sealos支持从一个服务器上wget到所有节点上

Continue reading

最简单的kubernetesHA安装方式-sealos详解

kubernetes集群三步安装 概述与设计原则 sealos旨在做一个简单干净轻量级稳定的kubernetes安装工具,能很好的支持高可用安装。 其实把一个东西做的功能强大并不难,但是做到极简且灵活可扩展就比较难。 所以在实现时就必须要遵循这些原则。 sealos特性与优势: 支持离线安装,工具与资源包(二进制程序 配置文件 镜像 yaml文件等)分离,这样不同版本替换不同离线包即可 证书延期 使用简单 支持自定义配置 支持 为什么不使用ansile 1.0版本确实是用ansible实现,但是用户还是需要先装ansile,装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了 使用教程 安装依赖 安装并启动docker 下载kubernetes 离线安装包.

Continue reading

k8s高可用一个kubeadm搞定,无依赖keepalived haproxy ansible

探讨可加QQ群:98488045

概述

地址sealos, 让kubernetes高可用不再需要keepalived haproxy和ansible,

sealyun定制超级版kubeadm通过ipvs代理多个master,优雅解决k8s高可用问题。

Continue reading

tektoncd pipeline教程 - kubernetes原生pipeline

kubernetes集群三步安装

概览

Tekton Pipeline,是一个k8s native的pipeline, 任务跑在pod中,通过自定义CRD去管理任务与工作流等等,我看完tekton之后感觉是功能很强大,但是有点过度设计了,没有drone的简约大方灵活之感

Continue reading

关于overlay2存储驱动的磁盘配额问题

kubernetes集群三步安装

概述

这篇短文向大家介绍一下正确使用存储驱动的姿势,非常有用。

为啥要用overlay2

  • docker centos(内核3.10)上默认存储驱动是devicemapper 的loop-lvm模式,这种模式是用文件模拟块设备,不推荐生产使用
  • direct lvm又不是一个开箱即用的模式,懒得配置
  • 最关键的是 docker in docker的情况下 device mapper是行不通的,典型的场景就是用drone时,构建docker镜像就不能正常工作
  • overlay存储驱动层数过多时会导致文件链接数过多可能会耗尽inode

所以当前overlay2是个比较好的选择

Continue reading

containerd与kubernetes集成

kubernetes集群三步安装

概念介绍

Continue reading

kubernetes 用户token教程

kubernetes集群三步安装

概述

kubernetes server account的token很容易获取,但是User的token非常麻烦,本文给出一个极简的User token生成方式,让用户可以一个http请求就能获取到。

Continue reading

属于极客的k8s管理工具fist, 强大的webterminal

kubernetes集群三步安装

介绍

fist是sealyun开发的精致的k8s管理工具,所有功能切入要害,而不追求多与重,接下来的介绍我相信有节操的k8s管理员一定会喜欢它。

terminal功能安装

安装地址

集成kubectl

terminal中可直接使用kubectl,用户就不需要登录到机器上或者自己装kubectl远程访问集群,当然这是基本功能

自动渲染kubeconfig文件

会根据传入的token去创建.kube/config 文件,如何给用户创建token 看这里

Continue reading

rook使用教程,快速编排ceph

kubernetes集群三步安装

本文中需要用的yaml文件和Dockerfile等都放到这个仓库 包含:rook operator ceph cluster storage class配置,mysql wordpress事例,性能测试fio Dockerfile与yaml等

Continue reading

基于Envoy的Ingress controller使用介绍

kubernetes集群三步安装

概述

ingress controller有很多,这里介绍其中一个contour, 我没有使用ingress controller的原因是

首先contour的实现是envoy, 其动态配置能力强于nginx,其次可以非常方便的对接监控系统,也是istio的核心组件。 本文其实还是以ingress的用法 为主, 因为不管是什么实现都兼容ingress的配置标准

还有就是contour是唯一实现了自定义IngressRoute CRD来实现更复杂的路由功能,websocket支持,健康检测,prefix rewite支持,还有TCP代理

Continue reading