Модуль CEPH CSI

В платформе “Штурвал” в кластере доступны для установки драйверы Ceph Container Storage Interface (CSI) для RBD, CephFS:

  • Модуль Ceph CSI - CephFS (shturval-ceph-cephfs);
  • Модуль Ceph CSI - CephRBD (shturval-ceph-rbd).

В кластерах Kubernetes модули позволяют использовать виртуальный жесткий диск (RBD) или сетевую файловую систему (FS) для хранения данных.

Модули Ceph CSI не являются критически важными сервисами для работы платформы “Штурвал”. Для корректной работы Модулей Ceph CSI в кластере должен работать Модуль управления сетями кластера (shturval-networking).

Если при создании кластера были установлены Модули Ceph CSI, то в созданном кластере ручной настройки не потребуется.

Чтобы включить модули в созданном кластере, в графическом интерфейсе платформы перейдите в раздел Сервисы и репозитории и откройте страницу Установленные сервисы и найдите Модуль Ceph CSI.

Для установки выберите необходимый чарт (shturval-ceph-cephfs или shturval-ceph-rbd) и нажмите Управлять. В открывшемся окне выберите нужную версию. Рекомендуется создать для устанавливаемого чарта новый неймспейс.

После выбора версий в правой стороне экрана появятся доступные values чарта. Ниже представлены рекомендуемые параметры для конфигурации.

CEPH FS

Пример customvalues
csiConfig:
  - clusterID: <ваше значение параметра>
    monitors:
      - <ваше значение параметра>
      - <ваше значение параметра>
      - <ваше значение параметра>
secret:
  # Specifies whether the secret should be created
  create: true
  name: <ваше значение параметра>
  # Key values correspond to a user name and its key, as defined in the
  # ceph cluster. User ID should have required access to the 'pool'
  # specified in the storage class
  adminID: <ваше значение параметра>
  adminKey: <ваше значение параметра>
cephconf: |
    <ваша конфигурация кластера ceph>

    # Workaround for http://tracker.ceph.com/issues/23446
    fuse_set_user_groups = false

    # ceph-fuse which uses libfuse2 by default has write buffer size of 2KiB
    # adding 'fuse_big_writes = true' option by default to override this limit
    # see https://github.com/ceph/ceph-csi/issues/1928
    fuse_big_writes = true
storageClass:
  # Specifies whether the Storage class should be created
  create: true
  name: <ваше значение параметра>
  # Annotations for the storage class
  # Example:
  # annotations:
  #   storageclass.kubernetes.io/is-default-class: "true"
  annotations: {}

  # String representing a Ceph cluster to provision storage from.
  # Should be unique across all Ceph clusters in use for provisioning,
  # cannot be greater than 36 bytes in length, and should remain immutable for
  # the lifetime of the StorageClass in use.
  clusterID: <ваше значение параметра>
  # (required) CephFS filesystem name into which the volume shall be created
  # eg: fsName: myfs
  fsName: <ваше значение параметра>
  # (optional) Ceph pool into which volume data shall be stored
  # pool: <cephfs-data-pool>
  # For eg:
  # pool: "replicapool"
  pool: ""
  # (optional) Comma separated string of Ceph-fuse mount options.
  # For eg:
  # fuseMountOptions: debug
  fuseMountOptions: ""
  # (optional) Comma separated string of Cephfs kernel mount options.
  # Check man mount.ceph for mount options. For eg:
  # kernelMountOptions: readdir_max_bytes=1048576,norbytes
  kernelMountOptions: ""
  # (optional) The driver can use either ceph-fuse (fuse) or
  # ceph kernelclient (kernel).
  # If omitted, default volume mounter will be used - this is
  # determined by probing for ceph-fuse and mount.ceph
  # mounter: kernel
  mounter: ""
  # (optional) Prefix to use for naming subvolumes.
  # If omitted, defaults to "csi-vol-".
  # volumeNamePrefix: "foo-bar-"
  volumeNamePrefix: <ваше значение параметра>
  # The secrets have to contain user and/or Ceph admin credentials.
  provisionerSecret: <ваше значение параметра>
  # If the Namespaces are not specified, the secrets are assumed to
  # be in the Release namespace.
  provisionerSecretNamespace: ""
  controllerExpandSecret: <ваше значение параметра>
  controllerExpandSecretNamespace: ""
  nodeStageSecret: <ваше значение параметра>
  nodeStageSecretNamespace: ""
  reclaimPolicy: <ваше значение параметра>
  allowVolumeExpansion: true
  mountOptions: []
  # Mount Options
  # Example:
  # mountOptions:
  #   - discard
