Экспериментальная версия. Функциональность может сильно измениться. Совместимость с будущими версиями не гарантируется.
Размещение двух независимых балансировщиков на одной виртуальной машине
На виртуальной машине с операционной системой Linux работают два приложения — HTTP-сервер (TCP 8080) и SMTP-сервер (TCP 2525). Необходимо настроить два отдельных балансировщика для этих сервисов — веб-балансировщик и SMTP-балансировщик.
Создание виртуальной машины
Создайте виртуальную машину my-vm
основываясь на примерах из документации DVP.
В примере манифеста ниже добавлен лейбл vm: my-vm
для дальнейшей идентификации в балансировщиках.
1apiVersion: virtualization.deckhouse.io/v1alpha2
2kind: VirtualMachine
3metadata:
4 name: my-vm
5 namespace: my-ns
6 labels:
7 vm: my-vm
8spec:
9 virtualMachineClassName: host
10 cpu:
11 cores: 1
12 memory:
13 size: 1Gi
14 provisioning:
15 type: UserData
16 userData: |
17 #cloud-config
18 ssh_pwauth: True
19 users:
20 - name: cloud
21 passwd: '$6$rounds=4096$saltsalt$fPmUsbjAuA7mnQNTajQM6ClhesyG0.yyQhvahas02ejfMAq1ykBo1RquzS0R6GgdIDlvS.kbUwDablGZKZcTP/'
22 shell: /bin/bash
23 sudo: ALL=(ALL) NOPASSWD:ALL
24 lock_passwd: False
25 blockDeviceRefs:
26 - kind: VirtualDisk
27 name: linux-disk
Манифесты балансировщиков для веб-сервиса и SMTP
Пример манифеста веб-балансировщика:
1apiVersion: network.deckhouse.io/v1alpha1
2kind: ServiceWithHealthchecks
3metadata:
4 name: web
5 namespace: my-ns
6spec:
7 ports:
8 - port: 80
9 protocol: TCP
10 targetPort: 8080
11 selector:
12 vm: my-vm
13 healthcheck:
14 probes:
15 - mode: HTTP
16 http:
17 targetPort: 8080
18 method: GET
19 path: /healthz
Пример манифеста SMTP-балансировщика:
1apiVersion: network.deckhouse.io/v1alpha1
2kind: ServiceWithHealthchecks
3metadata:
4 name: smtp
5 namespace: my-ns
6spec:
7 ports:
8 - port: 25
9 protocol: TCP
10 targetPort: 2525
11 selector:
12 vm: my-vm
13 healthcheck:
14 probes:
15 - mode: TCP
16 tcp:
17 targetPort: 2525
Балансировщики для работы с PostgreSQL-кластером
Создание StatefulSet для PostgreSQL
Для корректной работы StatefulSet
потребуется создать стандартный сервис (Service) для формирования DNS-имени отдельных подов. Этот сервис не будет использоваться для прямого доступа к базе данных.
1apiVersion: v1
2kind: Service
3metadata:
4 name: postgres
5spec:
6 selector:
7 app: postgres
8 ports:
9 - protocol: TCP
10 port: 5432
11 targetPort: 5432
Пример манифеста StatefulSet
:
1apiVersion: apps/v1
2kind: StatefulSet
3metadata:
4 name: postgres
5 name: my-ns
6spec:
7 serviceName: postgres
8 replicas: 3
9 selector:
10 matchLabels:
11 app: postgres
12 template:
13 metadata:
14 labels:
15 app: postgres
16 spec:
17 containers:
18 - name: postgres
19 image: postgres:13
20 ports:
21 - containerPort: 5432
22 env:
23 - name: POSTGRES_USER
24 value: postgres
25 - name: POSTGRES_PASSWORD
26 value: example
Конфигурация балансировщиков ServiceWithHealthchecks
Создайте Secret для хранения учетных данных для доступа проб к базе данных:
1kubectl -n my-ns create secret generic cred-secret --from-literal=user=postgres --from-literal=password=example cred-secret
Пример манифеста балансировщика для чтения:
1apiVersion: network.deckhouse.io/v1alpha1
2kind: ServiceWithHealthchecks
3metadata:
4 name: postgres-read
5spec:
6 ports:
7 - port: 5432
8 protocol: TCP
9 targetPort: 5432
10 selector:
11 app: postgres
12 healthcheck:
13 probes:
14 - mode: PostgreSQL
15 postgreSQL:
16 targetPort: 5432
17 dbName: postgres
18 authSecretName: cred-secret
19 query: "SELECT 1"
Пример манифеста балансировщика для записи:
1apiVersion: network.deckhouse.io/v1alpha1
2kind: ServiceWithHealthchecks
3metadata:
4 name: postgres-write
5spec:
6 ports:
7 - port: 5432
8 protocol: TCP
9 targetPort: 5432
10 selector:
11 app: postgres
12 healthcheck:
13 probes:
14 - mode: PostgreSQL
15 postgreSQL:
16 targetPort: 5432
17 dbName: postgres
18 authSecretName: cred-secret
19 query: "SELECT NOT pg_is_in_recovery()"