Virtual Kubelet介绍
1. 简介
Virtual Kubelet是 Kubernetes kubelet 的一种实现,作为一种虚拟的kubelet用来连接k8s集群和其他平台的API。这允许k8s的节点由其他提供者(provider)提供支持,这些提供者例如serverless平台(ACI, AWS Fargate)、IoT Edge等。
一句话概括:Kubernetes API on top, programmable back。
2. 架构图
3. 功能
virtual kubelet提供一个可以自定义k8s node的依赖库。
目前支持的功能如下:
创建、删除、更新 pod
容器的日志、exec命令、metrics
获取pod、pod列表、pod status
node的地址、容量、daemon
操作系统
自定义virtual network
4. Providers
virtual kubelet提供一个插件式的provider接口,让开发者可以自定义实现传统kubelet的功能。自定义的provider可以用自己的配置文件和环境参数。
自定义的provider必须提供以下功能:
提供pod、容器、资源的生命周期管理的功能
符合virtual kubelet提供的API
不直接访问k8s apiserver,定义获取数据的回调机制,例如configmap、secrets
开源的provider
5. 自定义provider
创建自定义provider的目录。
5.1. PodLifecylceHandler
当pod被k8s创建、更新、删除时,会调用以下方法。
PodLifecycleHandler是被PodController来调用,来管理被分配到node上的pod。
5.2. PodNotifier(optional)
PodNotifier是可选实现,该接口主要用来通知virtual kubelet的pod状态变化。如果没有实现该接口,virtual-kubelet会定期检查所有pod的状态。
5.3. NodeProvider
NodeProvider用来通知virtual-kubelet关于node状态的变化,virtual-kubelet会定期检查node是状态并相应地更新k8s。
NodeProvider是被NodeController调用,来管理k8s中的node对象。
5.4. 测试
进入到项目根目录
5.5. 示例代码
Azure Container Instances Provider
https://github.com/virtual-kubelet/azure-aci/blob/master/aci.go#L541
Alibaba Cloud ECI Provider
https://github.com/virtual-kubelet/alibabacloud-eci/blob/master/eci.go#L177
AWS Fargate Provider
https://github.com/virtual-kubelet/aws-fargate/blob/master/provider.go#L110
参考:
https://github.com/virtual-kubelet/virtual-kubelet
https://virtual-kubelet.io/docs/
最后更新于