OpenShift on IBM Cloud에서 DB2를 StatefulSet으로 설정

1. 개요



OpenShift on IBM Cloud에서 StatefulSet을 사용하여 Db2 컨테이너를 만들 때의 단계입니다.
사전 준비를 위해 아래에서 OpenShift 클러스터를 만듭니다.
htps : // c ぉ d. 이 bm. 코 m / 쿠베 r 네 s / 가타 ぉ g / 오펜시 ftc ぅ s r

2. 구성



검증을 위해 Worker Node와 Pod는 최소한의 단일 구성입니다.


3. 절차



3-1.Db2 컨테이너 준비



Db2 컨테이너는 아래의 Docker Hub 버전 11.5 버전을 사용합니다.
htps : // 후 b. 도 c r. 코 m/r/이 bm 코 m/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에서 이미지를 풀링할 수 있도록 보안을 준비합니다.
ibmcloud oc cluster pull-secret apply --cluster <cluster_name>

참조 : h tps : // c ぉ d. 이 bm. 코 m/도 cs/오페시 ft? 토피 c = 오펜시 ft 쿠 베 r 네 s r r

3-3.Service Account 만들기



3−1 링크처의 Db2 Docker는 특권 모드로 기동하고 있습니다만, OpenShift에서는 디폴트로 SCC(Security Context Constraints)가 restricted로 설정되어 있기 때문에, 그대로는 기동할 수 없습니다. 여기서는 Db2의 StatefulSet에 대한 서비스 계정을 만들고 권한 모드를 허용하도록 SCC를 구성합니다.
또한 사전에 OpenShift 클러스터에 CLI로 로그인하여 프로젝트를 만들었습니다.
oc create serviceaccount <sa_name>
oc adm policy add-scc-to-user privileged -n <project_name> -z <sa_name>

참조 : htps : // c ぉ d. 이 bm. 코 m/도 cs/오페시 ft? 토피 c = 오펜시 ft 오페 시 ft_ 아 ps & ぉ 카 ぇ = 그럼 # 오 페 시 ft_

3-4.StatefulSet의 yaml 작성



StatefulSet의 yaml을 준비합니다.
PV(Persistent Volume)가 필요하지만 여기에서는 IBM Cloud의 BlockStorage를 StatefulSet 배포 시 동적 프로비저닝합니다.

※사전에 PVC/PVC를 작성하는 경우, StatefulSet에서는 PVC의 이름에 명명 규칙이 있으므로 주의가 필요합니다. <volume_name>-<statefulset_name>-<replica_number>참조 : htps : // c ぉ d. 이 bm. 코 m/도 cs/오페시 ft? 토피 c = 오펜시 ftb ぉ ck_s 가시 # b ぉ ck_s 들 c_s

※Storage Class의 선택사항은 아래를 참조. 여기에서는 검증을 위해, 2IOPS의 bronze의, 또한 pvc의 삭제시에도 데이터를 보관 유지하는 retain의 Storage Class를 선택하고 있습니다.
참조 : h tps : // c ぉ d. 이 bm. 코 m/도 cs/오페시 ft? 토피 c = 오페시 ftb ぉ ck_s 토레 케

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を指定

참조 : h tps : // c ぉ d. 이 bm. 코 m/도 cs/오페시 ft? 토피 c = 오펜시 ftb ぉ ck_s 가시 # b ぉ ck_s 갓

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 대응에 기대하고 싶습니다.

좋은 웹페이지 즐겨찾기