2 분 소요


오라클 쿠버네티스 배포 환경 구성하기-1


오늘은 지난 글에 이어서 생성한 쿠버네티스 클러스터에 개발 내용을 자동으로 배포할 수 있도록 Jenkins라는 도구를 통해 CI/CD 구성을 해보겠습니다.

오라클 쿠버네티스 클러스터가 만들어져 있는 상태여야 하므로 이전 글과 함께 봐주시면 감사하겠습니다.

  • 오라클 클라우드에 무료 관리형 쿠버네티스 서버 구성하기: 링크


CI/CD 전용 VM 생성


Jenkins를 설치하여 소스코드에 변경사항이 발생했을때 docker 이미지를 빌드하고 OKE에 반영하는 등 일련의 작업을 수행할 CI/CD 전용 VM을 새로 생성합니다.

  • 아래 글과 같이 CI/CD에 사용할 Subnet을 하나 더 구성합니다.
    • 오라클 클라우드로 무료 인프라 네트워크 구성하기: 링크
  • 이후 아래 글에서 Bastion 서버를 만든 것처럼 Always Free shape으로 Compute Instance를 1개 더 생성합니다.
    • 오라클 클라우드에 무료 bastion 서버 구성하기: 링크
  • swap memory 설정, OCI CLI, docker, kubectl 설치 등을 아래 글과 같이 수행합니다.
    • 오라클 쿠버네티스 접속 환경 설정하기: 링크

위 과정을 모두 수행하면 되지만 이미 Bastion 서버를 구성할때 상당부분을 완료하였기에 아래와 같은 순서로 작업을 진행해보겠습니다.

  1. CI/CD 전용 Subnet 생성
  2. Bastion 서버 종료 및 Custom Image 생성
  3. Custom Image를 복제하여 CI/CD VM 생성
  4. CI/CD VM에 Jenkins 설치


CI/CD 전용 Subnet 생성


Route Table 생성


create_routetable

먼저 생성해뒀던 VCN의 상세 페이지에가서 Routing 탭으로 이동한 뒤, Create Route Table 버튼을 클릭하여 서브넷을 생성합니다.

create_routetable2

CI/CD VM은 private 한 서브넷에 두지만 인터넷에 대한 접속은 필요하므로 Egress Rule에 0.0.0.0/0 으로 NAT Gateway를 사용하는 Rule을 추가하고, OCI의 Container Registry에 접근할 수 있도록 Service Gateway도 추가해줍니다.

create_routetable3

최종적으로 위와 같이 route table이 생성됩니다.


Security List 생성


create_securitylist

이제 VCN 상세페이지의 Security List 탭에 가서 Security List를 생성해줍니다.

create_securitylist2

Bastion에서 접속할 수 있도록 Ingress Rule을 설정해주고, Internet Access가 가능하도록 Egress Rule도 설정해줍니다.


Subnet 생성


create_subnet

마지막으로 VCN의 상세 페이지에가서 Subnet 탭으로 이동한 뒤, Create Subnet 버튼을 클릭하여 서브넷을 생성합니다.

create_subnet2

Subnet의 이름과 사용가능한 IP 대역을 선택하고, 아까 생성한 Route table, Security List가 적용되도록 선택하여 Private Subnet을 생성합니다.


CI/CD 전용 VM 생성


Bastion VM 활용 Custom Image 생성


stop_vm

이제 Bastion VM의 상세 페이지로 이동하여 실행중인 VM을 잠시 정지해줍니다.

create_custom_image

create_custom_image2

VM이 완전히 정지가 된 이후에는 create_custom_image를 선택하여 이미지를 만들어줍니다.

조금의 시간이 지나면 Custom Image의 생성이 완료되고, 신규 VM을 만들면 됩니다.


CI/CD VM 생성


select_custom_image

이제 아래의 글과 같이 무료 compute 인스턴스를 1개 추가로 생성해줍니다.

아래의 글을 참고하여 Bastion을 만들때와 유사하게 VCN, Subnet, Shape 등을 선택하고, ssh-key도 잊지 않고 추가하여 생성해주되, Image는 아까 만든 Custom Image를 선택하여 생성해줍니다.

  • 오라클 클라우드에 무료 bastion 서버 구성하기: 링크


CI/CD VM 접속


이제 잘 생성되었는지 접속하기 위하여 중지해두었던 bastion은 다시 start 해주고, vscode의 remote 설정에 아래와 같이 접속을 위한 config를 작성해줍니다.


Custom Image 삭제


delete_custom_image

혹시 모를 과금을 방지하기 위해 생성한 custom image는 삭제해줍니다.


Jenkins 설치


run_jenkins

이제 Jenkins 설치를 위해 CI/CD VM에서 아래의 명령어를 입력하여 open jdk 17 버전을 설치해줍니다.

sudo apt update
sudo apt install openjdk-21-jdk -y
mkdir jenkins
cd jenkins
wget https://updates.jenkins.io/latest/jenkins.war
JENKINS_HOME=jenkins 
nohup java -jar jenkins.war --httpPort=8080 &

이후 노트북 단말에서 bastion을 통해서 안전하게 ci/cd 머신에 접근할 수 있도록 아래의 명령어를 통해 8080포트의 터널링을 설정합니다.

cicd_vm은 ~/.ssh/config 경로에 미리 지정한 ssh 접속 관련 설정 파일에 명시되어 있어 그대로 사용하였습니다.

Host cicd_vm
  HostName 10.0.x.x
  User ubuntu
  IdentityFile /Users/jyhong/.ssh/prd_oci
  ProxyJump bastion

set_tunnel

ssh -L 8080:localhost:8080 cicd_vm

터널링 연결이 완료된 이후에는 브라우저에서 https://localhost:8080 을 입력하여 jenkins에 접속하고, 최초 접속시에는 jenkins 구동시에 admin password를 입력하여 설치를 마무리합니다.

jenkins_admin

jenkins_install

Install Suggested Packages 클릭 후 조금 기다리면 아래 이미지와 같이 설치를 진행합니다.

jenkins_install2

설치가 끝난 이후에는 아래와 같이 ADMIN 계정 세팅을 진행합니다.

jenkins_install3

jenkins_install4

마지막으로 아래와 같이 Jenkins 구성이 끝나고 메인 화면을 볼 수 있습니다.

jenkins_main

다음으로는 지난번 원격 리파지토리에 올려두었던 소스를 OKE에 배포해보고, 배포 파이프라인은 Jenkins에 구성해서, commit 하는 순간 OKE에 배포될 수 있도록 추가 설정을 진행하겠습니다.