FrameWorks/Kubernetes

[Kubernetes] CI/CD 환경 구축하기

ABCD 2025. 3. 11.

개발환경

  1. Parallels Desktop
  2. Rocky Linux(RedHat 계열) 9.2
  3. containerd 1.6.21
  4. kubernetes 1.27
  5. MacOS

Kubernetes설치하기

Rocky Linux의 기본 설정

각 설정에 대한 설명은 생략하도록 하겠습니다.
작성한 게시글 중 [[01. Kubernetes 설치하기]]를 참고해주세요.

 

반드시 IP는 고정아이피를 사용해주셔야합니다.
저는 마스터 노드의 IP가 192.168.45.30이기 때문에 192.168.45.20을 사용했습니다.

타임존 설정

timedatectl set-timezone Asia/Seoul

방화벽 해제

systemctl stop firewalld && systemctl disable firewalld

kubectl 설치하기

repo 설정

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

Kubectl 설치

yum install -y kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes

Docker 설치하기

# https://download.docker.com/linux/centos/8/x86_64/stable/Packages/ 저장소 경로
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-3:23.0.6-1.el9.aarch64 docker-ce-cli-1:23.0.6-1.el9.aarch64 containerd.io-1.6.21-3.1.el9.aarch64
systemctl daemon-reload
systemctl enable --now docker

OpenJDK 설치하기

yum install -y java-17-openjdk

Gradle 설치하기

yum -y install wget unzip
wget https://services.gradle.org/distributions/gradle-7.6.1-bin.zip -P ~/
unzip -d /opt/gradle ~/gradle-*.zip
cat <<EOF |tee /etc/profile.d/gradle.sh
export GRADLE_HOME=/opt/gradle/gradle-7.6.1
export PATH=/opt/gradle/gradle-7.6.1/bin:${PATH}
EOF
chmod +x /etc/profile.d/gradle.sh
source /etc/profile.d/gradle.sh

Git 설치하기

# 기존엔 git-2.43.0-1.el8 버전을 Fix하였으나 Repository에 최신 버전만 업로드 됨으로 수정
yum install -y git

Jenkins 설치하기

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install -y jenkins-2.440.2-1.1
systemctl enable jenkins
systemctl start jenkins

Jenkins 초기 셋팅하기

초기 비밀번호 확인

다음 명령어를 사용하면 Jenkins의 최초접속시 필요한 암호를 확인 할 수 있습니다.

cat /var/lib/jenkins/secrets/initialAdminPassword

초기 플러그인 설정

우선 제안하는 플러그인들은 많이 사용하는 플러그인들이고 우리도 사용해야하니 제안하는 플러그인들을 설치해 보도록 하겠습니다.

이미지

계정 설정

요구에 맞춰 아이디, 비밀번호, 이름, 이메일을 작성하고 생성해줍니다.

JDK설정

좌측 네비바에서 Jenkins관리로 들어가 Tools를 선택합니다.
목록중에 JDK installations라는 항목이 보이는데 여기서 JDK를 설정해 줍니다.
우리가 좀 있다가 사용 프로젝트는 jdk17버전이므로 다음과 같이 작성해줍니다.

 

JDK의 위치는 아래 명렁어로 확인할 수 있는데 검색해서 나온 path에서 '/bin/java'는 빼고 입력해야합니다.

find / -name java | grep java-17-openjdk

이미지

Gradle 설정하기

Tools에 들어가면 Gradle installations라는 항목이 보입니다. 여기에서 Gradle을 설정합니다.
우리가 설치한 버전은 7.6.1 이므로 아래와 같이 적어주도록 합니다.

 

GRADLE_HOME이 보이지 않는 분들은 아래에 install automatically부분의 체크를 해제해주면 나타나게 됩니다.

이미지

Docker Hub 설정하기

Docker Hub는 Docker에 가입이 되어 있어야 사용이 가능합니다.
반드시 가입을 하시고 username부분이 중요한데, 앞으로 이미지를 push하거나 pull할때 prefix로 붙여야하기 때문에 잘 기억해 둡시다.

권한 부여하기

# jeknins가 Docker를 사용할 수 있도록 권한 부여
[root@cicd-server ~]# chmod 666 /var/run/docker.sock
# jenkins계정을 docker 그룹에 추가하기
[root@cicd-server ~]# usermod -aG docker jenkins

Docker 로그인하기

아래 내용을 입력후 Succeeded가 나왔다면 로그인에 성공한겁니다.

# Jeknins로 사용자 변경 
[root@cicd-server ~]# su - jenkins -s /bin/bash

# 자신의 Dockerhub로 로그인 하기
[jenkins@cicd-server ~]$ docker login
Username:
Password: 

이미지

