首页 文章

如何将OpenStack卷附加到Kubernetes staic pod?

提问于
浏览
1

假设我在OpenStack Cloud 中使用 kubelet v1.10.3引导单个主节点,我希望有一个"self-hosted"单个etcd节点作为pod的k8s必需品 .

在启动 kube-apiserver 组件之前,您需要一个工作的etcd实例,但当然您不能只执行 kubectl apply -f 或将清单放到 addon-manager 文件夹中,因为集群根本没有准备好 . 有一种方法可以通过kubelet启动pod而无需使用现成的apiserver . 它被称为 static pods(yaml Pod定义通常位于 /etc/kubernetes/manifests/ ) . 这就是我启动"system" pods的方式,如apiserver,scheduler,controller-manager和etcd本身 . 以前我只是从节点挂起一个目录来保存etcd数据,但现在我想使用OpenStack blockstorage资源 . 这里有一个问题:我如何附加,安装和使用OpenStack cinder卷来保存来自静态pod的etcd数据?

正如我今天所了解的,至少有3种方法可以附加OpenStack卷:

  • CSI OpenStack cinder驱动程序,这是管理卷的新方法 . 它不符合我的要求,因为在静态pods中,我只能声明Pod而不是其他资源,如PVC / PV,而CSI文档说:

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

  • before-csi附加卷的方法是: FlexVolume .

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

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

volumes:
- name: test
  flexVolume:
    driver: "cinder.io/cinder-flex-volume-driver"
    fsType: "ext4"
    options:
      volumeID: "$VOLUME_ID"
      cinderConfig: "/etc/kubernetes/cloud-config"

并从kubelet日志得到以下错误:

driver-call.go:258] mount命令失败,状态:失败,原因:卷2c21311b-7329-4cf4-8230-f3ce2f23cf1a不可用

这很奇怪,因为我确信这个Cinder卷已经附加到我的CoreOS计算实例上了 .

  • 和挂载卷的最后一种方法我知道的是cinder in-tree支持,它应该在at least k8s 1.5之后起作用,并且除了 --cloud-provider=openstack--cloud-config kubelet选项之外没有任何特殊要求 .

用于声明静态pod的音量的yaml清单部分如下所示:

volumes:
  - name: html-volume
    cinder:
      # Enter the volume ID below
      volumeID: "$VOLUME_ID"
      fsType: ext4

不幸的是,当我尝试这种方法时,我从kubelet得到以下错误:

卷尚未添加到卷的节点卷状态中的VolumesInUse列表中 .

不知道它意味着什么,但听起来节点状态无法更新(当然,还没有etd和apiserver) . 不幸的是,这对我来说是最有前途的选择 .

有没有其他方法可以将OpenStack cinder卷附加到仅依赖于kubelet的静态pod(当群集实际上没有准备好时)?关于我错过了什么 Cloud 的任何想法都有上述错误?

1 回答

  • 2

    消息 Volume has not been added to the list of VolumesInUse in the node's volume status for volume. 表示该节点的附加/分离操作仅委派给controller-manager . Kubelet等待控制器进行附件,但音量还没有达到 . 解决方案是设置kubelet标志 --enable-controller-attach-detach=false 让kubelet附加,挂载等 . 默认情况下,此标志设置为true,因为以下内容为reasons

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

    • 不需要在每个节点上都存在用于附加和分离的凭据,从而提高了安全性 .

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

相关问题