2

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

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

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

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

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

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

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

好的,我将这些二进制文件添加到我的节点(使用此 DS 作为参考),将卷添加到 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] 挂载命令失败,状态:失败,原因:卷 2c21311b-7329-4cf4-8230-f3ce2f23cf1a 不可用

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

  • 我知道的最后一种挂载卷的方法是 cinder in-tree 支持,它至少应该从 k8s 1.5--cloud-provider=openstack开始工作,并且除了--cloud-configkubelet 选项之外没有任何特殊要求。

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

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

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

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

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

有没有其他方法可以将 OpenStack cinder 卷附加到仅依赖 kubelet 的静态 pod(当集群实际上还没有准备好时)?关于我想念的云有什么想法吗?

4

1 回答 1

2

消息Volume has not been added to the list of VolumesInUse in the node's volume status for volume.说该节点的附加/分离操作仅委托给控制器管理器。Kubelet 等待控制器进行附加,但卷没有达到适当的状态,因为控制器还没有启动。解决方法是设置kubelet标志--enable-controller-attach-detach=false,让kubelet挂载、挂载等。由于以下原因,此标志默认设置为 true

  • 如果一个节点丢失,连接到它的卷可以由控制器分离并重新连接到其他地方。

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

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

于 2018-07-03T19:21:21.210 回答