WKSctl是一个开源项目,用于通过SSH安装、引导和管理Kubernetes集群,包括其插件。WKSctl是 Cluster API (CAPI) 按照GitOps方式所提供的一个项目。Kubernetes集群是由YAML文件配置的,WKSctl在Git的每次推送后都会应用更新,从而允许用户按需拥有可复制的集群。
CAPI是一个Kubernetes项目,能够让用户以声明的方式创建、配置和管理集群,就像使用Deployment或Service等其他Kubernetes资源那样。目前,AWS或VMware vSphere等基础设施供应商提供了其他的CAPI实现。WKSctl有一个有趣的特点,它只需一个SSH端点列表以及引导Kubernetes的目标虚拟机的关联凭据即可。
最近,InfoQ采访了Weaveworks的Alexis Richardon(CEO)、Mark Ramm(产品总监)、Cornelia Davis(CTO)和Mark Emeis(工程师经理)以了解更多关于WKSctl的信息。
InfoQ:什么是WKSctl?您为什么要构建另外一个Kubernetes工具?
Alexis Richardson:目前,有像kops或Kubeadm这样自行安装(roll your own,简称RYO)的安装程序,也有像rancher、kind或minikube这样打包好的安装程序。WKSctl让我们拥有RYO的强大功能,同时兼有打包好的安装程序的功能,适用于开发者、数据中心和云端。 WKSctl是CAPI的一个开源实现,而不是Kubernetes的一个发行版。它是一个GitOps安装程序和控制器,适用于上游Kubernetes集群。WKSctl订阅一个存储库(使用Flux),其包含Kubernetes和其他我们希望安装的部件。然后,WKSctl构建并引导该集群。我们要做就是给WKSctl提供一个SSH端点列表,剩下的事就由WKSctl完成。一旦该集群启动并运行,如果我们在Git中更改了该集群的配置,那么WKSctl会把这些更改应用到该集群上。 它的总体的好处是可以灵活地使用Kubernetes的多个不同的发行版本。我们可以有可复制的集群,想复制多少次就可以复制多少次。集群自身是牛而不是宠物。我们认为,理想情况下,集群应该是百分之百可丢弃的,当集群处于不正确的状态时,我们应该得到通知。
InfoQ:WKSctl的典型使用场景是什么?
Richardson:WKSctl的目的不是进行机器配置。因此,WKSctl的理想用户是使用Terraform、vSphere、Salt、Ansible或Chef来自己配置机器的人。因此,用户可以使用WKSctl在这些机器上安装和引导Kubernetes。但是,如果我们不想配置机器,那么,也可以用Firekube,它比WKSctl更进一步。Firekube使用一个vanilla Kubernetes,并用WKSctl把它安装在Ignite(Firecracker虚拟机)集群上。 另一个使用场景是多云或混合云,这方面有更先进的模式,我们称之为“master-of-masters,简称MoM”模式。在这个模式中,我们将拥有一个MoM集群,它会在每个目标环境中供应Kubernetes主管理集群,后续我们就可以供应任意数量的Kubernetes集群了。
图源:GitOps和集群API:Master-of-Masters
InfoQ:WKSctl是如何运行的?它是CLI还是一个Kubernetes控制器,还是两者兼有?
Mark Emeis:两者兼有。WKSctl用CLI引导Kubernetes集群中的第一个节点,然后安装WKSctl控制器以管理其他master和worker节点的安装。WKSctl CLI基于Git存储库创建一个集群,安装Flux以订阅该Git存储库,这就是我们所谓的“Git到Kubernetes的调解循环”。最终,WKSctl安装一个自定义资源控制器,以便根据从Git收到的配置来应用集群级的更改。
Cornelia Davis:有两个调解循环。Flux是一个调解器,监控Git存储对集群配置的所有更改。本质上,它的工作是把这些来自Git的东西提交给etcd。第二个调解器是WKSctl控制器,它就像Kubernetes中的replication控制器那样监控etcd。
InfoQ:如何给Kubernetes集群打补丁和升级?是否有停机时间?
Mark Ramm:WKSctl对CAPI manifest的更改做出反应。当运维人员改变Kubernetes的版本时,控制器更新master节点,然后是worker节点。当集群被有效更新时,需要构建应用程序以重新处理调度。对于应用来说,遵循12因素应用程序模式是个良好的开端。
InfoQ:我们能否自定义集群架构以解耦组件,比如有专门用于etcd的虚拟机而API组件位于另外的服务器中?
Ramm:默认情况下,WKSctl启动时,会有worker节点和3个master节点。我们希望保持简单。如果要做更复杂的事情,我们会推荐使用我们的商业产品WKP。总体上,我们看到WKSctl发生的情况是,用户在按需创建开发和测试集群,这些集群是短暂的(规模不大)。很多集群来来去去,而不是只有一个大集群。 我们发现,一般情况下,出于权限和安全的原因,企业用户倾向于使用更多的集群而不是一个大型集群。另外,当我们水平扩展集群时,系统的扩展很容易,这跟创建大型集群刚好相反。
InfoQ:在社区中,WKSctl的采用情况怎样?
Ramm:德国电信是刚开始使用WKSctl的客户。最近,他们分享了一个小视频,演示了WKSctl在他们的环境中的工作情况。
原文链接:
WKSctl: a Tool for Kubernetes Cluster Management Using GitOps
领取专属 10元无门槛券
私享最新 技术干货