Статьи

Постоянные тома для контейнеров баз данных, работающих в кластере K8s

В одном из моих предыдущих постов я показал, как мы можем запустить базу данных Oracle XE в кластере K8s . Этот подход прекрасно работает в тех случаях, когда нам нет дела до данных, и мы можем потерять их, когда контейнер будет перераспределен, а модуль перезапущен. Но если мы хотим сохранить данные, если мы хотим, чтобы они пережили все перепланирование, мы хотим пересмотреть ресурсы K8, используемые для запуска контейнера БД в кластере. Тем не менее, файл yaml, определяющий ресурсы, выглядит следующим образом:

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
52
53
54
55
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: oraclexe
  labels:
    run: oraclexe
spec:
  selector:
      matchLabels:
        run: oraclexe
  serviceName: "oraclexe-svc"
  replicas: 1
  template:
    metadata:
      labels:
        run: oraclexe
    spec:
      volumes:
       - name: dshm
         emptyDir:
           medium: Memory  
      containers:
      - image: eugeneflexagon/database:11.2.0.2-xe
        volumeMounts:
           - mountPath: /dev/shm
             name: dshm
           - mountPath: /u01/app/oracle/oradata
             name: db
        imagePullPolicy: Always
        name: oraclexe
        ports:
        - containerPort: 1521
          protocol: TCP
  volumeClaimTemplates:
   - metadata:
       name: db
     spec:
       accessModes: [ "ReadWriteOnce" ]
       resources:
         requests:
           storage: 100M                  
---
apiVersion: v1
kind: Service
metadata:
  name: oraclexe-svc
  labels:
    run: oraclexe  
spec:
  selector:
    run: oraclexe
  ports:
    - port: 1521
      targetPort: 1521
  type: LoadBalancer

Здесь есть несколько интересных вещей. Прежде всего, это не развертывание. Здесь мы определяем другой ресурс K8s, который называется Stateful Set . В отличие от развертывания , Stateful Set поддерживает липкую идентичность для каждого из своих модулей . Эти модули созданы из одной и той же спецификации, но они не являются взаимозаменяемыми: у каждого есть постоянный идентификатор, который он поддерживает при любом перепланировании.

Этот парень был специально разработан для приложений с сохранением состояния, таких как базы данных, которые сохраняют свои данные в постоянном хранилище. Чтобы определить постоянное хранилище для нашей базы данных, мы используем специальный
Ресурс K8s Persistent Volume и здесь, в файле yaml, мы определяем заявку на создание постоянного тома объемом 100 МБ с именем db . Этот том предоставляет режим доступа для чтения / записи для одного назначенного модуля. Том называется постоянным, поскольку его срок службы не поддерживается контейнером и даже не модулем, а поддерживается кластером K8s . Таким образом, он может пережить любые контейнеры и контейнеры и сохранить данные. Мы ссылаемся на этот постоянный том в определении контейнера, монтируя том по пути / u01 / app / oracle / oradata. Здесь контейнер Oracle DB XE хранит свои данные.

Это оно!

Опубликовано на Java Code Geeks с разрешения Евгения Федоренко, партнера нашей программы JCG . См. Оригинальную статью здесь: Постоянные тома для контейнеров баз данных, работающих в кластере K8s

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