04. 클러스터에 오라클 데이터베이스 생성

2024. 8. 5. 10:47·DevOps/쿠버네티스

웹 서비스를 배포하게 되면, 필수로 사용하게되는 것이 데이터 베이스이다.

여러 데이터 베이스들이 있지만, 회사에서 주로 사용했던 데이터베이스가 오라클이기도 하고

고성능 트랜잭션 처리를 지원해서 비용이 높다고는 하지만

서버성능에도 딱히 문제가 없을 것같아 오라클 데이터베이스를 설치해보고자 한다.

 

1. 오라클 데이터베이스 도커 이미지 생성

일반적인 도커 허브에서 오라클 데이터베이스 이미지가 존재하긴 하지만, 대체로 11 버전이다.

아무래도 11 버전은 출시한지 거의 17년이 넘었기도 하고 최신 버전을 지원하는데 굳이 옛날 버전을 사용할 이유가 없을 것 같아서 21버전을 설치해보려고 한다.

 

하지만, 도커 허브에서는 21 버전의 오라클 데이터베이스 이미지를 찾을 수 없었다.

 

그렇게 찾다보니 오라클 깃허브에서 도커이미지를 생성할 수 있도록 지원해주는 것을 찾을 수 있었다.

(https://github.com/oracle/docker-images/tree/main/OracleDatabase)

 

해당 깃 레퍼지토리에 들어가서 OracleDatabase>SingleInstance 에 들어가면 Readme 파일이 있는데 해당 Readme 파일을 읽어보면서 도커이미지를 생성해보도록 하자.

 

먼저, 해당 깃 레퍼지토리를 clone 한다.

git clone https://github.com/oracle/docker-images.git

 

그리고 dockerfiles 폴더까지 이동한다.

cd OracleDatabase/SingleInstance/dockerfiles

 

그리고 buildContainerImage 쉘 스크립트를 실행시켜 원하는 버전의 오라클 데이터베이스를 도커이미지로 생성한다.

./buildContainerImage.sh -v 21.3.0 -e

 

실행하면 아래와 같이 도커이미지 빌드를 하는 것을 확인할 수 있다.

빌드 중인 로그 화면

완료되면 아래와 같이 도커이미지가 생성된 것을 확인할 수 있다.

 

이제, 클러스터에서 도커이미지를 가져와 쓸수있도록 도커 허브에 올려보도록 하자.

먼저 도커 허브에 올리기위해 이미지의 태그를 변경해야 한다. 내 도커 허브 계정은 maewakka 이기 떄문에 아래와 같이 변경한다.

docker tag oracle/database:21.3.0-ee maewakka/oracle-database:21.3.0-ee

 

그 다음, 도커 허브에 이미지를 push 한다.

docker push maewakka/oracle-database:21.3.0-ee

 

2. 쿠버네티스 설정 파일 생성

namespace 생성

먼저, database라는 네임스페이스를 생성한다.

kubectl create namespace database

pvc 생성

그다음, 볼륨을 위한 pvc를 생성한다. (pvc.yaml)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: oracle-21-pvc
  namespace: database
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client
  resources:
    requests:
      storage: 100Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: oracle-21-pvc-dbs
  namespace: database
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client
  resources:
    requests:
      storage: 100Gi

 

2개의 pvc를 생성한 이유는, 테이블스페이스를 생성할 때 기본 경로가 /opt/oracle/oradata가 아닌 /opt/oracle/homes/OraDBHome21cXE/dbs 로 잡혀있어 재시작시 DB가 날아가는 현상을 발견하여 2개로 같이 잡아두었다.

/opt/oracle로 볼륨을 잡든, 아니면 테이블스페이스를 명확히 지정하든 여러 방법이 있지만 기존 설정을 건드리기 싫어서 나는 2개의 pvc를 생성하였다.

 

pvc를 자세히보면 이전애 helm으로 설치하였던 nfs-provisoner 에서 제공하는 nfs-client 스토리지 클래스를 지정하는 것만으로도 간단하게 pv 설정없이 pvc를 생성할 수 있는 것을 알 수 있다.

 

statefulset 생성

pvc를 생성했으면 이제 statefulset 파일을 생성한다. (statefulset.yaml)

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: oracle-21-xe
  namespace: database
spec:
  replicas: 1
  serviceName: oracle-21-xe
  selector:
    matchLabels:
      app: oracle-21-xe
  template:
    metadata:
      labels:
        app: oracle-21-xe
    spec:
      containers:
        - name: oracle-21-xe
          image: {Docker Hub에 올린 오라클 데이터베이스 이미지}
          ports:
            - containerPort: 1521
          volumeMounts:
            - name: oracle-21-xe
              mountPath: /opt/oracle/oradata
            - name: oracle-21-xe-dbs
              mountPath: /opt/oracle/homes/OraDBHome21cXE/dbs
          env:
            - name: ORACLE_SID
              value: {사용할 SID 이름}
            - name: ORACLE_PWD
              value: {사용할 PASSWORD}
      volumes:
        - name: oracle-21-xe
          persistentVolumeClaim:
            claimName: oracle-21-pvc
        - name: oracle-21-xe-dbs
          persistentVolumeClaim:
            claimName: oracle-21-pvc-dbs

 

image 에는 아까 도커 허브에 올렸던 데이터베이스 이미지를,

볼륨에는 아까 설정해두었던 pvc를 각각의 경로에 매핑 시켜주고,

env에 사용할 SID 와 PWD를 설정해준다.

service 생성

apiVersion: v1
kind: Service
metadata:
  name: oracle-21-xe
  namespace: database
spec:
  selector:
    app: oracle-21-xe
  ports:
    - protocol: TCP
      port: 1521
      targetPort: 1521
  type: NodePort

 

그 다음 해당 파드를 외부로 노출시킬 서비스를 생성한다.

type은 ClusterIP, NodePort, Loadbalancer 등이 있지만

Ingress 를 설정하기는 딱히 귀찮고, 로드밸런서도 없어서 간단하게 NodePort로 배포하였다.

클러스터에 등록

이제 생성한 파일들을 클러스터에 등록한다.

kubectl apply -f statefulset.yaml -f pvc.yaml -f service.yaml

 

아래와 같이 성공적으로 running 상태로 들어가면 잘 설정 한 것이다.

 

저작자표시 비영리 변경금지 (새창열림)

'DevOps > 쿠버네티스' 카테고리의 다른 글

03. 쿠버네티스 설정  (0) 2024.08.05
02. 쿠버네티스 클러스터 생성  (0) 2024.08.02
01. 쿠버네티스란 무엇인가?  (0) 2024.08.02
'DevOps/쿠버네티스' 카테고리의 다른 글
  • 03. 쿠버네티스 설정
  • 02. 쿠버네티스 클러스터 생성
  • 01. 쿠버네티스란 무엇인가?
뚝딱뚝딱2
뚝딱뚝딱2
  • 뚝딱뚝딱2
    개발도상국
    뚝딱뚝딱2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 공부
        • Java
        • Spring Boot
        • LORA
      • Web
        • 인스타 클론 코딩
        • GPT 응답 API 서버
        • Spring Boot 예외 처리
        • 코테 준비용 서비스 만들기
      • DevOps
        • 쿠버네티스
        • 서버 만들기
      • 코딩테스트
        • 알고리즘
      • 교육
        • 스파르타코딩클럽 - 내일배움단
        • 혼자 공부하는 컴퓨터 구조 운영체제
      • 잡다한것
  • 블로그 메뉴

    • 홈
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    오블완
    Java
    백준
    예외
    클론코딩
    OpenAI API
    쿠버네티스
    MSA
    클러스터
    티스토리챌린지
    스프링부트
    mapstruct
    REST API
    인스타그램
    리액트
    Entity
    스프링 부트
    chat GPT
    react
    spring boot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
뚝딱뚝딱2
04. 클러스터에 오라클 데이터베이스 생성
상단으로

티스토리툴바