OpenShift on IBM CloudにDb2をStatefulSetで立ててみる
1.概要
OpenShift on IBM Cloud上に、StatefulSetでDb2コンテナを立ててみた際の手順です。
事前準備として、下記からOpenShiftクラスタを作成します。
https://cloud.ibm.com/kubernetes/catalog/openshiftcluster
2.構成
検証用のため、Worker NodeもPodも最小限のシングル構成としています。
3.手順
3-1.Db2コンテナの準備
Db2のコンテナは、下記Docker Hubのバージョン11.5版を利用します。
https://hub.docker.com/r/ibmcom/db2
既存DBから抜いてきたDDLを流したいため、コンテナ内にDDLファイル類をコピーしています。
FROM ibmcom/db2
RUN mkdir /work
COPY DDL/ /work/DDL/
IBM Cloud Container Registryにbuild&pushします。
CLIでIBM Cloudにログインし、DockerファイルとDDLを配置しているディレクトリで下記コマンドを実行します。
ibmcloud cr build -t jp.icr.io/<namespace>/db2:v1.0 .
3-2.imagePullSecretの作成
前手順で、イメージはクラスタ外部のIBM Cloud Container Registry(ICCR)に配置しているため、OpenShiftクラスタがICCRからimageをpullできるようにSecretを準備します。
ibmcloud oc cluster pull-secret apply --cluster <cluster_name>
3-3.Service Accountの作成
3−1リンク先のDb2 Dockerは特権モードで起動していますが、OpenShiftではデフォルトでSCC(Security Context Constraints)がrestrictedで設定されているため、そのままでは起動できません。ここでは、Db2のStatefulSet向けにService Accountを作成し、特権モードを許可するようにSCCを設定します。
なお、事前にOpenShiftクラスタ内にCLIでログインし、projectを作成しています。
oc create serviceaccount <sa_name>
oc adm policy add-scc-to-user privileged -n <project_name> -z <sa_name>
3-4.StatefulSetのyaml作成
StatefulSetのyamlを準備します。
PV(Persistent Volume)が必要となりますが、ここではIBM CloudのBlockStorageをStatefulSetのデプロイ時に動的プロビジョニングします。
※事前にPV/PVCを作成する場合、StatefulSetではPVCの名前に命名規則があるので注意が必要です。<volume_name>-<statefulset_name>-<replica_number>
参照:https://cloud.ibm.com/docs/openshift?topic=openshift-block_storage#block_static_statefulset
※Storage Classの選択肢は下記を参照。ここでは検証用のため、2IOPSのbronzeの、さらにpvcの削除時もデータを保持するretainのStorage Classを選択しています。
参照:https://cloud.ibm.com/docs/openshift?topic=openshift-block_storage#block_storageclass_reference
apiVersion: v1
kind: Service
metadata:
name: db2
labels:
app: db2
spec:
ports:
- port: 50000
selector:
app: db2
clusterIP: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: db2
spec:
selector:
matchLabels:
app: db2
serviceName: "db2"
replicas: 1
# podManagementPolicy: Parallel
template:
metadata:
labels:
app: db2
billingType: "monthly" # storageプロビジョニング用ラベル。"monthly" or "hourly"
region: "jp-tok" # storageプロビジョニング用ラベル。region指定
zone: "tok02" # storageプロビジョニング用ラベル。zone指定
spec:
serviceAccount: <sa_name> # SCC設定用ServiceAccount
containers:
- name: db2
securityContext:
privileged: true # 特権モード
image: jp.icr.io/<namespace>/db2:v1.0
env:
- name: LICENSE
value: accept
- name: DB2INSTANCE
value: db2inst1
- name: DB2INST1_PASSWORD
value: <password>
- name: DBNAME
value: <DB_name>
ports:
- containerPort: 50000
name: db2
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /database
name: db2vol
imagePullSecrets:
- name: <project_name>-jp-icr-io # 作成済みimagePullSecret名を指定
volumeClaimTemplates:
- metadata:
name: db2vol # コンテナ内VolumeMountsのnameと揃える
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi # PVのサイズを指定
storageClassName: ibmc-block-retain-bronze # Storage Classを指定
参照:https://cloud.ibm.com/docs/openshift?topic=openshift-block_storage#block_statefulset
3-5.StatefulSetのデプロイ
StatefulSetをOpenShiftクラスタにデプロイします。
oc apply -f db2_statefulset.yaml
3-6.稼働確認
デプロイ+PVの動的プロビジョニングが完了したら、Db2コンテナにログインしDDLを流します。
# pv/pvcの確認
oc get pv
oc get pvc
# project内のリソース(pod/service/statefulset)の確認
oc get all
# コンテナログイン
oc exec -it db2-0 /bin/bash
4.まとめ
IBM CloudのOpenShiftクラスタにStatefulSetのDb2コンテナをシングル構成で立ててみるところまでできました。可用性や運用を考慮した構成は、Db2のOperator対応に期待したいと思います。
Author And Source
この問題について(OpenShift on IBM CloudにDb2をStatefulSetで立ててみる), 我々は、より多くの情報をここで見つけました https://qiita.com/bata12/items/a1352ab538b703311de2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .