如何将OpenStack卷连接到Kubernetes staic吊舱?

如何将OpenStack卷连接到Kubernetes staic吊舱?,kubernetes,openstack,kubelet,Kubernetes,Openstack,Kubelet,假设我在OpenStack云中使用kubeletv1.10.3引导一个主节点,并且我希望有一个用于k8s必需品的“自托管”单个etcd节点作为pod 在启动kubeapiserver组件之前,您需要一个工作的etcd实例,但当然,您不能只执行kubectl apply-f或将清单放入addon manager文件夹,因为集群根本没有准备好。 有一种方法可以在没有现成的apiserver的情况下由kubelet启动POD。它被称为staticpods(yaml Pod定义通常位于/etc/kube

假设我在OpenStack云中使用
kubelet
v1.10.3引导一个主节点,并且我希望有一个用于k8s必需品的“自托管”单个etcd节点作为pod

在启动
kubeapiserver
组件之前,您需要一个工作的etcd实例,但当然,您不能只执行
kubectl apply-f
或将清单放入
addon manager
文件夹,因为集群根本没有准备好。 有一种方法可以在没有现成的apiserver的情况下由kubelet启动POD。它被称为staticpods(yaml Pod定义通常位于
/etc/kubernetes/manifests/
)。这就是我启动“系统”吊舱的方式,比如apiserver、调度器、控制器管理器和etcd本身。以前我只是从节点挂载了一个目录来持久化etcd数据,但现在我想使用OpenStack blockstorage资源。这里有一个问题:我如何连接、装载和使用OpenStack cinder volume来保存来自静态pod的etcd数据

正如我今天学到的,连接OpenStack卷至少有3种方法:

  • CSIOpenStack cinder驱动程序,这是一种全新的卷管理方式。而且它不符合我的要求,因为在静态pods清单中,我只能声明pods,而不能声明PVC/PV等其他资源,而CSI文档说:

    csi卷类型不支持从Pod直接引用,只能通过PersistentVolumeClaim对象在Pod中引用

  • 在csi之前,附加卷的方式是:FlexVolume

    FlexVolume驱动程序二进制文件必须安装在每个节点(在某些情况下是主节点)上预定义的卷插件路径中

好的,我将这些二进制文件添加到我的节点(),将卷添加到pod清单中,如下所示:

volumes:
- name: test
  flexVolume:
    driver: "cinder.io/cinder-flex-volume-driver"
    fsType: "ext4"
    options:
      volumeID: "$VOLUME_ID"
      cinderConfig: "/etc/kubernetes/cloud-config"
volumes:
  - name: html-volume
    cinder:
      # Enter the volume ID below
      volumeID: "$VOLUME_ID"
      fsType: ext4
并从kubelet日志中获得以下错误:

驱动程序调用。go:258]装载命令失败,状态:失败,原因:卷2c21311b-7329-4cf4-8230-f3ce2f23cf1a不可用

这很奇怪,因为我确信这个Cinder卷已经连接到我的CoreOS计算实例

  • 我知道的最后一种装载卷的方法是cinder-in-tree支持,它应该可以工作,而且除了
    --cloud provider=openstack
    --cloud config
    kubelet选项之外,没有任何特殊要求
用于为静态pod声明卷的yaml清单部分如下所示:

volumes:
- name: test
  flexVolume:
    driver: "cinder.io/cinder-flex-volume-driver"
    fsType: "ext4"
    options:
      volumeID: "$VOLUME_ID"
      cinderConfig: "/etc/kubernetes/cloud-config"
volumes:
  - name: html-volume
    cinder:
      # Enter the volume ID below
      volumeID: "$VOLUME_ID"
      fsType: ext4
不幸的是,当我尝试此方法时,我从kubelet处得到以下错误:

尚未将卷添加到卷的节点卷状态下的卷使用列表中

不知道这意味着什么,但听起来节点状态无法更新(当然,还没有etcd和apiserver)。可悲的是,这是我最有希望的选择


是否有其他方法仅依靠kubelet将OpenStack cinder卷连接到静态pod(当集群实际上还没有准备好时)?关于我错过的哪一个云出现上述错误,有什么想法吗?

消息
卷尚未添加到卷列表使用节点卷状态中的卷。
表示该节点的附加/分离操作仅委派给controller manager。Kubelet等待控制器建立连接,但由于控制器尚未启动,卷未达到适当的状态。 解决方案是设置kubelet标志
--启用控制器连接分离=false
,以允许kubelet连接、装载等。由于以下原因,此标志默认设置为true

  • 如果节点丢失,可以分离连接到该节点的卷 由控制器控制并重新连接到其他位置

  • 无需制作附加和分离凭据 出现在每个节点上,提高了安全性

在您的情况下,将此标志设置为false是合理的,因为这是实现您想要的唯一方法