Статьи

Запуск PostgreSQL в облаке на Oracle Containers Engine для Kubernetes

В этом посте я собираюсь показать несколько шагов для развертывания и запуска базы данных PostgreSQL в кластере K8S на OKE .

Развертывание будет основано на postgres: 11.1 Образ Docker, для которого требуется настроить несколько переменных среды: POSTGRES_DB (имя базы данных), POSTGRES_USER и POSTGRES_PASSWORD. Я собираюсь хранить значения этих переменных в K8S ConfigMap и Secret:

1
2
3
4
5
6
apiVersion: v1
kind: ConfigMap
metadata:
  name: postgre-db-config
data:
  db-name: flexdeploy
1
2
3
4
5
6
7
apiVersion: v1
kind: Secret
metadata:
  name: postgre-db-secret
stringData:
  username: creator
  password: c67

На эти ресурсы конфигурации K8S ссылается StatefulSet, который фактически заботится о сроке службы модуля с контейнером postgres-db :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: postgre-db
  labels:
    run: postgre-db
spec:
  selector:
      matchLabels:
        run: postgre-db
  serviceName: "postgre-db-svc"
  replicas: 1
  template:
    metadata:
      labels:
        run: postgre-db
    spec:
      containers:
      - image: postgres:11.1
        volumeMounts:
           - mountPath: /var/lib/postgresql/data
             name: db    
        env:
          - name: POSTGRES_DB
            valueFrom:
              configMapKeyRef:
                   name: postgre-db-config
                   key: db-name                  
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                   name: postgre-db-secret
                   key: username                  
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                   name: postgre-db-secret
                   key: password                  
          - name: PGDATA
            value: /var/lib/postgresql/data/pgdata          
        name: postgre-db
        ports:
        - containerPort: 5432
  volumeClaimTemplates:
   - metadata:
       name: db
     spec:
       accessModes: [ "ReadWriteOnce" ]
       resources:
         requests:
           storage: 3Gi  

Ресурс StatefulSet K8S был специально разработан для приложений с сохранением состояния, таких как базы данных, которые сохраняют свои данные в постоянном хранилище. Чтобы определить постоянное хранилище для нашей базы данных, мы используем другой ресурс K8s Persistent Volume, и здесь в файле манифеста мы определяем заявку на создание постоянного тома 3Gi с именем db . Том называется постоянным, поскольку его срок службы не поддерживается контейнером и даже не модулем, а поддерживается кластером K8s. Таким образом, он может пережить любые контейнеры и контейнеры и сохранить данные. Это означает, что если мы уничтожим или воссоздадим контейнер, модуль или даже весь StatefulSet, данные все равно будут там. Мы ссылаемся на этот постоянный том в определении контейнера, монтирующего том по пути / var / lib / postgresql / data . Здесь контейнер PostgreSQL хранит свои данные.

Для доступа к базе данных мы собираемся создать сервис :

01
02
03
04
05
06
07
08
09
10
11
apiVersion: v1
kind: Service
metadata:
  name: postgre-db-svc
spec:
  selector:
    run: postgre-db
  ports:
    - port: 5432
      targetPort: 5432
  type: LoadBalancer  

Это служба LoadBalancer , доступная из-за пределов кластера K8S:

1
2
3
$ kubectl get svc postgre-db-svc
NAME             TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE
postgre-db-svc   LoadBalancer   10.96.177.34   129.146.211.77   5432:32498/TCP   39m

Предполагая, что мы создали кластер K8s в OKE и наш kubectl настроен для связи с ним, мы можем применить файлы манифеста к кластеру:

1
2
3
4
kubectl apply -f postgre-db-config.yaml
kubectl apply -f postgre-db-secret.yaml
kubectl apply -f postgre-db-pv.yaml
kubectl apply -f postgre-db-service.yaml

Сделав это, мы можем подключиться к базе данных из нашей любимой IDE на нашем ноутбуке

Oracle Containers Engine

Файлы манифеста для этого поста доступны на GitHub .

Это оно!

Опубликовано на Java Code Geeks с разрешения Евгения Федоренко, партнера нашей программы JCG . См. Оригинальную статью здесь: Запуск PostgreSQL в облаке на Oracle Containers Engine для Kubernetes

Мнения, высказанные участниками Java Code Geeks, являются их собственными.