Как использовать OpenStack Cinder для создания класса хранилища и динамического предоставления постоянного тома в кластере Kubernetes

Недавно, занимаясь кубернетами, я обнаружил, что нет документа и примера, конкретно объясняющего, как правильно использовать золу в кубернетах.

Итак, как настроить использование cinder в кубернетах?


person Zhao Jian    schedule 06.09.2017    source источник


Ответы (2)


Я провел небольшой эксперимент и придумал, как настроить cinder с кубернетами. Просто найдите подходящий документ и поделитесь им.

Подготовка

  • кластер кубернетов
  • окружение openstack и убедитесь, что сервис cinder доступен

Фон

Согласно моему расследованию, компонент kube-controller-manager отвечает за загрузку подключаемых модулей тома и связанных с Kubernetes. Таким образом, мы могли сделать cinder доступным, настроив kube-controller-manager конфигурацию.

Шаги

  1. Подготовьте cloud.conf файл с вашими кредитами openstack

Подготовьте свои кредиты openstack и сохраните их как файл, например /etc/kubernetes/cloud.conf в панели управления kubernetes, где находится kube-controller-manager. Ниже приведен пример для cloud.conf

[Global]
auth-url=$your_openstack_auth_url
username=$your_openstack_user
password=$your_user_pw
region=$your_openstack_reigon
tenant-name=$your_project_name
domain-name=$your_domain_name
ca-file=$your_openstack_ca

Большинство из них можно найти в вашем stackrc файле. И ca-file элемент является необязательным, в зависимости от того, является ли ваш URL-адрес авторизации openstack http или https.

  1. Настройте kube-controller-manager начальную конфигурацию

Эта ссылка представляет собой полную информацию о параметрах kube-controller-manager (https://kubernetes.io/docs/admin/kube-controller-manager/)

На самом деле мы должны добавить два дополнительных параметра на основе вашего текущего

--cloud-provider=openstack
--cloud-config=/etc/kubernetes/cloud.conf

В основном есть два способа запустить kube-controller-manager: 1) с помощью systemd 2) с помощью статического модуля.

Всего один совет: если вы используете статический модуль для kube-controller-manager, убедитесь, что вы подключили все файлы, такие как cloud.conf или файл openstack ca в свой контейнер.

Подтверждение

Мы создадим класс хранения и будем использовать этот класс хранения для динамического создания постоянного тома.

  1. Создайте класс хранения с именем standard:

demo-sc.yml:

apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: standard
  annotations:
    storageclass.beta.kubernetes.io/is-default-class: "true"
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: EnsureExists
provisioner: kubernetes.io/cinder

Использование команды kubectl create -f demo-sc.yml для создания и использование команды kubectl get sc для проверки правильности создания

NAME                 TYPE
standard (default)   kubernetes.io/cinder 
  1. Создайте PersistentVolumeClaim, чтобы использовать StorageClass для предоставления постоянного тома в Cinder:

demo-pvc.yml:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cinder-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: "standard"
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Создание PVC от kubectl create -f demo-pvc.yml

А теперь проверка командой kubectl get pvc

NAME           STATUS    VOLUME                                         CAPACITY   ACCESSMODES   STORAGECLASS   AGE
cinder-claim   Bound     pvc-5dd3d62e-9204-11e7-bc43-fa163e0e0379   1Gi          RWO           standard       23h

А в среде openstack проверка командой cinder list | grep pvc-5dd3d62e-9204-11e7-bc43-fa163e0e0379

    root@ds0114:~# cinder list | grep pvc-5dd3d62e-9204-11e7-bc43- fa163e0e0379
| ddd8066d-2e16-4cb2-a89e-cd9d5b99ef1b | available | kubernetes-dynamic- pvc-5dd3d62e-9204-11e7-bc43-fa163e0e0379 |  1   |   CEPH_SSD  |  false   |                                       |

Итак, теперь StorageClass хорошо работает с Cinder в Kubernetes.

person Zhao Jian    schedule 06.09.2017

Большое спасибо за вашу отличную публикацию!
Решение работает для меня (K8S 1.14.3, OpenStack Queen), и я только что добавил фрагменты параметра / volumeMounts / volume, как показано ниже:

Параметр:

- --cloud-provider=openstack  
- --cloud-config=/etc/kubernetes/cloud-config  

volumeMounts:

-- mountPath: /etc/kubernetes/cloud-config  
   name: cloud  
   readOnly: true  

объем:

-- hostPath:  
     path: /etc/kubernetes/cloud.conf  
     type: FileOrCreate  
   name: cloud
person Bodhi Wang    schedule 11.12.2020