Master Node의 인증서를 CI/CD Server에 복사하기

이 작업을 하는 이유는 CI/CD Server에서 kubectl 명령어를 사용할 수 있게 하기 위함입니다.
그래야 apply 등을 사용해서 배포를 컨트롤 할 수 있기 때문입니다.

폴더생성

mkdir .kube

인증서 가져오기

scp root@192.168.45.30:/root/.kube/config ~/.kube/

동작확인

아래 커멘드를 입력 후 Master Node와 같이 결과가 나온다면 정상작동 하는 겁니다.

kubectl get pods -A

GitHub 설정하기

다들 GitHub하나 쯤은 가지고 있으실 테니 계정 생성은 생략하겠습니다.

 

또한, 저는 제 Repository가 쓸데없이 많이 생성되는게 싫어서 일프로님 강의를 그대로 따라하지 않고 진행했기 때문에 이 설정은 일프로님 강의에 자료를 가져와서 보여드리겠습니다.

빌드/배포 소스 복사해오기

쿠버네티스 어나더클래스 GitHub Repository 접속 및 Fork 클릭

Fork 생성

Deployment Yaml 파일 수정하기

폴더 클릭

deployment.yaml 파일 수정

image의 값을 자신의 DockerHub Username 으로 수정하기

아까 Docker Hub를 가입할 때, 주의하라고 했던 Username 부분입니다.

빌드/배포 파이프라인을 위한 스크립트 작성 및 실행

소스 빌드(Build) 하기 - gradle

프로젝트 생성

  • item name : 2121-source-build

Dashboard > 2121-source-build > Configuration > General > GitHub project 선택

소스 코드 관리

Repository URL : https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester.git Branch Specifier : */main

Build Steps > Invoke Gradle script

  • Gradle Version : gradle-7.6.1 Tasks : clean build

모두 입력했으면 저장버튼을 눌러주세요.

Dashboard > 2121-source-build> 지금 빌드 및 로그확인

생성된 Jar 파일 확인

ll /var/lib/jenkins/workspace/2121-source-build/build/libs -rw-r--r--. 1 jenkins jenkins 19025350 Oct 19 11:19 app-0.0.1-SNAPSHOT.jar -rw-r--r--. 1 jenkins jenkins 16646 Oct 19 11:19 app-0.0.1-SNAPSHOT-plain.jar

컨테이너 빌드 하기 - docker

프로젝트 생성

  • item name : 2121-container-build

Dashboard > 2121-container-build > Configuration > General > GitHub project 선택

k8s-1pro를 입력하지 마시고 자신의 GitHub Username 입력해 주세요.

소스 코드 관리

  • Repository URL : https://github.com//kubernetes-anotherclass-sprint2.git Branch Specifier : */main

소스 코드 관리 > Additional Behavioures > Sparse Checkout paths

  • Path : 2121/build/docker

Build Steps > Execute shell

1pro를 입력하지 마시고 자신의 DockerHub Username 입력해 주세요.

입력이 완료됐으면 저장하기를 눌러주세요.

# jar 파일 복사
cp /var/lib/jenkins/workspace/2121-source-build/build/libs/app-0.0.1-SNAPSHOT.jar ./2121/build/docker/app-0.0.1-SNAPSHOT.jar
# 도커 빌드
docker build -t <Your_DockerHub_Username>/api-tester:v1.0.0 ./2121/build/docker
docker push <Your_DockerHub_Username>/api-tester:v1.0.0

Dashboard > 2121-container-build > 지금 빌드 및 로그 확인**

Dockerfile 내용 확인

cat /var/lib/jenkins/workspace/2121-container-build/2121/build/docker/Dockerfile

FROM

어떤 기반으로 이미지를 생성할지에 대한 명세

COPY

파일을 컨테이너 내부의 path로 복사하는 명세

ENTRYPOINT

컨테이너가 실행될때 반드시 실행되는 명령을 정의
아래의 경우에는 Spring이 동작시 어떤 옵션으로 동작할지가 명세되어 있는 상태

EXPOSE

컨테이너가 어떤 포트를 사용하는지 Docker에게 알려주는 명세

WORKDIR

컨테이너 내부의 작업 디렉토리를 명세
이 이후 실행되는 모든 명령어가 이 디렉토리를 기준으로 실행

FROM openjdk:17
COPY ./app-0.0.1-SNAPSHOT.jar /usr/src/myapp/app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=${spring_profiles_active}", "-Dapplication.role=${application_role}", "-Dpostgresql.filepath=${postgresql_filepath}", "-jar", "/usr/src/myapp/app.jar"]
EXPOSE 8080
WORKDIR /usr/src/myapp
728x90
반응형

댓글

💲 추천 글