Статьи

Развертывание и масштабирование базы данных Oracle в многоузловом кластере Kubernetes

В этом посте я собираюсь объяснить, как развернуть и масштабировать базу данных Oracle Express в многоузловом кластере Kubernetes . Я собираюсь использовать этот контейнер Docker от Максима Быленко. Я имею в виду контейнер для Oracle XE 11g из-за следующей открытой проблемы с этим для Oracle XE 12c в то время, когда я делал процесс, описанный ниже. Я предполагаю, что читатели имеют, по крайней мере, базовый или средний уровень знаний о понятиях Kubernetes.

Первое, что нужно сделать, это создать Pod. Мы можем сделать это (и другие операции, описанные в этом посте) декларативно через файл YAML:

01
02
03
04
05
06
07
08
09
10
11
12
13
apiVersion: v1
kind: Pod
metadata:
name: "oradb"
labels:
name: "oradb"
spec:
containers:
- image: "sath89/oracle-xe-11g:latest"
name: "oradb"
ports:
- containerPort: 1521
restartPolicy: Always

После того, как Pod был успешно создан, нам нужно создать для него Сервис:

01
02
03
04
05
06
07
08
09
10
11
apiVersion: v1
kind: Service
metadata:
name: "oradb"
labels:
app: "oradb"
spec:
ports:
- port: 1521
selector:
app: "oradb"

Теперь нам нужно создать ReplicationController. Это позволяет легко создавать несколько модулей и затем гарантировать, что это количество модулей всегда существует: в случае сбоя модуля его заменяет контроллер репликации. Вот как мы можем декларативно создать ReplicationController, указав, что нам нужно 2 реплики:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: ReplicationController
metadata:
name: "oradb"
labels:
app: "oradb"
spec:
replicas: 2
selector:
app: "oradb"
template:
metadata:
labels:
app: "oradb"
spec:
containers:
- image: "sath89/oracle-xe-11g:latest"
name: "oradb"

Мы можем проверить, был ли ReplicationController успешно создан из оболочки через

1
kubectl:

kubectl получить RC

или, если в OpenShift Origin:

1
2
3
4
oc get rc
 
NAME      DESIRED   CURRENT   AGE
oradb       2            2                  1d

Давайте проверим на стручки:

1
kubectl get pods

или в источнике OpenShift:

1
2
3
4
5
6
oc get pods
 
<i>NAME          READY     STATUS    RESTARTS   AGE
oradb           1/1         Running        0          1d
oradb-6rs8h   1/1       Running        0          1d
oradb-cq2x9   1/1       Running       0          1d</i>

Теперь представьте, что нам нужно масштабировать кластер от 2 до 3 модулей. Это можно сделать просто с помощью команды kubectl scale:

1
kubectl scale rc oradb --replicas=3

или команда oc scale:

1
oc scale rc oradb --replicas=3

Как только приведенная выше команда будет выполнена, мы найдем новый модуль в списке:

1
2
3
4
5
6
NAME          READY     STATUS    RESTARTS   AGE
oradb         1/1         Running        0          1d
oradb-6rs8h   1/1       Running        0          1d
oradb-cq2x9   1/1       Running       0          1d
 
oradb-rplzj   1/1       Running       0          1d

И это новая ситуация для ReplicationController:

1
2
NAME      DESIRED   CURRENT   AGE
oradb       3            3                  1d

Sid базы данных — это xe, а учетные данные для подключения:

1
2
username: system
password: oracle
Опубликовано на Java Code Geeks с разрешения Googlielmo Iozzia, партнера нашей программы JCG. См. Оригинальную статью здесь: Развертывание и масштабирование базы данных Oracle в многоузловом кластере Kubernetes.

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