Хранилище (CSI)

Модуль локального хранения (RawFile Provisioner)

В этом разделе можно настроить сервис, который обеспечивает работу постоянного локального хранилища данных и реализует стандарт предоставления произвольных блоков и систем хранения файлов контейнерным рабочим нагрузкам в Комплексе. Сервис используется по умолчания для записи данных в качестве хранилища по умолчанию.

Не требует мануальной настройки.

В текущем релизе используется LocalStorageCSI версии 0.8.0

Модуль NFS оператора (NFS Provisioner)

Модуль NFS оператора (NFS Provisioner) является драйвером Network File System (NFS) Container Storage Interface (CSI). В кластерах Комплекса он позволяет использовать NFS для хранения данных. NFS Provisioner отвечает за:

  • возможность статического, динамического предоставления Persistent Volumes (PV) на основе NFS;
  • обеспечение совместного доступа к данным нескольким приложениями.

Важно ‒ В кластерах с ОС Astra Linux до версии 1.7.6 (включительно) при использовании NFS Provisioner может возникнуть "утечка памяти", что приведет к OOM (Out of Memory) и падению подов в кластере. Во избежание потери работоспособности в кластере следует обновить версию до 1.7.7. Инструкция по обновлению представлена на странице документации Astra Linux.

После обновления версии Astra Linux в провайдерах инфраструктуры (VMware vSphere, oVirt, OpenStack, Basis Dynamix, Yandex Cloud) кластеров потребуется заменить шаблоны ВМ со старыми версиями.

Установка в кластер

Модуль не является критически важным для работы Комплекса. По умолчанию модуль устанавливается в кластер управления отключенным, в клиентские кластеры не устанавливается.

Следует обратить внимание, что для работы NFS в кластере на узлах требуется инсталлировать клиента NFS. Например, для дистрибутива RPM нужно установить пакет утилит nfs-utils, для DEB ‒ nfs-common.

Кластер управления

Чтобы включить модуль в развернутом кластере управления, нужно перейти на страницу "Установленные сервисы" раздела "Сервисы и репозитории" в графическом интерфейсе, найти "Модуль NFS оператора" (shturval-nfs-csi) и перейти к управлению.

В блоке "Спецификация сервиса" можно указать параметры для создания Storage Class с провижинером nfs.csi.k8s.io в кластере или добавить Storage Class после включения модуля.

Пример добавления Storage Class в спецификации:

storageClass:
create: true
name: nfs-csi
parameters:
server: 10.11.12.13
share: /nfs # Адрес шары
mountOptions:
- nfsvers=3
reclaimPolicy: Delete
volumeBindingMode: Immediate

Далее следует включить модуль и выбрать автоматический режим управления.

Клиентский кластер

Чтобы установить "Модуль NFS оператора" в созданном клиентском кластере, нужно перейти на страницу на страницу "Доступные чарты" раздела "Сервисы и репозитории". На вкладке "shturval" выбрать чарт shturval-nfs-csi и нажать Установить.

Далее необходимо выбрать необходимую версию чарта, а также создать неймспейс nfs. После выбора версии чарта в правой части экрана отобразятся "Доступные параметры конфигурации для сервиса" (values). Следует прописать в блоке "Спецификация сервиса" необходимые параметры в качестве customvalues.

В блоке "Спецификация сервиса" можно указать параметры для создания Storage Class с провижинером nfs.csi.k8s.io в кластере или добавить Storage Class после включения модуля.

Пример добавления Storage Class в спецификации:

storageClass:
create: true
name: nfs-csi
parameters:
server: 10.11.12.13
share: /nfs # Адрес шары
mountOptions:
- nfsvers=3
reclaimPolicy: Delete
volumeBindingMode: Immediate

Далее следует включить модуль и выбрать автоматический режим управления.

Для корректной работы модуля NFS в кластере должен быть включен "Модуль управления сетями кластера" (shturval-networking).

Модуль CEPH CSI

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

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

CEPH FS

Пример customvalues (описание параметров ‒ в таблице 64):

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: <ваше значение параметра>

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

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 (описание параметров ‒ в таблице 65):

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: <ваше значение параметра>

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

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.

Модуль CSI vSphere (vSphere CSI Driver)

В РОСА Кубис модуль vSphere Container Storage Interface driver позволяет использовать облачное хранилище платформы виртуализации vSphere. Модуль является драйвером Container Storage Interface (CSI) и отвечает за выделение постоянного тома (PersistentVolume), монтирование и отключение тома от виртуальной машины.

Установка чарта в кластер

Чтобы установить модуль в созданном кластере, нужно в графическом интерфейсе:

  1. перейти в кластер;
  2. боковом меню открыть раздел "Сервисы и репозитории";
  3. перейти на страницу "Доступные чарты";
  4. на вкладке "shturval" найти чарт shturval-capvs-csi и нажать Установить.

Далее следует выбрать необходимую версию чарта. После выбора версии чарта в правой части экрана отобразятся доступные "Параметры конфигурации для сервиса" (values). В блоке "Спецификация сервиса" необходимо указать в качестве customvalues:

  • глобальные параметры (global);
  • параметры доступа к vCenter-серверу (vcenter);
  • конфигурацию используемого StorageClass для PersistentVolume (storageclass).

Пример customvalues (описание параметров ‒ в таблице 66):

global:
config:
global:
insecure-flag: true
cluster-id: <ваше значение параметра>
storageclass:
expansion: true
datastoreurl: <ваше значение параметра>
vcenter:
<ваше значение vCenter>:
server:  <ваше значение параметра>
user:  <ваше значение параметра>
password:  <ваше значение параметра>
datacenters:
‒ <ваше значение параметра>

Затем необходимо завершить установку чарта, сохранив настройку.

По завершении установки в кластер будет добавлен StorageClass с именем vsphere-csi. Чтобы в дальнейшем выделять PersistentVolumes в vsphere-csi, необходимо изменить настройки StorageClass, используемого по умолчанию. Для этого в графическом интерфейсе следует:

  1. перейти на страницу "StorageClasses" раздела "Хранилище";
  2. открыть StorageClass с именем local-path и перейти на вкладку "Лейблы и аннотации";
  3. удалить аннотацию storageclass.kubernetes.io/is-default-class:true и сохранить изменения.

Теперь для новых PersistentVolumeClaim (PVC) будет выделен PersistentVolume, принадлежащий vsphere-csi.

Учетная запись vCenter

В случае если учетная запись доступа к vCenter-серверу изменилась, а в клиентском кластере установлен Vsphere Container Storage Interface driver, необходимо скорректировать настройки модуля, для чего нужно:

  1. перейти в кластер, в боковом меню открыть раздел "Сервисы и репозитории";
  2. перейти на страницу "Установленные сервисы";
  3. на вкладке "shturval" найти Vsphere Container Storage Interface driver и перейти к управлению;
  4. в блоке "Спецификация сервиса" изменить значения в параметрах user и password на валидные данные учетной записи.

Пример customvalues (описание параметров ‒ в таблице 67):

global:
config:
vcenter:
user: <ваше значение параметра>
password: <ваше значение параметра>
  1. сохранить внесенные изменения.

Использование vSphereCSI в кластере с провайдером Shturval v2

Важно ‒ Использование vSphere CSI в кластере с провайдером Shturval v2 возможно только с использованием хостов, развернутых на платформе виртуализации vSphere.

Если требуется устанавливать Vsphere Container Storage Interface driver при создании кластера с провайдером Shturval V2, то на каждом хосте предварительно необходимо выполнить настройки:

  • для кластера управления ‒ перед началом установки;
  • для клиентского кластера ‒ перед добавлением хостов в провайдер.

