Skip to content

Commit

Permalink
[controller] Add docs for local-csi-node-watcher controller
Browse files Browse the repository at this point in the history
Signed-off-by: Viktor Kramarenko <viktor.kramarenko@flant.com>
  • Loading branch information
ViktorKram committed May 6, 2024
1 parent d5f5c05 commit 1f51d67
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 101 deletions.
38 changes: 34 additions & 4 deletions docs/FAQ.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ Overprovisioning в LVMThin нужно использовать с осторо
Узлы, которые будут задействованы модулем, определяются специальными метками, указанными в поле `nodeSelector` в настройках модуля.

Для отображения и редактирования настроек модуля, можно выполнить команду:

```shell
kubectl edit mc sds-local-volume
```

Примерный вывод команды:

```yaml
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
Expand All @@ -44,10 +46,12 @@ status:
```
Для отображения существующих меток, указанных в поле `nodeSelector`, можно выполнить команду:

```shell
kubectl get mc sds-local-volume -o=jsonpath={.spec.settings.dataNodes.nodeSelector}
```
Примерный вывод команды:

```yaml
nodeSelector:
my-custom-label-key: my-custom-label-value
Expand All @@ -60,6 +64,7 @@ kubectl -n d8-sds-local-volume get secret d8-sds-local-volume-controller-config
```

Примерный вывод команды:

```yaml
nodeSelector:
kubernetes.io/os: linux
Expand All @@ -73,6 +78,7 @@ nodeSelector:
> Обратите внимание, что в поле `nodeSelector` может быть указано любое количество меток, но важно, чтобы каждая из указанных меток присутствовала на узле, который Вы собираетесь использовать для работы с модулем. Именно при наличии всех указанных меток на выбранном узле, произойдет запуск pod-а `sds-local-volume-csi-node`.

После добавление меток на узлах должны быть запущены pod-ы `sds-local-volume-csi-node`. Проверить их наличие можно командой:

```shell
kubectl -n d8-sds-local-volume get pod -owide
```
Expand All @@ -85,6 +91,16 @@ nodeSelector:
kubectl -n d8-sds-local-volume get po -owide
```

Если pod отсутствует, необходимо проверить, что на нужном узле имеются все указанные в секрете `d8-sds-local-volume-controller-config` метки.

```shell
kubectl -n d8-sds-local-volume get secret d8-sds-local-volume-controller-config -o jsonpath='{.data.config}' | base64 --decode
```

```shell
kubectl get node %node-name% --show-labels
```

