오라클 쿠버네티스 CI,CD 배포환경 구성하기-1
오라클 쿠버네티스 배포 환경 구성하기-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 서버를 구성할때 상당부분을 완료하였기에 아래와 같은 순서로 작업을 진행해보겠습니다.
- CI/CD 전용 Subnet 생성
- Bastion 서버 종료 및 Custom Image 생성
- Custom Image를 복제하여 CI/CD VM 생성
- CI/CD VM에 Jenkins 설치
CI/CD 전용 Subnet 생성
Route Table 생성

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

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

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

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

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

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

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

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


VM이 완전히 정지가 된 이후에는 create_custom_image를 선택하여 이미지를 만들어줍니다.
조금의 시간이 지나면 Custom Image의 생성이 완료되고, 신규 VM을 만들면 됩니다.
CI/CD VM 생성

이제 아래의 글과 같이 무료 compute 인스턴스를 1개 추가로 생성해줍니다.
아래의 글을 참고하여 Bastion을 만들때와 유사하게 VCN, Subnet, Shape 등을 선택하고, ssh-key도 잊지 않고 추가하여 생성해주되, Image는 아까 만든 Custom Image를 선택하여 생성해줍니다.
- 오라클 클라우드에 무료 bastion 서버 구성하기: 링크
CI/CD VM 접속
이제 잘 생성되었는지 접속하기 위하여 중지해두었던 bastion은 다시 start 해주고, vscode의 remote 설정에 아래와 같이 접속을 위한 config를 작성해줍니다.
Custom Image 삭제

혹시 모를 과금을 방지하기 위해 생성한 custom image는 삭제해줍니다.
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

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


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

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


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

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