TGViewer
Сочный DevOps Сочный DevOps @andtree_sec · 420 subscribers
Post #201 290
glusterfs в k8s

Установку самого 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
More from @andtree_sec
  1. Sep 7, 2026Давненько не было сообщений. Скорее всего в будущем они уйдут в telegraf, который я еще не…
  2. Jul 6, 2026Последнее время на работе часто приходится работать с apache flink и даже что-то писать на…
  3. Jun 4, 2026Немножко про молекула тесты... У нас принято использовать в переменных lookup плагин для д…
  4. May 20, 2026Очередной небольшой проект. Веб-приложение, которое агрегирует через стандартный механиз g…
  5. May 15, 2026Включаем профилирование в ansible Профилирование, это вывод даты, времени запуска и итогов…
  6. Apr 17, 2026Так выглядит общий dashbord работы с инцидентами.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →