Talos-推出“用于Kubernetes的现代Linux发行版”



前几天,美国工程师Andrew Rynhard 提出了一个有趣的项目:专门用于运行Kubernetes集群的紧凑型Linux发行版。 它取自古希腊神话中的名字-Talos

该项目的出现是受到Kelsey Hightower在2015年发布的一条推文启发的,他在那条推文中说,我们只需要等待有条件的KubeOS出现(在此之后,多云环境的生活就会变得非常美好):



顺便说一句,随着Talos的出现,这个故事还在继续 :有人回答了一条历史推文,说这样的系统已经出现了,Talos的作者说,如果凯尔西研究这个项目,他将很高兴。 但是,尚未跟踪后者的反应。

显然,Talos的开发是由一个人(代表自己在整个公司内 -Autonomy)完成的,他花了一年多的时间。 现在,当达到最低可用性的状态时,作者希望Kubernetes /云原生社区的其他代表也会加入他的行列。 那么该项目的本质是什么?

Talos的原理和特点


Talos被定位为专门为Kubernetes创建的现代Linux发行版。 为了实现其目标,请遵循以下方法:

极简主义


无处不在的极简主义是Talos建筑的基石之一。 这里的一个引人注目的示例是使用的初始化服务 ,该服务 (与该领域的现代趋势相反)遵循UNIX的哲学,即“每个程序都做一件事,但是很好”:

我们希望让init专注于一项任务-启动Kubernetes。 它根本没有任何其他动作的机制。

开发人员走得更远,剥夺了他们的操作系统对系统管理员熟悉的主机的用户访问权限: Talos既没有命令外壳,也没有SSH守护程序,甚至没有能力在主机上启动自己的进程 。 真的:如果需要运行Kubernetes以及其他功能,为什么还要花所有这些钱? Talos中的几乎所有流程都在容器内运行。

但是,由于世界还不是那么完美(为了使OS能够“单独”完全运行),因此仍然有一些用于操作OS的工具:

  • osd守护程序,其实现原理是提供最低限度的必要特权(最低特权原则)并提供用于管理节点的API(基于gRPC);
  • osctl CLI实用程序允许您与在每个节点上运行的osd服务进行通信。

因此,已实现了一组基本操作功能:重新启动服务和群集节点,从容器接收内核日志(dmesg)和从容器接收数据,将数据插入节点配置文件等。

所有这些组件(init,osd,osctl ...)以及分发工具包中的其他一些组件都用Go编写 。 顺便说一句,所有源代码均根据开放源代码许可Mozilla Public License 2.0的条款进行分发。

安全性


上面描述的极简主义方法( 运行Kubernetes所需的所有方法)+本身仅颁发最小特权的原理减少了潜在的攻击面。 同样在塔洛斯:

  • 所包含的内核是根据内核自我保护项目( KSSP )的建议配置的,该项目重点在于内核独立保护免受潜在错误和漏洞的能力(而不是出于相同目的使用用户空间实用程序);
  • 根文件系统以只读方式挂载,再加上缺少shell / SSH,使系统不可变;
  • 使用双向TLS(mTLS)与API进行交互;
  • Kubernetes设置和配置是根据CIS (Internet安全中心) 准则应用的

极简主义和专注于不变性的另一个优势是系统行为的可预测性 (因为影响环境的因素数量减少了)。

相关性


作者承诺Talos将基于Kubernetes的倒数第二个上游发行版(但是现在支持 K8s 1.13.3)和最新的可用LTS Linux内核发行版(现在使用4.19.10)。

系统组成


该发行版的主要组件(除了内核和“专有”实用程序之外)是:

  • musl-libc-作为标准C库;
  • golang-用于init及其其他工具;
  • gRPC-用于API;
  • 容器化-在容器中启动系统服务(与Kubernetes的CRI插件一起使用);
  • kubeadm-用于部署集群。

与Talos合作


项目文档中提供了适用于AWS,KVM和Xen部署的Talos部署示例。 为了快速说明外观,以下是Linux KVM虚拟机的安装算法:

1.在主机上安装主节点:

 docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdb -f -p bare-metal \ -u http://${IP}:8080/master.yaml 

2.创建虚拟机:

 virt-install -n master --description "Kubernetes master node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdb \ --network bridge=br0,model=e1000,mac=52:54:00:A8:4C:E1 \ --graphics none --boot hd --rng /dev/random 

3.创建工作节点的类似操作:

 docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdc -f -p bare-metal \ -u http://${IP}:8080/worker.yaml virt-install -n master --description "Kubernetes worker node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdc \ --network bridge=br0,model=e1000,mac=52:54:00:B9:5D:F2 \ --graphics none --boot hd --rng /dev/random 

配置osd和osctl之间的交互基本上可以归结为生成用于身份验证的密钥(已经提到了mTLS),并在此处进行了描述。

与它们的进一步合作归结为诸如osctl rebootosctl statsosctl logs 。 演示k8s.io命名空间中容器的输出:

 $ osctl ps -k NAMESPACE ID IMAGE PID STATUS k8s.io 0ca1… sha256:da86… 2341 RUNNING k8s.io 356f… sha256:da86… 2342 RUNNING … k8s.io e42e… sha256:4ff8… 2508 RUNNING k8s.io kubelet k8s.gcr.io/… 2068 RUNNING 

使用Talos配置Kubernetes集群的过程在此处 (关键节点)和此处 (工作人员)可用。

现状与前景


该项目处于alpha版本阶段(最新版本为v0.1.0-alpha.18 ),当然,在此阶段,它看起来像是一个有趣的实验,而不是真正接近生产的任何项目。

但是,最近Talos发布之后(在GitHub上已经有600颗星),对Talos的兴趣激增,并且唯一的作者呼吁共同创造,可以极大地刺激其发展。


Talos最近几天的项目活动

至少,发行版包含与世界相关的云原生想法,其质量实现是时间问题。

聚苯乙烯


另请参阅我们的博客:

Source: https://habr.com/ru/post/zh-CN440810/


All Articles