Как подключить том OpenStack к статике Kubernetes? - PullRequest
0 голосов
/ 01 июля 2018

Предположим, что я загружаю один главный узел с 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 (когда кластер фактически не готов)? Любые идеи о том, что облако, которое я пропускаю, получили выше ошибок?

1 Ответ

0 голосов
/ 03 июля 2018

Сообщение 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 является разумной, поскольку это единственный способ достичь того, чего вы хотите.

...