Kaptain.
Telegram /
LinkedIn /
Email /
GIT /
RSS /
GPG /
Заказ печатных плат

№ 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: Today's spam: Want a larger dick?
Leave a Reply