본문 바로가기

Cloud/Oracle Cloud Infrastructure (OCI)

OCI Kubernetes와 MySQL 서비스를 활용한 어플리케이션 배포 데모 - #5. 도커 이미지 OCIR에 등록, OKE 클러스터에 컨테이너 배포

글 순서

#1. OKE 클러스터 설치

#2. MySQL 서비스 배포

#3. 쿠버네티스 접속 환경 구성

#4. OCI 레지스트리 설정, 도커 이미지 빌드

#5. 도커 이미지 OCIR에 등록, OKE 클러스터에 컨테이너 배포

 

도커 이미지 OCIR에 등록

docker tag 명령으로 생성된 로컬 이미지 python-mysql-sample에 태그를 부여합니다.

[opc@bastion python-mysql-sample]$ docker tag python-mysql-sample iad.ocir.io/idzaf7d76gjx/demo-python-mysql-sample-data:1.0
[opc@bastion python-mysql-sample]$ docker images
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
iad.ocir.io/idzaf7d76gjx/demo-python-mysql-sample-data   1.0                 077655efba8c        4 minutes ago       913MB
python-mysql-sample                                      latest              077655efba8c        4 minutes ago       913MB
python                                                   3.6                 54260638d07c        5 months ago        902MB

OCI 레지스트리에 로컬 이미지를 업로드합니다.

[opc@bastion python-mysql-sample]$ docker push iad.ocir.io/idzaf7d76gjx/demo-python-mysql-sample-data:1.0
The push refers to repository [iad.ocir.io/idzaf7d76gjx/demo-python-mysql-sample-data]
c6d6762bf6b8: Pushed
a80303fe4eb2: Pushed
2451f86ac45a: Pushed
aa4c808c19f6: Pushed
8ba9f690e8ba: Pushed
3e607d59ef9f: Pushed
1e18e7e1fcc2: Pushed
c3a0d593ed24: Pushed
26a504e63be4: Pushed
8bf42db0de72: Pushed
31892cc314cb: Pushed
11936051f93b: Pushed
1.0: digest: sha256:da3a218226ae33fb145a703ff019538234f91e76e1571e91a2942f4d15816e0a size: 2845

이미지 업로드가 성공하면 OCI 웹 콘솔에서도 확인할 수 있습니다.

 

OKE 클러스터에 컨테이너 배포

이제 OKE 레지스트리에 업로드된 도커 이미지를 OKE 클러스터에 배포할 차례입니다. 클러스터에 배포는 yaml 형식의 매니페스트 파일의 정의된 내용을 기반으로 수행됩니다. 아래와 같이 배포 이름, 파드 수, 이미지 위치, 사용할 포트, 사용할 시크릿 파일, 서비스 노출 방식 등을 기술하고 있습니다.

[opc@bastion python-mysql-sample]$ cat python-mysql-sample.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: python-mysql-sample-deployment
spec:
  selector:
    matchLabels:
      app: python-mysql-sample
  replicas: 3
  template:
    metadata:
      labels:
        app: python-mysql-sample
    spec:
      containers:
      - name: python-mysql-sample
        image: iad.ocir.io/idzaf7d76gjx/demo-python-mysql-sample-data:1.0
        ports:
        - containerPort: 5000
      imagePullSecrets:
      - name: ocirsecret
---
apiVersion: v1
kind: Service
metadata:
  name: python-mysql-sample-service
spec:
  type: LoadBalancer
  ports:
  - port: 5001
    protocol: TCP
    targetPort: 5000
  selector:
    app: python-mysql-sample

 

yaml 파일을 가지고 클러스터에 배포합니다.

[opc@bastion python-mysql-sample]$ kubectl create -f ./python-mysql-sample.yaml
deployment.apps/python-mysql-sample-deployment created
service/python-mysql-sample-service created

 

배포가 완료되면, 디플로이먼트, 파드, 서비스를 확인할 수 있습니다. 서비스 노출을 로드밸런서를 통해 할 것으로 설정했기 때문에 서비스에서 퍼블릭 IP가 할당된 로드 밸런서 타입의 서비스가 생성된 것을 알 수 있습니다.

[opc@bastion python-mysql-sample]$ kubectl get deploy,po,svc
NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/python-mysql-sample-deployment   3/3     3            3           107s

NAME                                                  READY   STATUS    RESTARTS   AGE
pod/python-mysql-sample-deployment-78f66b498c-n2kfb   1/1     Running   0          107s
pod/python-mysql-sample-deployment-78f66b498c-n7sl7   1/1     Running   0          107s
pod/python-mysql-sample-deployment-78f66b498c-zj49d   1/1     Running   0          107s

NAME                                  TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
service/kubernetes                    ClusterIP      10.96.0.1      <none>          443/TCP          28h
service/python-mysql-sample-service   LoadBalancer   10.96.185.13   129.80.228.63   5001:32473/TCP   107s

 

OCI 웹 콘솔에서 확인해 보면 로드 밸런서가 신규로 생성된 것을 알 수 있습니다.

 

이제 로드밸런서의 퍼블릭 IP로 yaml 파일에서 지정한 서비스 포트 5001로 웹 브라우저를 통해 접속해 보면 아래와 같이 어플리케이션이 정상적으로 데이터베이스 정보를 가져오는 것을 알 수 있습니다.

 

<END>