快速部署虚拟节点
在讲virtual kubelet之前,先理解一下kubelet在kubernetes中扮演什么样的角色,从。抽象的角度看一下kubernetes的运行原理。kubernetes是一个持续的和解循环。期望状态被提交给API Server,然后controller manager和kubelet以及系统内的其他组件不断努力实现这中期望的状态。
Kubernetes 在其控制平面内有许多组件,用于非常特定的目的。该Kubelet是运行在所有节点上管理Pod生命周期的代理。当Kubelet启动时,它会通过Kubernetes API 服务器将其自身添加为节点。然后,调度程序通过更新API中的pod资源并为nodeName属性分配值来为该节点分配工作。Kubelet会监视Kubernetes API服务器,以查看已nodeName分配的pod的任何更改。它通过在计划时创建新的pod,删除不再存在的pod以及更新作为卷安装的ConfigMaps和Secrets等相关资源来不断协调差异。
Kubelet还:
- 调用已配置的容器运行时(Docker,Rkt等)以在主机上创建,更新,删除容器。
- 从与分配给此节点的pod关联的映像注册表中提取图像。
- 在容器中创建和装入卷
- 使用Secrets,ConfigMaps和Downward API注入环境变量并更新卷
- 使用最新的Pod状态更新API服务器
- 为API服务器提供API以调用类似的内容 · kubectl exec · kubectl attach · kubectl logs · metrics used by the scheduler and dashboard
- 配置Pod网络
Virtual kubelet
virtual kubelet 是一个微软的一个开源的kubernetes kubelet的是实现。用于kubernetes连接到其他API。允许节点由其他服务支持
Virtual Kubelet是一个在当前集群中的容器内运行并将自己伪装成节点的应用程序。它通过Kubernetes API创建节点资源来实现此目的。然后它以与实际Kubelet相同的方式监视预定的Pod。事情开始有所不同。Virtual Kubelet不是与主机交互,而是与主机上的容器运行时交互,而是具有称为提供程序的模块化嵌入式后端。
每当Pod生命周期事件发生时,核心Virtual Kubelet逻辑都会调用提供程序,以通知它需要处理pod的创建,更新,删除等所需的提供程序。这允许nodeKubernetes集群内可以支持的多种可能性。提供者本身不需要担心注入ConfigMaps和Secrets,或者实现协调循环以确定是否需要创建,更新或删除某些内容。这一切都由Virtual Kubelet处理,以使实现提供程序尽可能无缝。
我们实施的第一个提供程序是Azure容器实例,也称为ACI。如果您不熟悉此产品,它实际上就是pod作为服务。无需担心底层虚拟机或控制平面管理; 您只需要担心容器组定义,Azure将处理其余部分。您每秒支付容器运行的费用。
我可以使用Virtual Kubelet做什么?
批处理作业 - 您不需要在群集中运行足够的VM来支持批处理工作负载。您只需为正常工作负载付费,批处理作业可以根据需要进行扩展,以便在更短的时间内完成它们,同时您每秒付费。
CI / CD - 当您的CI / CD管道中没有任务时,无需运行闲置的其他硬件或VM。您只需在任务运行时每秒付费。此外,当您有提交日期时,您可以避免长时间等待所有提交通过队列。它们都可以并行运行,而无需空闲的VM来支持容量。
无服务器 - 无服务器真正开始流行,虽然容器的预热时间不如Azure Functions或Lambda那么快,但它确实具有很大的吸引力。它允许您利用您已经使用的相同技术。
爆发 - 这将非常有趣,因为在虚拟Kubelet中构建了更多支持来运行所有工作负载。如果您使用自动扩展,并且您的流量出现峰值,则只需要为您的平均工作负载运行足够的容量; 当您的群集中的容量耗尽时,调度程序可以开始在ACI或其他提供程序中添加其他容器。