212
July 21, 2024, 4:04 p.m.
Перенос данных в EFS K8s
Задача: перенести данные из локального хранилища, в AWS EFS.
Для достижения поставленной задачи потребуется:
- установить зависимость aws-efs-csi-driver, у меня используется версия 3.0.0 так как она работает на ARM;
- создать efs диски;
- настроить access point;
- настроить кластер.
Зависимости
Для установки зависимостей можно использовать helm командой:
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
helm repo update
Далее устанавливаем в kube-system
:
helm install aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver --namespace kube-system
Создание дисков в EFS
Ниже приведен простой код для terraform который разворачивает ресурс.
resource "aws_efs_file_system" "example" {
creation_token = "example"
tags = {
Name = "Example"
}
}
resource "aws_efs_mount_target" "example" {
file_system_id = aws_efs_file_system.cloud.id
subnet_id = <ваша сеть>
security_groups = [<ваша группа безопасности>]
}
Конфигурация точки доступа (access point)
Для этого нужно перейти в консоль AWS (можно через terraform) зайти в созданный ресурс > Access points
> задать следующие параметры:
Root directory creation permissions
Owner user ID = 1000
Owner group ID = 1000
Permissions = 0770
Настройка кластера
Для работы с созданным ресурсом требуется добавить такие манифесты:
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-data-sc
provisioner: efs.csi.aws.com
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-core-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: example-data-sc
csi:
driver: efs.csi.aws.com
volumeHandle: fs-00d0<...>a51723::fsap-02ba<...>ecb5f
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-data-pvc
spec:
storageClassName: example-data-sc
volumeName: example-core-pv
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
В код deployment добавить volumeMounts
и volumes
:
volumeMounts:
- name: example-data-volume
mountPath: /var/vmail
readOnly: false
volumes:
- name: email-data-volume
persistentVolumeClaim:
claimName: email-data-pvc
Перенос данных
Для этого нужно выполнить команду. Она перенесет все данные, включая права.
rsync -avz /path/to/current/example/ /path/to/dest/example