№ 11546 В разделе
Sysadmin
от March 5th, 2022,
В подшивках: Kubernetes, Selectel
Селектел в настоящее время предоставляет 2 типа хранилища для краткосрочного хранения (стандартный) и долгосрочного (холодное хранилище). Оба типа этих хранилищ доступны для работы через S3 и значит их можно подключить как волюм в ваш кубер. Один удобен для хранения статических файлов сайтов, а другой для хранения бэкапов. Прямо сейчас бегите в панель управления Селектелом и создайте 2 бакета разных типов: k8s-storage-cold
и k8s-storage-standart
, создайте юзеров и откройте доступ к этим бакетам по S3.
Теперь необходимо заиметь 2 класса хранилища, которые указывают на 2 разных секрета. По настройкам видно, что все волюмы конкретного класса я хочу хранить в одном своем бакете. Хотя можно настроить чтобы бакеты сами создавались, но тогда там черт ногу сломит потом.
--- apiVersion: v1 kind: Secret metadata: namespace: kube-system name: csi-s3-secret-standart stringData: accessKeyID: "24534_k8s_std" secretAccessKey: "mypassword" endpoint: https://s3.selcdn.ru --- apiVersion: v1 kind: Secret metadata: namespace: kube-system name: csi-s3-secret-cold stringData: accessKeyID: "34345_k8s_cold" secretAccessKey: "mypassword" endpoint: https://s3.selcdn.ru --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-s3-cold provisioner: ru.yandex.s3.csi parameters: mounter: goofys options: "--memory-limit 1000 --dir-mode 0777 --file-mode 0666" bucket: "k8s-storage-cold" csi.storage.k8s.io/provisioner-secret-name: csi-s3-secret-cold csi.storage.k8s.io/provisioner-secret-namespace: kube-system csi.storage.k8s.io/controller-publish-secret-name: csi-s3-secret-cold csi.storage.k8s.io/controller-publish-secret-namespace: kube-system csi.storage.k8s.io/node-stage-secret-name: csi-s3-secret-cold csi.storage.k8s.io/node-stage-secret-namespace: kube-system csi.storage.k8s.io/node-publish-secret-name: csi-s3-secret-cold csi.storage.k8s.io/node-publish-secret-namespace: kube-system --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-s3-standart provisioner: ru.yandex.s3.csi parameters: mounter: goofys options: "--memory-limit 1000 --dir-mode 0777 --file-mode 0666" bucket: "k8s-storage-standart" csi.storage.k8s.io/provisioner-secret-name: csi-s3-secret-standart csi.storage.k8s.io/provisioner-secret-namespace: kube-system csi.storage.k8s.io/controller-publish-secret-name: csi-s3-secret-standart csi.storage.k8s.io/controller-publish-secret-namespace: kube-system csi.storage.k8s.io/node-stage-secret-name: csi-s3-secret-standart csi.storage.k8s.io/node-stage-secret-namespace: kube-system csi.storage.k8s.io/node-publish-secret-name: csi-s3-secret-standart csi.storage.k8s.io/node-publish-secret-namespace: kube-system
Теперь склонируйте https://github.com/yandex-cloud/k8s-csi-s3 (зеркало) к себе на жесткий диск. В deploy/kubernetes
лежат 3 манифеста, которые в обычной установке править не надо, но у меня microk8s, которое устанавливается через snap пакет, значит все пути к файлам на хост машине нужно менять с /var/lib/kubelet
на /var/snap/microk8s/common/var/lib/kubelet
. Применяете все 3 манифеста и ждете пока поднимутся поды.
Теперь создаем последний ресурс
apiVersion: storage.k8s.io/v1beta1 kind: CSIDriver metadata: name: ru.yandex.s3.csi spec: attachRequired: true podInfoOnMount: true
Готово! Можно затестить что получилось
kind: Deployment apiVersion: apps/v1 metadata: name: pimcore-storage-provider spec: replicas: 1 selector: matchLabels: app: nfs-s3-provider component: storage strategy: type: Recreate template: metadata: labels: app: nfs-s3-provider component: storage spec: containers: - name: shell image: busybox:stable command: - "/bin/sh" args: - "-c" - "while true; do sleep 30; done;" volumeMounts: - name: conf-volume mountPath: /conf subPath: conf - name: data-volume mountPath: /data subPath: datatouch test - name: httpd image: httpd volumeMounts: - name: conf-volume mountPath: /conf subPath: conf - name: data-volume mountPath: /data subPath: data volumes: - name: conf-volume persistentVolumeClaim: claimName: test-s3-mount - name: data-volume persistentVolumeClaim: claimName: test-s3-mount-cold --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-s3-mount spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: csi-s3-standart --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-s3-mount-cold spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: csi-s3-cold
Создали под в контейнеры которого монтируются 2 разных типа хранилища, теперь можно поиграться и в прод!
Fortune cookie: YOW!! Everybody out of the GENETIC POOL!
Leave a Reply