Kubernetes – запуск stolon

Thank you for reading this post, don't forget to subscribe!

Stolon -это кла­стер для postgresql с авто­фай­ло­ве­ром, похож на patrony. - будем запус­кать это в кубере.

ЛЮБАЯ БАЗА ДАННЫХ В КОНТЕЙНЕРЕ - ЭТО ЗЛО.

Ста­вить будем через Helm.

[root@minikub ~]# mkdir stolon
[root@minikub ~]# cd stolon/

Для нача­ла выка­чи­ва­ем архив:

helm fetch stable/stolon

рас­па­ко­вы­ва­ем:

[root@minikub stolon]# tar xvfz stolon-1.6.1.tgz

 

 

созда­ём namespace  postgres в нём будем запус­кать наш кла­стер stolon

[root@minikub stolon]# kubectl create namespace postgres

созда­дим secret-ы  для суперпользователя:

для репли­ка­ции:

теперь пра­вим файл с переменными:

/root/stolon/stolon/values.yaml

  1. для супер­поль­зо­ва­те­ля:

[codesyntax lang="php"]

[/codesyntax]

 

2. для репликации:

[codesyntax lang="php"]

[/codesyntax]

 

3. уда­ля­ем не нужное:

[codesyntax lang="php"]

[/codesyntax]

 

4. меня­ем с

[codesyntax lang="php"]

[/codesyntax]

 

на

[codesyntax lang="php"]

[/codesyntax]

 

5. отклю­че­ние пакета:

[codesyntax lang="php"]

[/codesyntax]

 

6. Настрой­те pgParameters и уста­но­ви­те коли­че­ство реплик рав­ным 3 (все­го 3 экзем­пля­ра: 1 мастер, 1 резерв­ный син­хро­ни­за­тор и 1 резерв­ный асинхронный):

[codesyntax lang="php"]

[/codesyntax]

 

7. Мож­но ещё настро­ить анно­та­ции обна­ру­же­ния сер­ви­са для Prometheus, но я это­го делать не стал.

[codesyntax lang="php"]

[/codesyntax]

 

8.  мож­но оста­вить всё как есть но у меня дан­ные хра­нят­ся на nfs поэто­му попра­вим ещё сто­редж класс

[codesyntax lang="php"]

[/codesyntax]

 

managed-nfs-storage - берём отсюда:

[codesyntax lang="php"]

[/codesyntax]

 

всё, теперь файл values.yaml будет иметь вид:

[codesyntax lang="php"]

[/codesyntax]

запус­ка­ем установку:

[root@minikub stolon]# helm install stolon-pg --namespace postgres /root/stolon/stolon/ --values /root/stolon/stolon/values.yaml

нор­маль­ный вывод следующий:

[codesyntax lang="php"]

[/codesyntax]

про­ве­рим кор­рект­но ли пароль вытаскивается:

[root@minikub stolon]# kubectl get secret --namespace postgres pg-su -o jsonpath="{.data.password}" | base64 --decode; echo
MY_PASSWORD

как видим пароль тот кото­рый мы задали.

Про­ве­ря­ем:
Дис­ки созданы:

[codesyntax lang="php"]

[/codesyntax]

поды так же все создались:

[codesyntax lang="php"]

[/codesyntax]

общая инфор­ма­ция:

[codesyntax lang="php"]

[/codesyntax]

под­клю­ча­ем­ся к базе, для это­го смот­рим IP адрес:

[codesyntax lang="php"]

[/codesyntax]

[root@minikub stolon]# kubectl -n postgres exec -it stolon-pg-keeper-0 -- psql --host 10.101.142.225 --port 5432 --username MY_USER -W postgres

MY_USER - так я обо­звал пользователя
MY_PASSWORD -
это мой пароль

[codesyntax lang="php"]

[/codesyntax]

созда­ём базу:

postgres=# CREATE DATABASE test;
CREATE DATABASE

выхо­дим и пере­ко­нек­чи­ва­ем­ся под новой базой:

[root@minikub stolon]# kubectl -n postgres exec -it stolon-pg-keeper-0 -- psql --host 10.101.142.225 --port 5432 --username MY_USER -W -d test

созда­дим таб­ли­цу, доба­вим в неё данные

[codesyntax lang="php"]

[/codesyntax]

 

Про­ве­рим что будет если master грохнуть:

[codesyntax lang="php"]

[/codesyntax]

 

stolon-pg-keeper-0мастер, пото­му что pg_is_in_recoveryв состо­я­нии false

не закры­вая обо­лоч­ку откро­ем вто­рое окно и грох­нем мастера:

[root@minikub ~]# kubectl -n postgres delete pod stolon-pg-keeper-0
pod "stolon-pg-keeper-0" deleted

смот­рим логи сентинеля:

[root@minikub stolon]# kubectl logs -f -n postgres stolon-pg-sentinel-59f9df4676-mcnq6

[codesyntax lang="php"]

[/codesyntax]

теперь смот­рим по кон­фи­гам кто есть кто:

[codesyntax lang="php"]

[/codesyntax]

  • keeper-2 - async replica
  • keeper-1 - master
  • keeper-0 - sync replica

после всех наших мани­пу­ля­ций, под­клю­ча­юсь к базе и про­ве­ряю данные:

[codesyntax lang="php"]

[/codesyntax]

как видим всё нормально.

так же при пере­ез­де масте­ра на дру­гой кипер мы можем уви­деть что место на nfs сер­ве­ре меняется.
Тут мастер на keeper-1

[codesyntax lang="php"]

[/codesyntax]

а тут на keeper-0

[codesyntax lang="php"]

[/codesyntax]

как видим объ­ём изменился.