Далее для установки нужно:

  1. включить параметр disk.EnableUUID, используя клиент vSphere:
  • в клиенте vSphere нажать на VM, выбрать пункт "Edit Settings";
  • перейти на вкладку "VM Options" и развернуть меню "Advanced";
  • нажать "Edit Configuration" рядом с пунктом "Configuration Parameters";
  • настроить параметр disk.EnableUUID;
  • если параметр существует, убедиться, что его значение установлено в значение True. Если параметра нет, добавить его и установить значение True;

Параметр disk.EnableUUID:

Name  Value
disk.EnableUUID  True
  1. обновить версию аппаратного обеспечения VM до версии 15 или выше:
  • в клиенте vSphere перейти к VM;
  • выбрать "Actions → Compatibility → Upgrade VM Compatibility";
  • нажать Yes, чтобы подтвердить обновление;
  • выбрать совместимость и нажать OK;
  1. добавить VMware Paravirtual SCSI storage controller в VM:
  • в клиенте vSphere нажать на VM и выбрать пункт "Edit Settings";
  • на вкладке "Virtual Hardware" нажать Add New Device;
  • выбрать "SCSI Controller" из выпадающего меню;
  • развернуть "New SCSI controller" и в меню "Change Type" выбрать "VMware Paravirtual";
  • нажать OK.

Решение проблем

Если был развернут кластер с провайдером shturvalv2 на хостах платформы виртуализации vSphere, и требуется добавить vSphere CSI в работающий кластер, необходимо:

  1. отредактировать ВМ нод кластера, выполнить настройки:
  • включить параметр disk.EnableUUID, используя клиент vSphere:
    1. в клиенте vSphere нажать на VM, выбрать пункт "Edit Settings";
    2. перейти на вкладку "VM Options" и развернуть меню "Advanced";
    3. нажать "Edit Configuration" рядом с пунктом "Configuration Parameters";
    4. настроить параметр "disk.EnableUUID";
    5. если параметр существует, убедиться, что его значение установлено в значение True. Если параметра нет, добавить его и установить значение True.

Параметр "disk.EnableUUID":

Name  Value
disk.EnableUUID  True
  • обновить версию аппаратного обеспечения VM до версии 15 или выше:
    1. В клиенте vSphere перейти к VM;
    2. выбрать "Actions → Compatibility → Upgrade VM Compatibility";
    3. нажать Yes, чтобы подтвердить обновление;
    4. выбрать совместимость и нажать OK;
  • добавить VMware Paravirtual SCSI storage controller в VM:
    1. в клиенте vSphere нажать на VM и выбрать пункт "Edit Settings";
    2. на вкладке "Virtual Hardware" нажать Add New Device;
    3. выбрать "SCSI Controller" из выпадающего меню;
    4. развернуть "New SCSI controller" и в меню "Change Type" выбрать "VMware Paravirtual";
    5. нажать OK;
  1. последовательно выполнить:
  • Drain узла и перезагрузку отредактированной ВМ;
  • после загрузки узла выполнить uncordon, дождаться, когда нагрузка вернется на узел, перейти к drain следующего узла;
  1. выполнить на всех требуемых узлах.
  • если ранее был установленный vSphere CSI, то удалить;
  • установить новый vSphere CSI в неймспейс shturval-capvs-csi;
  • В customvalues добавить config, заполнив своими данными.

Пример customvalues (описание параметров ‒ в таблице 68):

global:
config:
global:
insecure-flag: true
cluster-id: <ваше значение параметра>
storageclass:
expansion: true
datastoreurl: <ваше значение параметра>
vcenter:
<ваше значение vCenter>:
server:  <ваше значение параметра>
user:  <ваше значение параметра>
password:  <ваше значение параметра>
datacenters:
‒ <ваше значение параметра>

Storage class создастся автоматически как default. Следует снять флаг default с одного из StorageClass (local path или vSphere).