virtual kubelet 调研

1. 背景:

  1. Virtual Kubelet 是什么?

    Virtual Kubelet 是 Kubernetes kubelet 的一种实现,它伪装成 kubelet,目的是将 Kubernetes 集群连接到其他 API,这些API的入口被成为Provider。 这就使得 Kubernetes 的Node能够得到其他CaaS平台的支持,例如无服务器容器平台。

  2. Virtual Kubelet 不是什么?

    不是用来实现集群联邦的手段。它是用来扩展Node 属性到一个容器平台上。

2. Virtual kubelet 工作原理

在这里插入图片描述

​ 目前的社区的virtual kubelet 不具备任何生产能力,但是提供了一个library,可以给各家公有云厂商,用来构建自己的virtual kubelet 版本。virtual kubelet 的代码总体比较简单,没太必要详解了。

  • virtual kubelet 在启动的时候,会马上创建一个Node 出来
  • node 背后的provider 提供接口查询相关node 信息
  • 它会同时watch node 和 pod 的事件,也就是要有两个控制器,用于更新node 的信息
  • 针对分配到该节点上的pod,增加消息处理
  • 消息处理的过程,是把消息放在另一个队列里
  • provider的worker 去处理,这里会作深度拷贝
  • 处理完以后,更新pod 的status

3. Virtual kubelet 演示

  1. 从源码构建:
mkdir -p ${GOPATH}/src/github.com/virtual-kubelet
cd ${GOPATH}/src/github.com/virtual-kubelet
git clone https://github.com/virtual-kubelet/virtual-kubelet
cd virtual-kubelet && make build
  1. 在项目的根目录,启动这个virtual kubelet.
  • 修改下vkubelet-mock-0-cfg.jso,把cpu 的数量改成30,这样你就可以随便创建pod了(当然都是mock的)

./bin/virtual-kubelet --nodename vkubelet-mock-0 --provider mock --provider-config ./hack/skaffold/virtual-kubelet/vkubelet-mock-0-cfg.json --startup-timeout 10s
  1. check
kubectl  get node
NAME                STATUS   ROLES                  AGE     VERSION
vkubelet-mock-0     Ready    agent                  5h10m   v1.15.2-vk-v1.5.0-29-g68347d4e
worker-cluster4-1   Ready    control-plane,master   41d     v1.21.1
worker-cluster4-2   Ready    <none>                 41d     v1.21.1
worker-cluster4-3   Ready    <none>                 41d     v1.21.1
  1. 创建一个demo
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: xlm
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/hostname: vkubelet-mock-0
      tolerations:
      - key: "virtual-kubelet.io/provider"
        operator: "Equal"
        value: "mock"
        effect: "NoSchedule"
  1. check
[root@worker-cluster4-1 lmxia]# kubectl  get po -n xlm
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6999766b55-8b54p   1/1     Running   0          5h12m
nginx-deployment-6999766b55-bkdzl   1/1     Running   0          5h12m
nginx-deployment-6999766b55-n2nmv   1/1     Running   0          5h12m

4. 结论

  • virtual kubelet 无法支持 downward API,所以如果用pod 直接透传的话,目前看是无法支持istio的。
  • 与admiralty 的关系,admiralty 只是借鉴了virtual kubelet 的node 管理的功能。
  • 普通集群无法直接使用virtual kubelet 也没人这么做,如果这么做的话,最终会演化成admiralty。

virltual kubelet 被设计用来,扩展类似AWS fargate,阿里的ECI,Azure的ACI,目前腾讯的EKSCI还不支持 virtual kubelet。

目前针对客户的kubernetes集群如果是用virtual kubelet 管理,那么最终还是会变成admiralty的架构。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值