nodeplugin:
  tolerations:
  - key: <ваше значение параметра>
    operator: <ваше значение параметра>
    value: <ваше значение параметра>
    effect: <ваше значение параметра>
Параметр Описание Тип данных Пример
clusterID Уникальный идентификатор кластера Ceph string my-cluster-id
monitors Список IP-адресов мониторинга Ceph array 192.168.1.1
secret.name Имя создаваемого секрета string ceph-secret
secret.adminID Идентификатор сервисной учетной записи для доступа к Ceph string client.admin
secret.adminKey Ключ сервисной учетной записи для доступа к Ceph string sdfdff
cephconf Конфигурация Ceph в тектовом формате string [global] auth cluster required = cephx auth service required = cephx auth client required = cephx
storageClass.name Имя создаваемого Storage Class string csi-cephfs-sc
storageClass.clusterID Идентификатор кластера Ceph string cluster-id
storageClass.fsName Имя файловой системы CephFS, в которую будет создан PV string myfs
storageClass.volumeNamePrefix Префикс для имен томов string shturval-
storageClass.provisionerSecret Секрет для Provisioning с учетными данными пользователя и/или администратора Ceph string cephfs-secret
storageClass.provisionerSecretNamespace Неймспейс, в котором находится секрет для Provisioning с учетными данными пользователя и/или администратора Ceph. Если неймспейс не указан, предполагается, что секрет находится в неймспейсе “Release” string namenamespace
storageClass.controllerExpandSecret Секрет для расширения контроллера string ceph-expand-secret
storageClass.controllerExpandSecretNamespace Неймспейс, в котором находится секрет для расширения контроллера. Если неймспейс не указан, предполагается, что секрет находится в неймспейсе “Release” string namenamespace
storageClass.nodeStageSecret Секрет для монтирования узла string csi-cephfs-secret
storageClass.controllerExpandSecretNamespace Неймспейс, в котором находится секрет Секрет для монтирования узла. Если неймспейс не указан, предполагается, что секрет находится в неймспейсе “Release” string namenamespace
storageClass.reclaimPolicy Политика управления жизненным циклом тома (возможные значения: Retain, Delete, Recycle) string Delete
nodeplugin.tolerations.key Ключ toleration (разрешение размещения) string role
nodeplugin.tolerations.operator Оператор проверки условия toleration string Equal
nodeplugin.tolerations.value Значение ключа toleration string infra
nodeplugin.tolerations.effect Эффект toleration string NoSchedule

Требования к правам доступа сервисной учетной записи

client.kubecephfs mon ‘allow r’ mgr ‘allow rw’ mds ‘allow rws’ osd ‘allow rw pool=cephfs_data, allow rw pool=cephfs_metadata’

CEPH RBD

Пример customvalues
csiConfig:
  - clusterID: <ваше значение параметра>
    monitors:
      - <ваше значение параметра>
      - <ваше значение параметра>
      - <ваше значение параметра>
