LoginSignup
5
2

More than 3 years have passed since last update.

OpenShift on IBM CloudにDb2をStatefulSetで立ててみる

Posted at

1.概要

OpenShift on IBM Cloud上に、StatefulSetでDb2コンテナを立ててみた際の手順です。
事前準備として、下記からOpenShiftクラスタを作成します。
https://cloud.ibm.com/kubernetes/catalog/openshiftcluster

2.構成

検証用のため、Worker NodeもPodも最小限のシングル構成としています。
構成.png

3.手順

3-1.Db2コンテナの準備

Db2のコンテナは、下記Docker Hubのバージョン11.5版を利用します。
https://hub.docker.com/r/ibmcom/db2

既存DBから抜いてきたDDLを流したいため、コンテナ内にDDLファイル類をコピーしています。

Dockerfile
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>

参照:https://cloud.ibm.com/docs/openshift?topic=openshift-kubernetes-service-cli&locale=ja#cs_cluster_pull_secret_apply

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>

参照:https://cloud.ibm.com/docs/openshift?topic=openshift-openshift_apps&locale=ja#openshift_move_apps_example_scc

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

db2_statefulset.yaml
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対応に期待したいと思います。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2