Установку самого glusterfs рассматривать не будем. Тут предполагается, что он установлен на внешних, по отношению к куберу серверах и том работает в режиме
distributed-replicated.В k8s работу с glusterfs можно реализовать через kadalu проект. У меня fluxcd, пишем под него деплой.
1. helmrelease.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: kadalu
namespace: kadalu
spec:
interval: 10m
releaseName: kadalu
install:
crds: Create
upgrade:
crds: CreateReplace
chart:
spec:
chart: kadalu
version: "1.3.0"
sourceRef:
kind: HelmRepository
name: kadalu
namespace: flux-system
interval: 10m
values:
global:
image:
registry: "<you_proxy_registry>"
repository: "kadalu"
pullPolicy: "IfNotPresent"
kubernetesDistro: "kubernetes"
operator:
enabled: true
verbose: "no"
2. repository.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: kadalu
namespace: flux-system
spec:
interval: 1h
url: oci://<registry>/path/helm
type: oci
secretRef:
name: <secret_name>
Я взял официальный helm релиз со страницы релизов на github. Файлик
kadalu-helm-chart.tgz и залил в корп регистри так:helm registry login <registry>
helm pull oci://<registry>/<project>/helm/kadalu:1.3.0
3. kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- repository.yaml
- helmrelease.yaml
Далее на уровне нужного кластера создаем secret.yaml, где описываем стандартный dockerconfigjson манифест для авторизации в регистри.
Там же создаем файл storage.yaml:
apiVersion: kadalu-operator.storage/v1alpha1
kind: KadaluStorage
metadata:
name: glusterfs
namespace: kadalu
spec:
type: External
single_pv_per_pool: false
details:
gluster_host: <gluster_host>
gluster_volname: glusterfs_data
gluster_options: "backupvolfile-server=<gluster_host_2>,log-level=WARNING"
В gluster_options если есть еще сервера с glusterfs, можно их все указать через запятую в backupvolfile-server. Это для HA, если вдруг что с хостом, указанным в gluster_host будем подключаться к указанным в backupvolfile-server.
После деплоя, создадим проверочный pvc:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-data
namespace: test
spec:
accessModes:
- ReadWriteMany
storageClassName: kadalu.glusterfs
resources:
requests:
storage: 20Gi
И под, который его использует:
apiVersion: v1
kind: Pod
metadata:
name: app-uses-kadalu
namespace: test
spec:
containers:
- name: busybox
image: busybox:1.36
command: ["sh", "-c", "sleep 3600"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: app-data
Внутри в директории /data можно создать файлы, затем запустить еще один такой же под и проверить, что они доступны и в нем.
#glusterfs