storageClass:
  # Specifies whether the storageclass should be created
  create: true
  name: <ваше значение параметра>

  # Use Thick Provisioning for this storage class. Default: false. Enabled if not false.
  thickProvision: false

  # Annotations for the storage class
  # Example:
  # annotations:
  #   storageclass.kubernetes.io/is-default-class: "true"
  annotations: {}

  # (required) String representing a Ceph cluster to provision storage from.
  # Should be unique across all Ceph clusters in use for provisioning,
  # cannot be greater than 36 bytes in length, and should remain immutable for
  # the lifetime of the StorageClass in use.
  clusterID: <ваше значение параметра>

  # (optional) If you want to use erasure coded pool with RBD, you need to
  # create two pools. one erasure coded and one replicated.
  # You need to specify the replicated pool here in the `pool` parameter, it is
  # used for the metadata of the images.
  # The erasure coded pool must be set as the `dataPool` parameter below.
  # dataPool: <ec-data-pool>
  dataPool: ""

  # (required) Ceph pool into which the RBD image shall be created
  # eg: pool: replicapool
  pool:  <ваше значение параметра>

  # (optional) RBD image features, CSI creates image with image-format 2 CSI
  # RBD currently supports `layering`, `journaling`, `exclusive-lock`,
  # `object-map`, `fast-diff`, `deep-flatten` features.
  # Refer https://docs.ceph.com/en/latest/rbd/rbd-config-ref/#image-features
  # for image feature dependencies.
  # imageFeatures: layering,journaling,exclusive-lock,object-map,fast-diff
  imageFeatures: ""

  # (optional) Specifies whether to try other mounters in case if the current
  # mounter fails to mount the rbd image for any reason. True means fallback
  # to next mounter, default is set to false.
  # Note: tryOtherMounters is currently useful to fallback from krbd to rbd-nbd
  # in case if any of the specified imageFeatures is not supported by krbd
  # driver on node scheduled for application pod launch, but in the future this
  # should work with any mounter type.
  # tryOtherMounters: false

  # (optional) uncomment the following to use rbd-nbd as mounter
  # on supported nodes
  # mounter: rbd-nbd
  mounter: ""

  # (optional) ceph client log location, eg: rbd-nbd
  # By default host-path /var/log/ceph of node is bind-mounted into
  # csi-rbdplugin pod at /var/log/ceph mount path. This is to configure
  # target bindmount path used inside container for ceph clients logging.
  # See docs/rbd-nbd.md for available configuration options.
  # cephLogDir: /var/log/ceph
  cephLogDir: ""

  # (optional) ceph client log strategy
  # By default, log file belonging to a particular volume will be deleted
  # on unmap, but you can choose to just compress instead of deleting it
  # or even preserve the log file in text format as it is.
  # Available options `remove` or `compress` or `preserve`
  # cephLogStrategy: remove
  cephLogStrategy: ""

  # (optional) Prefix to use for naming RBD images.
  # If omitted, defaults to "csi-vol-".
  # volumeNamePrefix: "foo-bar-"
  volumeNamePrefix: ""

  # (optional) Instruct the plugin it has to encrypt the volume
  # By default it is disabled. Valid values are "true" or "false".
  # A string is expected here, i.e. "true", not true.
  # encrypted: "true"
  encrypted: ""

  # (optional) Use external key management system for encryption passphrases by
  # specifying a unique ID matching KMS ConfigMap. The ID is only used for
  # correlation to configmap entry.
  encryptionKMSID: ""
  

  # Add topology constrained pools configuration, if topology based pools
  # are setup, and topology constrained provisioning is required.
  # For further information read TODO<doc>
  # topologyConstrainedPools: |
  #   [{"poolName":"pool0",
  #     "dataPool":"ec-pool0" # optional, erasure-coded pool for data
  #     "domainSegments":[
  #       {"domainLabel":"region","value":"east"},
  #       {"domainLabel":"zone","value":"zone1"}]},
  #    {"poolName":"pool1",
  #     "dataPool":"ec-pool1" # optional, erasure-coded pool for data
  #     "domainSegments":[
  #       {"domainLabel":"region","value":"east"},
  #       {"domainLabel":"zone","value":"zone2"}]},
  #    {"poolName":"pool2",
  #     "dataPool":"ec-pool2" # optional, erasure-coded pool for data
  #     "domainSegments":[
  #       {"domainLabel":"region","value":"west"},
  #       {"domainLabel":"zone","value":"zone1"}]}
  #   ]
  topologyConstrainedPools: []

  # (optional) mapOptions is a comma-separated list of map options.
  # For krbd options refer
  # https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options
  # For nbd options refer
  # https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options
  # Format:
  # mapOptions: "<mounter>:op1,op2;<mounter>:op1,op2"
  # An empty mounter field is treated as krbd type for compatibility.
  # eg:
  # mapOptions: "krbd:lock_on_read,queue_depth=1024;nbd:try-netlink"
  mapOptions: ""

  # (optional) unmapOptions is a comma-separated list of unmap options.
  # For krbd options refer
  # https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options
  # For nbd options refer
  # https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options
  # Format:
  # unmapOptions: "<mounter>:op1,op2;<mounter>:op1,op2"
  # An empty mounter field is treated as krbd type for compatibility.
  # eg:
  # unmapOptions: "krbd:force;nbd:force"
  unmapOptions: ""

  # The secrets have to contain Ceph credentials with required access
  # to the 'pool'.
  provisionerSecret: <ваше значение параметра>
  # If Namespaces are left empty, the secrets are assumed to be in the
  # Release namespace.
  provisionerSecretNamespace: <ваше значение параметра>
  controllerExpandSecret: <ваше значение параметра>
  controllerExpandSecretNamespace: <ваше значение параметра>
  nodeStageSecret: <ваше значение параметра>
  nodeStageSecretNamespace: <ваше значение параметра>
  # Specify the filesystem type of the volume. If not specified,
  # csi-provisioner will set default as `ext4`.
  fstype: <ваше значение параметра>
  reclaimPolicy: <ваше значение параметра>
  allowVolumeExpansion: true
  mountOptions: []
  # Mount Options
  # Example:
  # mountOptions:
  #   - discard

