В одном из моих предыдущих постов я показал, как мы можем запустить базу данных 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, являются их собственными. |