3.2.4. 新しいデータベースに必要なリソースを準備する
データベースがデプロイされる namespace を作成するか、その namespace に切り替えます。
新しい PostgreSQL データベースがインストールされる namespace の名前を変数にエクスポートします。既存の namespace を使用することも、新しい namespace を作成することもできます。3scale がインストールされているのと同じ namespace に新しいデータベースをデプロイすることも可能ですが、推奨されません。
DB_NAMESPACE=<database-target-namespace>
oc project $DB_NAMESPACE
または
oc new-project $DB_NAMESPACE
3scale namespace から既存の OpenShift シークレット system-database をエクスポートします。
oc get secret system-database -n $THREESCALE_NAMESPACE -o yaml > system-database-secret.yml
元のデータベースと同じユーザー名とパスワードを使用して、データベース namespace にシークレットを作成します (データベースが 3scale がインストールされている namespace とは異なる namespace にインストールされている場合にのみ必要です)。
DB_USER=$(oc get secret system-database -n $THREESCALE_NAMESPACE -o jsonpath='{.data.DB_USER}' | base64 -d)
DB_PASSWORD=$(oc get secret system-database -n $THREESCALE_NAMESPACE -o jsonpath='{.data.DB_PASSWORD}' | base64 -d)
oc create secret generic system-database --from-literal=DB_USER=$DB_USER --from-literal=DB_PASSWORD=$DB_PASSWORD --namespace=$DB_NAMESPACE
新しい PostgreSQL 15 のデプロイメントの仕様を定義した system-postgresql-deployment-external.yaml という YAML ファイルをローカルに作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: system-postgresql-external
labels:
app: system-postgresql-external
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
deployment: system-postgresql-external
strategy:
type: Recreate
template:
metadata:
labels:
deployment: system-postgresql-external
spec:
containers:
- name: system-postgresql-external
image: registry.redhat.io/rhel9/postgresql-15
imagePullPolicy: IfNotPresent
env:
- name: POSTGRESQL_USER
valueFrom:
secretKeyRef:
key: DB_USER
name: system-database
- name: POSTGRESQL_PASSWORD
valueFrom:
secretKeyRef:
key: DB_PASSWORD
name: system-database
- name: POSTGRESQL_DATABASE
value: system
ports:
- containerPort: 5432
protocol: TCP
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 5432
timeoutSeconds: 1
readinessProbe:
exec:
command:
- /bin/sh
- -i
- -c
- psql -h 127.0.0.1 -U $POSTGRESQL_USER -q -d $POSTGRESQL_DATABASE -c 'SELECT 1'
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 5
resources:
limits:
memory: 2Gi
requests:
cpu: 250m
memory: 512Mi
volumeMounts:
- mountPath: /var/lib/pgsql/data
name: postgresql-data-external
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
serviceAccountName: postgresql-db-external
terminationGracePeriodSeconds: 30
volumes:
- name: postgresql-data-external
persistentVolumeClaim:
claimName: postgresql-data-external
以下の更新を検討してください。
- カスタム値を使用していた場合、またはカスタム値が必要な場合のための、ラベル、アノテーション、および環境変数
- カスタム値を使用していた場合、またはカスタム値が必要な場合のための、制限とリクエスト
- その他の値は要件に応じて変更可能
PostgreSQL デプロイメント用のサービスアカウントを作成し、ラベルを付けます。
oc create serviceaccount postgresql-db-external
oc label serviceaccount postgresql-db-external app=system-postgresql-external
新しいデータベースの永続ボリューム要求の仕様を定義した postgresql-data-external-pvc.yaml という YAML ファイルをローカルに作成します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgresql-data-external
labels:
app: system-postgresql-external
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
volumeMode: Filesystem
必要に応じてストレージ要求を調整します。
新しいデータベースの Service の仕様を定義した system-postgresql-service.yaml という YAML ファイルをローカルに作成します。
apiVersion: v1
kind: Service
metadata:
name: system-postgresql-service
labels:
app: system-postgresql-external
spec:
type: ClusterIP
ports:
- port: 5432
targetPort: 5432
protocol: TCP
selector:
deployment: system-postgresql-external