# Mount the host /etc/selinux inside pods to support
# selinux-enabled filesystems
selinuxMount: true

secret:
  # Specifies whether the secret should be created
  create: true
  name: <ваше значение параметра>
  # Key values correspond to a user name and its key, as defined in the
  # ceph cluster. User ID should have required access to the 'pool'
  # specified in the storage class
  userID: <ваше значение параметра>
  userKey: <ваше значение параметра>
  # Encryption passphrase
  # encryptionPassphrase: test_passphrase

# This is a sample configmap that helps define a Ceph configuration as required
# by the CSI plugins.
# Sample ceph.conf available at
# https://github.com/ceph/ceph/blob/master/src/sample.ceph.conf Detailed
# documentation is available at
# https://docs.ceph.com/en/latest/rados/configuration/ceph-conf/
cephconf: |
  <ваша конфигурация кластера ceph>
nodeplugin:
  tolerations:
  - key: <ваше значение параметра>
    operator: <ваше значение параметра>
    value: <ваше значение параметра>
    effect: <ваше значение параметра>
Параметр Описание Тип данных Пример
clusterID Уникальный идентификатор кластера Ceph string my-cluster-id
monitors Список IP-адресов мониторинга Ceph array 192.168.1.1
secret.name Имя создаваемого секрета string cephrbd-secret
secret.userID Идентификатор сервисной учетной записи для доступа к Ceph string client.admin
secret.userKey Ключ сервисной учетной записи для доступа к Ceph string sdfdff
cephconf Конфигурация Ceph в текстовом формате string [global] auth cluster required = cephx auth service required = cephx auth client required = cephx
storageClass.name Имя создаваемого Storage Class string csi-cephrbd-sc
storageClass.clusterID Идентификатор кластера Ceph string cluster-id
storageClass.pool Пул Ceph, в котором должен быть создан RBD-образ string kuberbd
storageClass.provisionerSecret Секрет для Provisioning с учетными данными пользователя и/или администратора Ceph string csi-rbd-secret
storageClass.provisionerSecretNamespace Неймспейс, в котором находится секрет для Provisioning с учетными данными пользователя и/или администратора Ceph. Если неймспейс не указан, предполагается, что секрет находится в неймспейсе “Release” string namenamespace
storageClass.controllerExpandSecret Секрет для расширения контроллера string ceph-expand-secret
storageClass.controllerExpandSecretNamespace Неймспейс, в котором находится секрет для расширения контроллера. Если неймспейс не указан, предполагается, что секрет находится в неймспейсе “Release” string namenamespace
storageClass.nodeStageSecret Секрет для монтирования узла string csi-cephrbd-secret
storageClass.controllerExpandSecretNamespace Неймспейс, в котором находится секрет Секрет для монтирования узла. Если неймспейс не указан, предполагается, что секрет находится в неймспейсе “Release” string namenamespace
storageClass.fstype Тип файловой системы тома. По умолчанию ext4 string ext4
storageClass.reclaimPolicy Политика управления жизненным циклом тома (возможные значения: Retain, Delete, Recycle) string Delete
nodeplugin.tolerations.key Ключ toleration (разрешение размещения) string role
nodeplugin.tolerations.operator Оператор проверки условия toleration string Equal
nodeplugin.tolerations.value Значение ключа toleration string infra
nodeplugin.tolerations.effect Эффект toleration. Допустимые значения: NoSchedule, PreferNoSchedule, NoExecute string NoSchedule

Требования к правам доступа сервисной учетной записи

client.kuberbd mon ‘profile rbd’ osd ‘profile rbd pool=kuberbd’

Особенности настройки

Если необходимо подключить несколько экземпляров CEPH FS или CEPH RBD в одном кластере:

  1. Установите экземпляры сервисов в разные неймспейсы кластера.
  2. В параметр driverName пропишите произвольные различные между экземплярами сервисов значения.
  3. Значение порта в параметре nodePlugin.httpMetrics.ContainerPort сделайте уникальным для каждого экземпляра сервиса.
×