Модуль CEPH CSI

В репозитории shturval доступны для установки чарты shturval-ceph-cephfs (Ceph FS) и shturval-ceph-rbd (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 сделайте уникальным для каждого экземпляра сервиса.

В текущем релизе используется CEPH CSI версии 4.10.0.