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 파일류를 복사하고 있습니다.
DockerfileFROM 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.yamlapiVersion: 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 대응에 기대하고 싶습니다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(OpenShift on IBM Cloud에서 DB2를 StatefulSet으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/bata12/items/a1352ab538b703311de2
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
검증을 위해 Worker Node와 Pod는 최소한의 단일 구성입니다.

3. 절차
 3-1.Db2 컨테이너 준비
Db2 컨테이너는 아래의 Docker Hub 버전 11.5 버전을 사용합니다.
 htps : // 후 b. 도 c r. 코 m/r/이 bm 코 m/db2
기존 DB에서 뽑아 온 DDL을 흘리고 싶기 때문에 컨테이너 내에 DDL 파일류를 복사하고 있습니다.
DockerfileFROM 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.yamlapiVersion: 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 대응에 기대하고 싶습니다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(OpenShift on IBM Cloud에서 DB2를 StatefulSet으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/bata12/items/a1352ab538b703311de2
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
FROM ibmcom/db2
RUN mkdir /work
COPY DDL/ /work/DDL/
ibmcloud cr build -t jp.icr.io/<namespace>/db2:v1.0 .
ibmcloud oc cluster pull-secret apply --cluster <cluster_name>
oc create serviceaccount <sa_name>
oc adm policy add-scc-to-user privileged -n <project_name> -z <sa_name>
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を指定
oc apply -f db2_statefulset.yaml
# pv/pvcの確認
oc get pv
oc get pvc
# project内のリソース(pod/service/statefulset)の確認
oc get all
# コンテナログイン
oc exec -it db2-0 /bin/bash
IBM Cloud의 OpenShift 클러스터에서 StatefulSet의 Db2 컨테이너를 단일 구성으로 구축해 볼 수 있었습니다. 가용성과 운영을 고려한 구성은 Db2의 Operator 대응에 기대하고 싶습니다.
Reference
이 문제에 관하여(OpenShift on IBM Cloud에서 DB2를 StatefulSet으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bata12/items/a1352ab538b703311de2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)