Модуль 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 в одном кластере:
- Установите экземпляры сервисов в разные неймспейсы кластера.
- В параметр driverName пропишите произвольные различные между экземплярами сервисов значения.
- Значение порта в параметре nodePlugin.httpMetrics.ContainerPort сделайте уникальным для каждого экземпляра сервиса.
В текущем релизе используется CEPH CSI версии 4.10.0.