-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ДЗ#12 Установка и использование CSI драйвера
- Loading branch information
Showing
16 changed files
with
688 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
## ДЗ#12 Установка и использование CSI драйвера | ||
|
||
### Задания: | ||
- Данное задание будет выполняться в managed k8s в Yandex cloud | ||
- Разверните managed Kubernetes cluster в Yandex cloud любым удобным вам способом, конфигурация нод не имеет значения | ||
- Создайте бакет в s3 object storage Yandex cloud. Он будет использоваться для монтирования volume внутрь подов. | ||
- Создайте ServiceAccount для доступа к бакету с правами, которые необходимы согласно инструкции YC и сгенерируйте ключи доступа. | ||
- Создайте secret c ключами для доступа к Object Storage и приложите манифест для проверки ДЗ | ||
- Создайте storageClass описывающий класс хранилища и приложите манифест для проверки ДЗ | ||
- Установите CSI driver из репозитория | ||
- Создайте манифест PVC, использующий для хранения созданный вами storageClass с механизмом autoProvisioning и приложите его для проверки ДЗ | ||
- Создайте манифест pod или deployment, использующий созданный ранее PVC в качестве volume и монтирующий его в контейнер пода в произвольную точку монтирования и приложите манифест для проверки ДЗ. | ||
- Под в процессе работы должен производить запись в примонтированную директорию. Убедитесь, что файлы действительно сохраняются в ObjectStorage. | ||
### Запуск | ||
- Создать s3 object storage Yandex cloud, я делал это ранее в ДЗ kubernetes-logging | ||
- Установить yc-csi `helm install --create-namespace yandex-csi-s3 ./csi-s3/` | ||
- Установить манифесты yc-s3-secret.yaml, yc-s3-sc.yaml, yc-s3-pvc.yaml | ||
- Запустить "Полезную нагрузку" yc-s3-test-storage-pod.yaml | ||
### Описание решения | ||
s3 object storage Yandex cloud и аккаунт к нему я делал еще в ДЗ kubernetes-logging, по этому я просто заново сгенерировал ключ: | ||
```sh | ||
urhero@urheroComp:~/otus/homework12/yourh3ro_repo$ yc iam access-key create --service-account-name bucket-acc | ||
access_key: | ||
id: ajeh6rd4bj4sdbeq55j9 | ||
service_account_id: ajeka3kirg39l24ouqf7 | ||
created_at: "2024-09-16T14:37:57.423849035Z" | ||
key_id: YCAJEEk4qXN_sO0yM5WJ-YlGJ | ||
secret: YCN_rF2gbEDttu3qhgkPBC_BolC******** | ||
``` | ||
Далее по интрукции установил helm chart https://github.com/yandex-cloud/k8s-csi-s3 | ||
И создал необходимые ресурсы: | ||
```yaml | ||
# yc-s3-secret.yaml | ||
apiVersion: v1 | ||
kind: Secret | ||
metadata: | ||
name: csi-s3-secret | ||
namespace: kube-system | ||
stringData: | ||
accessKeyID: YCAJEEk4qXN_sO0yM5WJ-YlGJ | ||
secretAccessKey: YCN_rF2gbEDttu3qhgkPBC_BolC******** | ||
endpoint: https://storage.yandexcloud.net | ||
--- | ||
# yc-s3-sc.yaml | ||
kind: StorageClass | ||
apiVersion: storage.k8s.io/v1 | ||
metadata: | ||
name: csi-s3-existing-bucket | ||
provisioner: ru.yandex.s3.csi | ||
parameters: | ||
mounter: geesefs | ||
options: "--memory-limit 1000 --dir-mode 0777 --file-mode 0666" | ||
bucket: otus-backet | ||
csi.storage.k8s.io/provisioner-secret-name: csi-s3-secret | ||
csi.storage.k8s.io/provisioner-secret-namespace: kube-system | ||
csi.storage.k8s.io/controller-publish-secret-name: csi-s3-secret | ||
csi.storage.k8s.io/controller-publish-secret-namespace: kube-system | ||
csi.storage.k8s.io/node-stage-secret-name: csi-s3-secret | ||
csi.storage.k8s.io/node-stage-secret-namespace: kube-system | ||
csi.storage.k8s.io/node-publish-secret-name: csi-s3-secret | ||
csi.storage.k8s.io/node-publish-secret-namespace: kube-system | ||
volumeBindingMode: Immediate | ||
--- | ||
# yc-s3-pvc.yml | ||
apiVersion: v1 | ||
kind: PersistentVolumeClaim | ||
metadata: | ||
name: csi-s3-pvc | ||
namespace: default | ||
spec: | ||
accessModes: | ||
- ReadWriteMany | ||
resources: | ||
requests: | ||
storage: 5Gi | ||
storageClassName: csi-s3-existing-bucket | ||
``` | ||
После применения этих манифетов я смог создать вод с "полезной" нагрузкой, в который подмонтировал yc s3: | ||
```yaml | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: yc-s3-test-storage-pod | ||
namespace: default | ||
spec: | ||
containers: | ||
- name: yc-s3-test-storage-pod | ||
image: busybox:1.31.1 | ||
command: [ "sh", "-c", "dd if=/dev/zero of=/data/storage-test.img bs=1M count=256 && sleep 3600" ] | ||
volumeMounts: | ||
- name: data | ||
mountPath: /data | ||
volumes: | ||
- name: data | ||
persistentVolumeClaim: | ||
claimName: csi-s3-pvc | ||
readOnly: false | ||
``` | ||
И увидел в консоли yandex cloud созданный файл: | ||
![alt text](../img/image19.png) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
apiVersion: v1 | ||
appVersion: 0.41.1 | ||
description: Container Storage Interface (CSI) driver for S3 volumes | ||
home: https://github.com/yandex-cloud/k8s-csi-s3 | ||
icon: https://raw.githubusercontent.com/yandex-cloud/geesefs/master/doc/geesefs.png | ||
keywords: | ||
- s3 | ||
name: csi-s3 | ||
sources: | ||
- https://github.com/yandex-cloud/k8s-csi-s3/deploy/helm | ||
version: 0.41.1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Helm chart for csi-s3 | ||
|
||
This chart adds S3 volume support to your cluster. | ||
|
||
## Install chart | ||
|
||
- Helm 2.x: `helm install [--set secret.accessKey=... --set secret.secretKey=... ...] --namespace kube-system --name csi-s3 .` | ||
- Helm 3.x: `helm install [--set secret.accessKey=... --set secret.secretKey=... ...] --namespace kube-system csi-s3 .` | ||
|
||
After installation succeeds, you can get a status of Chart: `helm status csi-s3`. | ||
|
||
## Delete Chart | ||
|
||
- Helm 2.x: `helm delete --purge csi-s3` | ||
- Helm 3.x: `helm uninstall csi-s3 --namespace kube-system` | ||
|
||
## Configuration | ||
|
||
By default, this chart creates a secret and a storage class. You should at least set `secret.accessKey` and `secret.secretKey` | ||
to your [Yandex Object Storage](https://cloud.yandex.com/en-ru/services/storage) keys for it to work. | ||
|
||
The following table lists all configuration parameters and their default values. | ||
|
||
| Parameter | Description | Default | | ||
| ---------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------ | | ||
| `storageClass.create` | Specifies whether the storage class should be created | true | | ||
| `storageClass.name` | Storage class name | csi-s3 | | ||
| `storageClass.singleBucket` | Use a single bucket for all dynamically provisioned persistent volumes | | | ||
| `storageClass.mounter` | Mounter to use. Either geesefs, s3fs or rclone. geesefs recommended | geesefs | | ||
| `storageClass.mountOptions` | GeeseFS mount options | `--memory-limit 1000 --dir-mode 0777 --file-mode 0666` | | ||
| `storageClass.reclaimPolicy` | Volume reclaim policy | Delete | | ||
| `storageClass.annotations` | Annotations for the storage class | | | ||
| `secret.create` | Specifies whether the secret should be created | true | | ||
| `secret.name` | Name of the secret | csi-s3-secret | | ||
| `secret.accessKey` | S3 Access Key | | | ||
| `secret.secretKey` | S3 Secret Key | | | ||
| `secret.endpoint` | Endpoint | https://storage.yandexcloud.net | | ||
| `secret.region` | Region | | | ||
| `tolerations.all` | Tolerate all taints by the CSI-S3 node driver (mounter) | false | | ||
| `tolerations.node` | Custom tolerations for the CSI-S3 node driver (mounter) | [] | | ||
| `tolerations.controller` | Custom tolerations for the CSI-S3 controller (provisioner) | [] | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
helm_chart: | ||
name: cr.yandex/crp9ftr22d26age3hulg/yandex-cloud/csi-s3/csi-s3 | ||
tag: 0.41.1 | ||
requirements: | ||
k8s_version: ">=1.13" | ||
images: | ||
- full: images.registrar | ||
- full: images.provisioner | ||
- full: images.csi | ||
user_values: | ||
- name: storageClass.create | ||
title: | ||
en: Create storage class | ||
ru: Создать класс хранения | ||
description: | ||
en: Specifies whether the storage class should be created | ||
ru: Выберите, чтобы создать новый S3-класс хранения при развёртывании приложения. | ||
boolean_value: | ||
default_value: true | ||
- name: secret.create | ||
title: | ||
en: Create secret | ||
ru: Создать секрет | ||
description: | ||
en: Specifies whether the secret should be created | ||
ru: Выберите, чтобы создать новый секрет для класса хранения при установке приложения, а не использовать существующий. | ||
boolean_value: | ||
default_value: true | ||
- name: secret.accessKey | ||
title: | ||
en: S3 Access Key ID | ||
ru: Идентификатор ключа S3 | ||
description: | ||
en: S3 Access Key ID | ||
ru: Идентификатор ключа S3. | ||
string_value: | ||
default_value: "" | ||
- name: secret.secretKey | ||
title: | ||
en: S3 Secret Key | ||
ru: Секретный ключ S3 | ||
description: | ||
en: S3 Secret Key | ||
ru: Секретный ключ S3. | ||
string_value: | ||
default_value: "" | ||
- name: storageClass.singleBucket | ||
title: | ||
en: Single S3 bucket for volumes | ||
ru: Общий бакет S3 для томов | ||
description: | ||
en: Single S3 bucket to use for all dynamically provisioned persistent volumes | ||
ru: Общий бакет S3, в котором будут создаваться все динамически распределяемые тома. Если пусто, под каждый том будет создаваться новый бакет. | ||
string_value: | ||
default_value: "" | ||
- name: secret.endpoint | ||
title: | ||
en: S3 endpoint | ||
ru: Адрес S3-сервиса | ||
description: | ||
en: S3 service endpoint to use | ||
ru: Адрес S3-сервиса, который будет использоваться. | ||
string_value: | ||
default_value: "https://storage.yandexcloud.net" | ||
- name: secret.region | ||
title: | ||
en: S3 region | ||
ru: S3 регион | ||
description: | ||
en: S3 service region to use | ||
ru: Регион используемого сервиса S3. | ||
string_value: | ||
default_value: "" | ||
- name: storageClass.mountOptions | ||
title: | ||
en: GeeseFS mount options | ||
ru: Опции монтирования GeeseFS | ||
description: | ||
en: GeeseFS mount options to use. Refer to `geesefs --help` command output for the whole list of options (https://github.com/yandex-cloud/geesefs). | ||
ru: Опции монтирования GeeseFS. Полный перечень и описание опций смотрите в выводе команды `geesefs --help` (https://github.com/yandex-cloud/geesefs). | ||
string_value: | ||
default_value: "--memory-limit 1000 --dir-mode 0777 --file-mode 0666" | ||
- name: storageClass.reclaimPolicy | ||
title: | ||
en: Volume reclaim policy | ||
ru: Политика очистки томов | ||
description: | ||
en: Volume reclaim policy for the storage class (Retain or Delete) | ||
ru: Выберите политику очистки томов PersistentVolume при удалении PersistentVolumeClaim. Retain — сохранять том, Delete — удалять том. | ||
string_selector_value: | ||
default_value: Delete | ||
values: | ||
- Delete | ||
- Retain | ||
- name: storageClass.name | ||
title: | ||
en: Storage class name | ||
ru: Название класса хранения | ||
description: | ||
en: Name of the storage class that will be created | ||
ru: Название класса хранения, который будет создан при установке. | ||
string_value: | ||
default_value: csi-s3 | ||
- name: secret.name | ||
title: | ||
en: Name of the secret | ||
ru: Название секрета | ||
description: | ||
en: Name of the secret to create or use for the storage class | ||
ru: Название секрета, который будет создан или использован для класса хранения. | ||
string_value: | ||
default_value: csi-s3-secret | ||
- name: tolerations.all | ||
title: | ||
en: Tolerate all taints | ||
ru: Игнорировать все политики taint | ||
description: | ||
en: Tolerate all taints by the CSI-S3 node driver (mounter) | ||
ru: Выберите, чтобы драйвер CSI, который монтирует файловую систему на узлах, игнорировал все политики taint для узлов кластера. | ||
boolean_value: | ||
default_value: false |
Oops, something went wrong.