Предположим, что я загружаю один главный узел с kubelet
v1.10.3 в облаке OpenStack, и я хотел бы иметь в качестве модуля отдельный самообслуживаемый узел etcd для нужд k8s.
Перед запуском kube-apiserver
компонента вам нужен работающий экземпляр etcd, но, конечно, вы не можете просто выполнить kubectl apply -f
или поместить манифест в папку addon-manager
, потому что кластер вообще не готов.
Существует способ запуска стручков с помощью kubelet без наличия готового apiserver. Он называется static pods (определения Pod yaml обычно расположены в /etc/kubernetes/manifests/
). И так я запускаю «системные» модули, такие как apiserver, scheduler, controller-manager и т. Д. Ранее я только что смонтировал каталог с узла, чтобы сохранить данные etcd, но теперь я хотел бы использовать ресурс OpenStack blocktorage. И вот вопрос: как я могу присоединить, смонтировать и использовать том Cinder OpenStack для сохранения данных etcd из статического модуля?
Как я узнал сегодня, есть как минимум 3 способа присоединения томов OpenStack:
CSI Драйвер OpenStack cinder, который является довольно новым способом управления томами. И это не будет соответствовать моим требованиям, потому что в статических манипуляторах я могу объявлять только Pod, а не другие ресурсы, такие как PVC / PV, в то время как документы CSI говорят:
Тип тома csi не поддерживает прямую ссылку из Pod и на него можно ссылаться только через Pod через объект PersistentVolumeClaim.
способ подключения томов до 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-config
kubelet.
Часть манифеста yaml для объявления объема для статического модуля выглядит следующим образом:
volumes:
- name: html-volume
cinder:
# Enter the volume ID below
volumeID: "$VOLUME_ID"
fsType: ext4
К сожалению, когда я пробую этот метод, я получаю следующую ошибку от kubelet:
Том не был добавлен в список VolumesInUse в статусе тома узла для тома.
Не знаю, что это значит, но звучит так, как будто состояние узла не может быть обновлено (конечно, еще нет etcd и apiserver). Печально, это был самый многообещающий вариант для меня.
Существуют ли другие способы присоединения тома Cinder OpenStack к статическому модулю, опирающемуся только на kubelet (когда кластер фактически не готов)? Любые идеи о том, что облако, которое я пропускаю, получили выше ошибок?