diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index e175d520..6c373b5d 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -5,9 +5,6 @@ description: The sds-replicated-volume Deckhouse module's configuration. --- {{< alert level="warning" >}} -The module is guaranteed to work only in the following cases: -- if stock kernels shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux) are used; -- if a 10 Gbps network is used. - +The module is only guaranteed to work if [requirements](./readme.html#system-requirements-and-recommendations) are met. As for any other configurations, the module may work, but its smooth operation is not guaranteed. {{< /alert >}} diff --git a/docs/CONFIGURATION_RU.md b/docs/CONFIGURATION_RU.md index 0c9ce566..c58c6c76 100644 --- a/docs/CONFIGURATION_RU.md +++ b/docs/CONFIGURATION_RU.md @@ -5,9 +5,6 @@ description: Параметры настройки модуля sds-replicated-v --- {{< alert level="warning" >}} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux); -- при использовании сети 10Gbps. - +Работоспособность модуля гарантируется только при соблюдении [требований](./readme.html#системные-требования-и-рекомендации). Работоспособность модуля в других условиях возможна, но не гарантируется. {{< /alert >}} diff --git a/docs/CR.md b/docs/CR.md index 1b254925..4736bc90 100644 --- a/docs/CR.md +++ b/docs/CR.md @@ -4,9 +4,6 @@ description: "The sds-replicated-volume module Custom Resources: ReplicatedStora --- {{< alert level="warning" >}} -The module is guaranteed to work only in the following cases: -- if stock kernels shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux) are used; -- if a 10 Gbps network is used. - +The module is only guaranteed to work if [requirements](./readme.html#system-requirements-and-recommendations) are met. As for any other configurations, the module may work, but its smooth operation is not guaranteed. {{< /alert >}} diff --git a/docs/CR_RU.md b/docs/CR_RU.md index cb801ae5..4253ba84 100644 --- a/docs/CR_RU.md +++ b/docs/CR_RU.md @@ -4,9 +4,6 @@ description: "Модуль sds-replicated-volume Custom Resources: ReplicatedSto --- {{< alert level="warning" >}} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux); -- при использовании сети 10Gbps. - +Работоспособность модуля гарантируется только при соблюдении [требований](./readme.html#системные-требования-и-рекомендации). Работоспособность модуля в других условиях возможна, но не гарантируется. {{< /alert >}} diff --git a/docs/FAQ.md b/docs/FAQ.md index 4c0e6a49..14377ea1 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -4,38 +4,33 @@ description: LINSTOR Troubleshooting. What is difference between LVM and LVMThin --- {{< alert level="warning" >}} -The module is guaranteed to work only in the following cases: -- if stock kernels shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux) are used; -- if a 10 Gbps network is used. - +The module is only guaranteed to work if [requirements](./readme.html#system-requirements-and-recommendations) are met. As for any other configurations, the module may work, but its smooth operation is not guaranteed. {{< /alert >}} ## What is difference between LVM and LVMThin? -In a nutshell:: - -- LVM is simpler and has performance comparable to that of native disk drives; -- LVMThin allows for snapshots and overprovisioning; however, it is significantly slower. +- LVM is simpler and has high performance that is similar to that of native disk drives, but it does not support snapshots; +- LVMThin allows for snapshots and overprovisioning; however, it is slower than LVM. ## How do I get info about the space used? There are two options: -- Using the Grafana dashboard: navigate to **Dashboards --> Storage --> LINSTOR/DRBD** +1. Using the Grafana dashboard: + +* Navigate to **Dashboards --> Storage --> LINSTOR/DRBD** In the upper right corner, you'll see the amount of space used in the cluster. - > **Caution!** *Raw* space usage in the cluster is displayed. - > Suppose you create a volume with two replicas. In this case, these values must be divided by two to see how many such volumes can be in your cluster. + > **Caution!** *Raw* space usage in the cluster is displayed. Suppose you create a volume with two replicas. In this case, these values must be divided by two to see how many such volumes can be in your cluster. -- Using the LINSTOR command line: +2. Using the LINSTOR command line: ```shell kubectl exec -n d8-sds-replicated-volume deploy/linstor-controller -- linstor storage-pool list ``` - > **Caution!** *Raw* space usage for each node in the cluster is displayed. - > Suppose you create a volume with two replicas. In this case, those two replicas must fully fit on two nodes in your cluster. + > **Caution!** *Raw* space usage for each node in the cluster is displayed. Suppose you create a volume with two replicas. In this case, those two replicas must fully fit on two nodes in your cluster. ## How do I set the default StorageClass? @@ -43,19 +38,19 @@ Set the `spec.IsDefault` field to `true` in the corresponding [ReplicatedStorage ## How do I add the existing LVM Volume Group or LVMThin pool? -1. Manually add the `storage.deckhouse.io/enabled=true` tag to the Volume Group: +1. Manually add the `storage.deckhouse.io/enabled=true` LVM tag to the Volume Group: ```shell vgchange myvg-0 --add-tag storage.deckhouse.io/enabled=true ``` -2. This VG will be automatically discovered and a corresponding `LVMVolumeGroup` resource will be created in the cluster for it. + This VG will be automatically discovered and a corresponding `LVMVolumeGroup` resource will be created in the cluster for it. -3. You can specify this resource in the [ReplicatedStoragePool](./cr.html#replicatedstoragepool) parameters in the `spec.lvmVolumeGroups[].name` field (note that for the LVMThin pool, you must additionally specify its name in `spec.lvmVolumeGroups[].thinPoolName`). +2. Specify this resource in the [ReplicatedStoragePool](./cr.html#replicatedstoragepool) parameters in the `spec.lvmVolumeGroups[].name` field (note that for the LVMThin pool, you must additionally specify its name in `spec.lvmVolumeGroups[].thinPoolName`). -## How do I evict resources from a node? +## How do I evict DRBD resources from a node? -* Download the `evict.sh` script on the host that has administrative access to the Kubernetes API server (for the script to work, you need to have `kubectl` and `jq` installed): +1. Upload the `evict.sh` script to the host that has administrative access to the Kubernetes API server (for the script to work, you need to have `kubectl` and `jq` installed): * Download the latest script version from GitHub: @@ -71,21 +66,21 @@ Set the `spec.IsDefault` field to `true` in the corresponding [ReplicatedStorage chmod 700 evict.sh ``` -* Fix all faulty LINSTOR resources in the cluster. Run the following command to detect them: +2. Fix all faulty LINSTOR resources in the cluster. Run the following command to filter them: ```shell kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-controller -- linstor resource list --faulty ``` -* Check that all the pods in the `d8-sds-replicated-volume` namespace are in the Running state: +3. Check that all the pods in the `d8-sds-replicated-volume` namespace are in the Running state: ```shell kubectl -n d8-sds-replicated-volume get pods | grep -v Running ``` -### How do I evict resources from a node without deleting it from LINSTOR and Kubernetes +### How do I evict DRBD resources from a node without deleting it from LINSTOR and Kubernetes -Run the `evict.sh` script in interactive mode (`--delete-resources-only`): +1. Run the `evict.sh` script in interactive mode (`--delete-resources-only`): ```shell ./evict.sh --delete-resources-only @@ -99,7 +94,7 @@ To run the `evict.sh` script in non-interactive mode, add the `--non-interactive > **Caution!** After the script finishes its job, the node will still be in the Kubernetes cluster albeit in *SchedulingDisabled* status. In LINSTOR, the *AutoplaceTarget=false* property will be set for this node, preventing the LINSTOR scheduler from creating resources on this node. -Run the following command to allow resources and pods to be scheduled on the node again: +2. Run the following command to allow DRBD resources and pods to be scheduled on the node again: ```shell alias linstor='kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-controller -- linstor' @@ -107,7 +102,7 @@ linstor node set-property "worker-1" AutoplaceTarget kubectl uncordon "worker-1" ``` -Run the following command to check the *AutoplaceTarget* property for all nodes (the AutoplaceTarget field will be empty for nodes that are allowed to host LINSTOR resources): +3. Run the following command to check the *AutoplaceTarget* property for all nodes (the AutoplaceTarget field will be empty for nodes that are allowed to host LINSTOR resources): ```shell alias linstor='kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-controller -- linstor' @@ -117,7 +112,7 @@ linstor node list -s AutoplaceTarget ## Troubleshooting Problems can occur at different levels of component operation. -This simple cheat sheet will help you quickly navigate through the diagnosis of various problems with the LINSTOR-created volumes: +This cheat sheet will help you quickly navigate through the diagnosis of various problems with the LINSTOR-created volumes: ![LINSTOR cheatsheet](./images/linstor-debug-cheatsheet.svg) @@ -126,41 +121,39 @@ Some common problems are described below. ### linstor-node fail to start because the drbd module cannot be loaded -Check the status of the `linstor-node` Pods: +1. Check the status of the `linstor-node` pods: ```shell kubectl get pod -n d8-sds-replicated-volume -l app=linstor-node ``` -If you see that some of them got stuck in `Init` state, check the DRBD version aw well as the bashible logs on the node: +2. If some of those pods got stuck in `Init` state, check the DRBD version as well as the bashible logs on the node: ```shell cat /proc/drbd journalctl -fu bashible ``` -The most likely reasons why loading the kernel module fails: +The most likely reasons why bashible is unable to load the kernel module: - You have the in-tree version of the DRBDv8 module preloaded, whereas LINSTOR requires DRBDv9. - Check the preloaded module version: `cat /proc/drbd`. If the file is missing, then the module is not preloaded and this is not your case. + Verify the preloaded module version using the following command: `cat /proc/drbd`. If the file is missing, then the module is not preloaded and this is not your case. - You have Secure Boot enabled. - Since the DRBD module we provide is compiled dynamically for your kernel (similar to dkms), it is not digitally signed. - We do not currently support running the DRBD module with a Secure Boot enabled. + Since the DRBD module is compiled dynamically for your kernel (similar to dkms), it is not digitally signed. + Currently, running the DRBD module with a Secure Boot enabled is not supported. ### The Pod cannot start due to the `FailedMount` error #### **The Pod is stuck at the `ContainerCreating` phase** -If the Pod is stuck at the `ContainerCreating` phase, and the following errors are displayed when the `kubectl describe pod` command is invoked: +If the Pod is stuck at the `ContainerCreating` phase, and if the errors like those shown below are displayed when the `kubectl describe pod` command is invoked, then it means that the device is mounted on one of the nodes. ```text rpc error: code = Internal desc = NodePublishVolume failed for pvc-b3e51b8a-9733-4d9a-bf34-84e0fee3168d: checking for exclusive open failed: wrong medium type, check device health ``` -... it means that the device is still mounted on one ot the nodes. - Use the command below to see if this is the case: ```shell @@ -194,7 +187,8 @@ Yes, this is the expected behavior. Only the `isDefault` field is editable in th The child StorageClass is only deleted if the status of the ReplicatedStorageClass resource is `Created`. Otherwise, you will need to either restore the ReplicatedStorageClass resource to a working state or delete the StorageClass yourself. -## I noticed that an error occurred when trying to create a Storage Pool / Storage Class, but in the end the necessary entity was successfully created. Is this behavior acceptable?``` +## I noticed that an error occurred when trying to create a Storage Pool / Storage Class, but in the end the necessary entity was successfully created. Is this behavior acceptable? + This is the expected behavior. The module will automatically retry the unsuccessful operation if the error was caused by circumstances beyond the module's control (for example, a momentary disruption in the Kubernetes API). ## When running commands in the LINSTOR CLI, I get the "You're not allowed to change state of linstor cluster manually. Please contact tech support" error. What to do? @@ -206,6 +200,40 @@ alias linstor='kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-contr linstor --help ``` +## Service pods of sds-replicated-volume components fail to be created on the node I need + +Most likely this is due to node labels. + +- Check [dataNodes.nodeSelector](./configuration.html#parameters-datanodes-nodeselector) in the module settings: + +```shell +kubectl get mc sds-replicated-volume -o=jsonpath={.spec.settings.dataNodes.nodeSelector} +``` + +- Check the selectors that `sds-replicated-volume-controller` uses: + +```shell +kubectl -n d8-sds-replicated-volume get secret d8-sds-replicated-volume-controller-config -o jsonpath='{.data.config}' | base64 --decode + +``` + +- The `d8-sds-replicated-volume-controller-config` secret should contain the selectors that are specified in the module settings, as well as the `kubernetes.io/os: linux` selector. + +- Make sure that the target node has all the labels specified in the `d8-sds-replicated-volume-controller-config` secret: + +```shell +kubectl get node worker-0 --show-labels +``` + +- If there are no labels, add them to the `NodeGroup` or to the node via templates. + +- If there are labels, check if the target node has the `storage.deckhouse.io/sds-replicated-volume-node=` label attached. If there is no label, check if the sds-replicated-volume-controller is running and if it is running, examine its logs: + +```shell +kubectl -n d8-sds-replicated-volume get po -l app=sds-replicated-volume-controller +kubectl -n d8-sds-replicated-volume logs -l app=sds-replicated-volume-controller +``` + ## I have not found an answer to my question and am having trouble getting the module to work. What do I do? Information about the reasons for the failure is saved to the `Status.Reason` field of the `ReplicatedStoragePool` and `ReplicatedStorageClass` resources. @@ -219,7 +247,7 @@ Note that the `LINSTOR` control-plane and its CSI will be unavailable during the ### Migration steps -- Make sure there are no faulty `LINSTOR` resources in the cluster. The command below should return an empty list: +1. Make sure there are no faulty `LINSTOR` resources in the cluster. The command below should return an empty list: ```shell alias linstor='kubectl -n d8-linstor exec -ti deploy/linstor-controller -- linstor' @@ -227,19 +255,20 @@ linstor resource list --faulty ``` > **Caution!** You should fix all `LINSTOR` resources before migrating. -- Disable the `linstor` module: + +2. Disable the `linstor` module: ```shell kubectl patch moduleconfig linstor --type=merge -p '{"spec": {"enabled": false}}' ``` -- Wait for the `d8-linstor` namespace to be deleted. +3. Wait for the `d8-linstor` namespace to be deleted. ```shell kubectl get namespace d8-linstor ``` -- Create a `ModuleConfig` resource for `sds-node-configurator`. +4. Create a `ModuleConfig` resource for `sds-node-configurator`. ```shell kubectl apply -f -< **Caution!** If you fail to specify the `settings.dataNodes.nodeSelector` parameter in the `sds-replicated-volume` module settings, the value for this parameter will be derived from the `linstor` module when installing the `sds-replicated-volume` module. If this parameter is not defined there as well, it will remain empty. +> **Caution!** Failing to specify the `settings.dataNodes.nodeSelector` parameter in the `sds-replicated-volume` module settings would result in the value for this parameter to be derived from the `linstor` module when installing the `sds-replicated-volume` module. If this parameter is not defined there as well, it will remain empty and all the nodes in the cluster will be treated as storage nodes. ```shell k apply -f - <}} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux); -- при использовании сети 10Gbps. - +Работоспособность модуля гарантируется только при соблюдении [требований](./readme.html#системные-требования-и-рекомендации). Работоспособность модуля в других условиях возможна, но не гарантируется. {{< /alert >}} ## Когда следует использовать LVM, а когда LVMThin? -- LVM проще и обладает производительностью, сравнимой с производительностью накопителя; -- LVMThin позволяет использовать snapshot'ы и overprovisioning, но существенно медленнее. +- LVM проще и обладает высокой производительностью, сравнимой с производительностью накопителя, но не позволяет использовать snapshot'ы; +- LVMThin позволяет использовать snapshot'ы и overprovisioning, но производительность ниже, чем у LVM. ## Как получить информацию об используемом пространстве? -Есть два варианта: +Существует два варианта: + +1. Через дашборд Grafana: -- Через дашборд Grafana: перейдите **Dashboards --> Storage --> LINSTOR/DRBD** - В правом верхнем углу вы найдете информацию об используемом пространстве в кластере. +* Перейдите **Dashboards --> Storage --> LINSTOR/DRBD** + В правом верхнем углу находится информация об используемом пространстве в кластере. - > **Внимание!** Эта информация отражает состояние всего *сырого* пространства в кластере. - > То есть если вы создаете тома в двух репликах, то эти значения стоит поделить на два. Это нужно, чтобы получить примерное представление о том, сколько таких томов может быть размещено в вашем кластере. + > **Внимание!** Эта информация отражает состояние всего *сырого* пространства в кластере. Если необходимо создать тома в двух репликах, то эти значения стоит делить на два, чтобы получить представление - сколько таких томов разместить в кластере. -- Через командный интерфейс LINSTOR: +2. Через командный интерфейс LINSTOR с помощью команды: ```shell kubectl exec -n d8-sds-replicated-volume deploy/linstor-controller -- linstor storage-pool list ``` - > **Внимание!** Эта информация отражает состояние *сырого* пространства для каждого узла в кластере. - > То есть если вы создаете тома в двух репликах, то эти две реплики обязательно должны целиком поместиться на двух узлах вашего кластера. + > **Внимание!** Эта информация отражает состояние *сырого* пространства для каждого узла в кластере. Если создаются тома в двух репликах, то эти две реплики обязательно должны целиком поместиться на двух узлах вашего кластера. ## Как назначить StorageClass по умолчанию? @@ -41,19 +38,19 @@ description: Диагностика проблем LINSTOR. Когда след ## Как добавить существующую LVM Volume Group или LVMThin-пул? -1. Вручную назначить на Volume Group тег `storage.deckhouse.io/enabled=true`: +1. Вручную назначьте на Volume Group LVM-тег `storage.deckhouse.io/enabled=true`: ```shell vgchange myvg-0 --add-tag storage.deckhouse.io/enabled=true ``` -2. Данный VG будет автоматически обнаружен и в кластере для него будет создан соответствующий ресурс `LVMVolumeGroup`. + Данный VG будет автоматически обнаружен и в кластере для него будет создан соответствующий ресурс `LVMVolumeGroup`. -3. Этот ресурс можно указать в параметрах [ReplicatedStoragePool](./cr.html#replicatedstoragepool) в поле `spec.lvmVolumeGroups[].name` (для LVMThin-пула необходимо дополнительно указать имя в `spec.lvmVolumeGroups[].thinPoolName`). +2. Полученный ресурс укажите в параметрах [ReplicatedStoragePool](./cr.html#replicatedstoragepool) в поле `spec.lvmVolumeGroups[].name` (для LVMThin-пула необходимо дополнительно указать имя в `spec.lvmVolumeGroups[].thinPoolName`). -## Как выгнать ресурсы с узла? +## Как выгнать DRBD-ресурсы с узла? -* Загрузите скрипт `evict.sh` на хост, имеющий доступ к API Kubernetes с правами администратора (для работы скрипта потребуются установленные `kubectl` и `jq`): +1. Загрузите скрипт `evict.sh` на хост, имеющий доступ к API Kubernetes с правами администратора (для работы скрипта потребуются установленные `kubectl` и `jq`): * Последнюю версию скрипта можно скачать с GitHub: @@ -69,21 +66,21 @@ description: Диагностика проблем LINSTOR. Когда след chmod 700 evict.sh ``` -* Исправьте все ошибочные ресурсы LINSTOR в кластере. Чтобы найти их, выполните следующую команду: +2. Исправьте все ошибочные ресурсы LINSTOR в кластере. Чтобы найти их, выполните следующую команду: ```shell kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-controller -- linstor resource list --faulty ``` -* Убедитесь, что все поды в пространстве имен `d8-sds-replicated-volume` находятся в состоянии *Running*: +3. Убедитесь, что все поды в пространстве имен `d8-sds-replicated-volume` находятся в состоянии *Running*: ```shell kubectl -n d8-sds-replicated-volume get pods | grep -v Running ``` -### Выгнать ресурсы с узла без удаления его из LINSTOR и Kubernetes +### Как удалить DRBD-ресурсы с узла, без удаления самого узла из LINSTOR и Kubernetes? -Запустите скрипт `evict.sh` в интерактивном режиме, указав режим удаления `--delete-resources-only`: +1. Запустите скрипт `evict.sh` в интерактивном режиме, указав режим удаления `--delete-resources-only`: ```shell ./evict.sh --delete-resources-only @@ -97,7 +94,7 @@ description: Диагностика проблем LINSTOR. Когда след > **Важно!** После завершении работы скрипта узел в Kubernetes останется в статусе *SchedulingDisabled*, а в LINSTOR у данного узла будет выставлен параметр *AutoplaceTarget=false*, что запретит планировщику LINSTOR создавать на этом узле ресурсы. -Если необходимо снова разрешить размещать ресурсы и поды на узле, нужно выполнить команды: +2. Если необходимо снова разрешить размещать DRBD-ресурсы и поды на узле, выполните команды: ```shell alias linstor='kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-controller -- linstor' @@ -105,7 +102,7 @@ linstor node set-property "worker-1" AutoplaceTarget kubectl uncordon "worker-1" ``` -Проверить параметр *AutoplaceTarget* у всех узлов можно так (поле AutoplaceTarget будет пустым у тех узлов, на которых разрешено размещать ресурсы LINSTOR): +3. Проверьте параметр *AutoplaceTarget* у всех узлов (поле AutoplaceTarget будет пустым у тех узлов, на которых разрешено размещать ресурсы LINSTOR): ```shell alias linstor='kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-controller -- linstor' @@ -115,7 +112,7 @@ linstor node list -s AutoplaceTarget ## Диагностика проблем Проблемы могут возникнуть на разных уровнях работы компонентов. -Эта простая шпаргалка поможет вам быстро сориентироваться при диагностике различных проблем с томами, созданными в LINSTOR: +Эта шпаргалка поможет вам быстро сориентироваться при диагностике различных проблем с томами, созданными в LINSTOR: ![LINSTOR шпаргалка](./images/linstor-debug-cheatsheet.ru.svg) @@ -124,40 +121,40 @@ linstor node list -s AutoplaceTarget ### linstor-node не может запуститься из-за невозможности загрузки drbd-модуля -Проверьте состояние подов `linstor-node`: +1. Проверьте состояние подов `linstor-node`: ```shell kubectl get pod -n d8-sds-replicated-volume -l app=linstor-node ``` -Если вы видите, что некоторые из них находятся в состоянии `Init`, проверьте версию drbd и логи bashible на узле: +2. Если некоторые поды находятся в состоянии `Init`, проверьте версию drbd и логи bashible на узле: ```shell cat /proc/drbd journalctl -fu bashible ``` -Наиболее вероятные причины, почему он не может загрузить модуль ядра: +Наиболее вероятные причины, почему bashible не может загрузить модуль ядра: -- Возможно, у вас уже загружена in-tree-версия модуля DRBDv8, тогда как модуль требует DRBDv9. - Проверить версию загруженного модуля: `cat /proc/drbd`. Если файл отсутствует, значит, модуль не загружен и проблема не в этом. +- Возможно, загружена in-tree-версия модуля DRBDv8, тогда как модуль требует DRBDv9. + Проверить версию загруженного модуля можно командой: `cat /proc/drbd`. Если файл отсутствует, значит, модуль не загружен и проблема не в этом. -- Возможно, у вас включен Secure Boot. - Так как модуль DRBD, который мы поставляем, компилируется динамически для вашего ядра (аналог dkms), он не имеет цифровой подписи. +- Возможно, включен Secure Boot. + Так как модуль DRBD компилируется динамически для вашего ядра (аналог dkms), он не имеет цифровой подписи. На данный момент мы не поддерживаем работу модуля DRBD в конфигурации с Secure Boot. ### Под не может запуститься из-за ошибки `FailedMount` #### **Под завис на стадии `ContainerCreating`** -Если под завис на стадии `ContainerCreating`, а в выводе `kubectl describe pod` есть ошибки следующего вида, то значит устройство все еще смонтировано на одном из других узлов: +Если под завис на стадии `ContainerCreating`, а в выводе `kubectl describe pod` присутствуют ошибки вроде той, что представлена ниже, значит устройство смонтировано на одном из других узлов: ```text rpc error: code = Internal desc = NodePublishVolume failed for pvc-b3e51b8a-9733-4d9a-bf34-84e0fee3168d: checking for exclusive open failed: wrong medium type, check device health ``` -Проверить это можно с помощью следующей команды: +Проверьте, где используется устройство, с помощью следующей команды: ```shell alias linstor='kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-controller -- linstor' @@ -176,7 +173,7 @@ linstor resource list -r pvc-b3e51b8a-9733-4d9a-bf34-84e0fee3168d dmesg | grep 'Remote failed to finish a request within' ``` -Если вывод команды не пустой (в выводе `dmesg` есть строки вида *"Remote failed to finish a request within ..."*), скорее всего, ваша дисковая подсистема слишком медленная для нормального функционирования DRBD. +Если вывод команды не пустой (в выводе `dmesg` есть строки вида *"Remote failed to finish a request within ..."*), скорее всего, дисковая подсистема слишком медленная для нормального функционирования DRBD. ## Я удалил ресурс ReplicatedStoragePool, но соответствующий Storage Pool в бэкенде LINSTOR остался. Так и должно быть? @@ -189,6 +186,7 @@ dmesg | grep 'Remote failed to finish a request within' ## При удалении ресурса ReplicatedStorageClass не удаляется его дочерний StorageClass в Kubernetes. Что делать? Если `StorageClass` находится в статусе `Created`, то его можно удалить. Если статус другой, нужно восстановить ресурс или удалить `StorageClass` вручную. + ## При попытке создать Storage Pool / StorageClass возникла ошибка, но в итоге необходимая сущность успешно создалась. Такое допустимо? Это поведение ожидаемо. Модуль автоматически повторит выполнение неудачной операции, если причиной ошибки послужили независящие от модуля обстоятельства (например, kube-apiserver временно стал недоступен). @@ -202,9 +200,44 @@ alias linstor='kubectl -n d8-sds-replicated-volume exec -ti deploy/linstor-contr linstor --help ``` +## Служебные поды компонентов sds-replicated-volume не создаются на нужной мне ноде. + +С высокой вероятностью проблемы связаны с метками на нодах. + +- Проверьте [dataNodes.nodeSelector](./configuration.html#parameters-datanodes-nodeselector) в настройках модуля: + +```shell +kubectl get mc sds-replicated-volume -o=jsonpath={.spec.settings.dataNodes.nodeSelector} +``` + +- Проверьте селекторы, которые использует `sds-replicated-volume-controller`: + +```shell +kubectl -n d8-sds-replicated-volume get secret d8-sds-replicated-volume-controller-config -o jsonpath='{.data.config}' | base64 --decode + +``` + +- В секрете `d8-sds-replicated-volume-controller-config` должны быть селекторы, которые указаны в настройках модуля, а так же дополнительно селектор `kubernetes.io/os: linux`. + +- Необходимо проверить, что на нужной ноде есть все указанные в секрете `d8-sds-replicated-volume-controller-config` метки: + +```shell +kubectl get node worker-0 --show-labels +``` + +- Если меток нет, то необходимо добавить метки через шаблоны в `NodeGroup` или на ноду. + +- Если метки есть, то необходимо проверить, есть ли на нужной ноде метка `storage.deckhouse.io/sds-replicated-volume-node=`. Если метки нет, то необходимо проверить, запущен ли sds-replicated-volume-controller и если запущен, то проверить его логи: + +```shell +kubectl -n d8-sds-replicated-volume get po -l app=sds-replicated-volume-controller +kubectl -n d8-sds-replicated-volume logs -l app=sds-replicated-volume-controller +``` + + ## Я не нашел ответа на свой вопрос и испытываю проблемы с работой модуля. Что делать? -Информация о причинах неудавшейся операции должна быть отображена в поле `status.reason` ресурсов `ReplicatedStoragePool` и `ReplicatedStorageClass`. +Информация о причинах неудавшейся операции должна отображаться в поле `status.reason` ресурсов `ReplicatedStoragePool` и `ReplicatedStorageClass`. Если предоставленной информации не хватает для идентификации проблемы, вы можете обратиться к логам sds-replicated-volume-controller. ## Как выполнить миграцию со встроенного модуля [linstor](https://deckhouse.ru/documentation/v1.57/modules/041-linstor/) Deckhouse Kubernetes Platform на модуль sds-replicated-volume? @@ -215,7 +248,7 @@ linstor --help ### Порядок действий для миграции -- Удостоверьтесь, что в кластере нет "плохих ресурсов" `LINSTOR`. Эта команда должна выводить пустой список: +1. Удостоверьтесь, что в кластере нет "плохих ресурсов" `LINSTOR`. Эта команда должна выводить пустой список: ```shell alias linstor='kubectl -n d8-linstor exec -ti deploy/linstor-controller -- linstor' @@ -224,19 +257,19 @@ linstor resource list --faulty > **Внимание!** Важно починить все ресурсы `LINSTOR` перед миграцией. -- Выключите модуль `linstor`: +2. Выключите модуль `linstor`: ```shell kubectl patch moduleconfig linstor --type=merge -p '{"spec": {"enabled": false}}' ``` -- Дождитесь, когда namespace `d8-linstor` будет удален. +3. Дождитесь, когда namespace `d8-linstor` будет удален. ```shell kubectl get namespace d8-linstor ``` -- Создайте ресурс `ModuleConfig` для `sds-node-configurator`. +4. Создайте ресурс `ModuleConfig` для `sds-node-configurator`. ```shell kubectl apply -f -< **Внимание!** Если в настройках модуля `sds-replicated-volume` вы не укажете параметр `settings.dataNodes.nodeSelector`, то значение для этого параметра при установке модуля `sds-replicated-volume` будет взято из модуля `linstor`. Если этот параметр не указан и там, то только в этом случае он останется пустым. +> **Внимание!** Если в настройках модуля `sds-replicated-volume` не будет указан параметр `settings.dataNodes.nodeSelector`, то значение для этого параметра при установке модуля `sds-replicated-volume` будет взято из модуля `linstor`. Если этот параметр не указан и там, то только в этом случае он останется пустым и все узлы кластера будут считаться узлами для хранения данных. ```shell k apply -f - <}} -The module is guaranteed to work only in the following cases: -- if stock kernels shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux) are used; -- if a 10 Gbps network is used. - +The module is only guaranteed to work if [requirements](./readme.html#system-requirements-and-recommendations) are met. As for any other configurations, the module may work, but its smooth operation is not guaranteed. {{< /alert >}} diff --git a/docs/LAYOUTS_RU.md b/docs/LAYOUTS_RU.md index d73300cd..3f6ce841 100644 --- a/docs/LAYOUTS_RU.md +++ b/docs/LAYOUTS_RU.md @@ -4,10 +4,7 @@ linkTitle: "Сценарии использования" --- {{< alert level="warning" >}} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux); -- при использовании сети 10Gbps. - +Работоспособность модуля гарантируется только при соблюдении [требований](./readme.html#системные-требования-и-рекомендации). Работоспособность модуля в других условиях возможна, но не гарантируется. {{< /alert >}} diff --git a/docs/README.md b/docs/README.md index c1b78b21..7574ffe6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,10 +5,7 @@ moduleStatus: experimental --- {{< alert level="warning" >}} -The module is guaranteed to work only in the following cases: -- if stock kernels shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux) are used; -- if a 10 Gbps network is used. - +The module is only guaranteed to work if [requirements](./readme.html#system-requirements-and-recommendations) are met. As for any other configurations, the module may work, but its smooth operation is not guaranteed. {{< /alert >}} @@ -26,3 +23,237 @@ After you enable the `sds-replicated-volume` module in the Deckhouse configurati Two modes are supported: LVM and LVMThin. Each mode has its advantages and disadvantages. Read [FAQ](./faq.html#what-is-difference-between-lvm-and-lvmthin) to learn more and compare them. + +## Quickstart guide + +Note that all commands must be run on a machine that has administrator access to the Kubernetes API. + +### Enabling modules + +- Enable the sds-node-configurator module + +```shell +kubectl apply -f - <}} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux); -- при использовании сети 10Gbps. - +Работоспособность модуля гарантируется только при соблюдении [требований](./readme.html#системные-требования-и-рекомендации). Работоспособность модуля в других условиях возможна, но не гарантируется. {{< /alert >}} @@ -26,3 +23,239 @@ moduleStatus: experimental Поддерживаются два режима — LVM и LVMThin. Каждый из них имеет свои достоинства и недостатки, подробнее о различиях читайте в [FAQ](./faq.html#когда-следует-использовать-lvm-а-когда-lvmthin). + +## Быстрый старт + +Все команды следует выполнять на машине, имеющей доступ к API Kubernetes с правами администратора. + +### Включение модулей + +- Включить модуль sds-node-configurator + +```shell +kubectl apply -f - <}} -The module is guaranteed to work only in the following cases: -- if stock kernels shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux) are used; -- if a 10 Gbps network is used. - +The module is only guaranteed to work if [requirements](./readme.html#system-requirements-and-recommendations) are met. As for any other configurations, the module may work, but its smooth operation is not guaranteed. {{< /alert >}} diff --git a/docs/USAGE_RU.md b/docs/USAGE_RU.md index de075f03..6ad34fb6 100644 --- a/docs/USAGE_RU.md +++ b/docs/USAGE_RU.md @@ -4,10 +4,7 @@ description: "Использование и примеры работы sds-repl --- {{< alert level="warning" >}} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux); -- при использовании сети 10Gbps. - +Работоспособность модуля гарантируется только при соблюдении [требований](./readme.html#системные-требования-и-рекомендации). Работоспособность модуля в других условиях возможна, но не гарантируется. {{< /alert >}}