Если pod отсутствует, значит данный узел не удовлетворяет `nodeSelector`, указанному в настройках `ModuleConfig` `sds-local-volume`.
Настройка модуля и `nodeSelector` описаны [здесь](#я-не-хочу-чтобы-модуль-использовался-на-всех-узлах-кластера-как-мне-выбрать-желаемые-узлы-).

Expand All @@ -99,32 +115,38 @@ kubectl -n d8-sds-local-volume logs -l app=sds-local-volume-controller
Для вывода узла из-под управления модуля необходимо убрать метки, указанные в поле `nodeSelector` в настройках модуля `sds-local-volume`.

Проверить наличие существующих меток в `nodeSelector` можно командой:

```shell
kubectl get mc sds-local-volume -o=jsonpath={.spec.settings.dataNodes.nodeSelector}
```

Примерный вывод команды:

```yaml
nodeSelector:
my-custom-label-key: my-custom-label-value
```

Снимите указанные в `nodeSelector` метки с желаемых узлов.

```shell
kubectl label node %node-name% %label-from-selector%-
```
> Обратите внимание, что для снятия метки необходимо после его ключа вместо значения сразу же поставить знак минуса.

В результате pod `sds-local-volume-csi-node` должен быть удален с желаемого узла. Для проверки состояния можно выполнить команду:

```shell
kubectl -n d8-sds-local-volume get po -owide
```

Если pod `sds-local-volume-csi-node` после удаления метки `nodeSelector` все же остался на узле, пожалуйста, убедитесь, что указанные в конфиге `d8-sds-local-volume-controller-config` в `nodeSelector` метки действительно успешно снялись с выбранного узла.
Проверить это можно командой:
> ```shell
> kubectl get node %node-name% --show-labels=true
> ```

```shell
kubectl get node %node-name% --show-labels
```

Если метки из `nodeSelector` не присутствуют на узле, то убедитесь, что данному узлу не принадлежат `LVMVolumeGroup` ресурсы, использующиеся `LocalStorageClass` ресурсами. Подробнее об этой проверке можно [здесь](#как-проверить-имеются-ли-зависимые-ресурсы-lvmvolumegroup-на-узле-).


Expand All @@ -135,15 +157,19 @@ kubectl -n d8-sds-local-volume get po -owide
## Как проверить, имеются ли зависимые ресурсы `LVMVolumeGroup` на узле?
Для проверки таковых ресурсов необходимо выполнить следующие шаги:
1. Отобразить имеющиеся `LocalStorageClass` ресурсы

```shell
kubectl get lsc
```

2. Проверить у каждого из них список используемых `LVMVolumeGroup` ресурсов

```shell
kubectl get lsc %lsc-name% -oyaml
```

Примерный вид `LocalStorageClass`

```yaml
apiVersion: v1
items:
Expand All @@ -164,13 +190,17 @@ items:
phase: Created
kind: List
```

> Обратите внимание на поле spec.lvm.lvmVolumeGroups - именно в нем указаны используемые `LVMVolumeGroup` ресурсы.

3. Отобразите список существующих `LVMVolumeGroup` ресурсов

```shell
kubectl get lvg
```
Примерный вывод `LVMVolumeGroup` ресурсов

Примерный вывод `LVMVolumeGroup` ресурсов:

```text
NAME HEALTH NODE SIZE ALLOCATED SIZE VG AGE
lvg-on-worker-0 Operational node-worker-0 40956Mi 0 test-vg 15d
Expand Down
188 changes: 91 additions & 97 deletions docs/README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,37 +23,37 @@ moduleStatus: experimental

- Включить модуль sds-node-configurator

```yaml
kubectl apply -f - <<EOF
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: sds-node-configurator
spec:
enabled: true
version: 1
EOF
```
```yaml
kubectl apply -f - <<EOF
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: sds-node-configurator
spec:
enabled: true
version: 1
EOF
```

- Дождаться, когда модуль перейдет в состояние `Ready`. На этом этапе НЕ нужно проверять поды в namespace `d8-sds-node-configurator`.

```shell
kubectl get mc sds-node-configurator -w
```
```shell
kubectl get mc sds-node-configurator -w
```

- Включить модуль `sds-local-volume`. Возможные настройки модуля рекомендуем посмотреть в [конфигурации](./configuration.html). В примере ниже модуль запускается с настройками по умолчанию. Это приведет к тому, что на всех узлах кластера будут запущены служебные поды компонентов `sds-local-volume`.

```yaml
kubectl apply -f - <<EOF
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: sds-local-volume
spec:
enabled: true
version: 1
EOF
```
```yaml
kubectl apply -f - <<EOF
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: sds-local-volume
spec:
enabled: true
version: 1
EOF
```

- Дождаться, когда модуль перейдет в состояние `Ready`.

Expand All @@ -63,15 +63,16 @@ moduleStatus: experimental

- Проверить, что в namespace `d8-sds-local-volume` и `d8-sds-node-configurator` все поды в состоянии `Running` или `Completed` и запущены на всех узлах, где планируется использовать ресурсы `LVM`.

```shell
kubectl -n d8-sds-local-volume get pod -owide -w
kubectl -n d8-sds-node-configurator get pod -o wide -w
```
```shell
kubectl -n d8-sds-local-volume get pod -owide -w
kubectl -n d8-sds-node-configurator get pod -o wide -w
```

### Подготовка узлов к созданию хранилищ на них
Для создания хранилищ на узлах необходимо, чтобы на выбранных узлах были запущены pod-ы `sds-local-volume-csi-node`.

По умолчанию pod-ы выедут на всех узлах кластера, проверить их наличие можно командой:

```shell
kubectl -n d8-sds-local-volume get pod -owide
```
Expand All @@ -82,6 +83,7 @@ moduleStatus: experimental
Необходимо на этих узлах создать группы томов `LVM` с помощью пользовательских ресурсов `LVMVolumeGroup`. В быстром старте будем создавать обычное `Thick` хранилище.

> Пожалуйста, перед созданием `LVMVolumeGroup` убедитесь, что на данном узле запущен pod `sds-local-volume-csi-node`. Это можно сделать командой:
>
> ```shell
> kubectl -n d8-sds-local-volume get pod -owide
> ```
Expand All @@ -104,26 +106,26 @@ moduleStatus: experimental
- Создать ресурс [LVMVolumeGroup](../../sds-node-configurator/stable/cr.html#lvmvolumegroup) для узла `worker-0`:

```yaml
kubectl apply -f - <<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: LvmVolumeGroup
metadata:
name: "vg-1-on-worker-0" # The name can be any fully qualified resource name in Kubernetes. This LvmVolumeGroup resource name will be used to create LocalStorageClass in the future
spec:
type: Local
blockDeviceNames: # specify the names of the BlockDevice resources that are located on the target node and whose CONSUMABLE is set to true. Note that the node name is not specified anywhere since it is derived from BlockDevice resources.
- dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa
- dev-0cfc0d07f353598e329d34f3821bed992c1ffbcd
actualVGNameOnTheNode: "vg-1" # the name of the LVM VG to be created from the above block devices on the node
EOF
```
```yaml
kubectl apply -f - <<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: LvmVolumeGroup
metadata:
name: "vg-1-on-worker-0" # The name can be any fully qualified resource name in Kubernetes. This LvmVolumeGroup resource name will be used to create LocalStorageClass in the future
spec:
type: Local
blockDeviceNames: # specify the names of the BlockDevice resources that are located on the target node and whose CONSUMABLE is set to true. Note that the node name is not specified anywhere since it is derived from BlockDevice resources.
- dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa
- dev-0cfc0d07f353598e329d34f3821bed992c1ffbcd
actualVGNameOnTheNode: "vg-1" # the name of the LVM VG to be created from the above block devices on the node
EOF
```

- Дождаться, когда созданный ресурс `LVMVolumeGroup` перейдет в состояние `Operational`:

```shell
kubectl get lvg vg-1-on-worker-0 -w
```
```shell
kubectl get lvg vg-1-on-worker-0 -w
```

- Если ресурс перешел в состояние `Operational`, то это значит, что на узле `worker-0` из блочных устройств `/dev/nvme1n1` и `/dev/nvme0n1p6` была создана LVM VG с именем `vg-1`.

Expand All @@ -146,79 +148,71 @@ moduleStatus: experimental

- Дождаться, когда созданный ресурс `LVMVolumeGroup` перейдет в состояние `Operational`:

```shell
kubectl get lvg vg-1-on-worker-1 -w
```
```shell
kubectl get lvg vg-1-on-worker-1 -w
```

- Если ресурс перешел в состояние `Operational`, то это значит, что на узле `worker-1` из блочного устройства `/dev/nvme1n1` и `/dev/nvme0n1p6` была создана LVM VG с именем `vg-1`.

- Далее создать ресурс [LVMVolumeGroup](../../sds-node-configurator/stable/cr.html#lvmvolumegroup) для узла `worker-2`:

```yaml
kubectl apply -f - <<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: LvmVolumeGroup
metadata:
name: "vg-1-on-worker-2"
spec:
type: Local
blockDeviceNames:
- dev-53d904f18b912187ac82de29af06a34d9ae23199
- dev-6c5abbd549100834c6b1668c8f89fb97872ee2b1
actualVGNameOnTheNode: "vg-1"
EOF
```
```yaml
kubectl apply -f - <<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: LvmVolumeGroup
metadata:
name: "vg-1-on-worker-2"
spec:
type: Local
blockDeviceNames:
- dev-53d904f18b912187ac82de29af06a34d9ae23199
- dev-6c5abbd549100834c6b1668c8f89fb97872ee2b1
actualVGNameOnTheNode: "vg-1"
EOF
```

- Дождаться, когда созданный ресурс `LVMVolumeGroup` перейдет в состояние `Operational`:

```shell
kubectl get lvg vg-1-on-worker-2 -w
```
```shell
kubectl get lvg vg-1-on-worker-2 -w
```

- Если ресурс перешел в состояние `Operational`, то это значит, что на узле `worker-2` из блочного устройства `/dev/nvme1n1` и `/dev/nvme0n1p6` была создана LVM VG с именем `vg-1`.

- Создать ресурс [LocalStorageClass](./cr.html#localstorageclass):

```yaml
kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: LocalStorageClass
metadata:
name: local-storage-class
spec:
lvm:
lvmVolumeGroups:
- name: vg-1-on-worker-0
- name: vg-1-on-worker-1
- name: vg-1-on-worker-2
type: Thick
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
EOF
```
```yaml
kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: LocalStorageClass
metadata:
name: local-storage-class
spec:
lvm:
lvmVolumeGroups:
- name: vg-1-on-worker-0
- name: vg-1-on-worker-1
- name: vg-1-on-worker-2
type: Thick
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
EOF
```

- Дождаться, когда созданный ресурс `LocalStorageClass` перейдет в состояние `Created`:

```shell
kubectl get lsc local-storage-class -w
```
```shell
kubectl get lsc local-storage-class -w
```

- Проверить, что соответствующий `StorageClass` создался:

```shell
kubectl get sc local-storage-class
```
```shell
kubectl get sc local-storage-class
```

- Если `StorageClass` с именем `local-storage-class` появился, значит настройка модуля `sds-local-volume` завершена. Теперь пользователи могут создавать PV, указывая `StorageClass` с именем `local-storage-class`. При указанных выше настройках будет создаваться том с 3мя репликами на разных узлах.

## Вывод узла из-под управления модуля

Если в процессе работы появилась необходимость вывести узел из-под управления модуля, необходимо убрать с узла метки, указанные в `nodeSelector` в настройках `ModuleConfig` `sds-local-volume`.

Подробнее про процедуру вывода узла из-под управления модуля можно прочитать [здесь](FAQ.ru.md#я-хочу-вывести-узел-из-под-управления-модуля-что-делать).

> Обратите внимание, что для успешного вывода узла из-под управления модуля, необходимо, чтобы на узле не было создано ресурсов `LVMVolumeGroup`, которые использовались бы в ресурсах `LocalStorageClass`, то есть, которые использовались бы `Storage Class` с `provisioner` `local.csi.storage.deckhouse.io`. Подробнее про процедуру проверки описано [здесь](FAQ.ru.md#как-проверить-имеются-ли-зависимые-ресурсы-lvmvolumegroup-на-узле-).
## Системные требования и рекомендации

### Требования
Expand Down

0 comments on commit 1f51d67

Please sign in to comment.