(10) 손쉽게 데브옵스 환경을 구축하는 방법

2025. 6. 10. 13:35·🌱 인프런/⚓ 쿠버네티스 어나더 클래스 (지상편)

⚓ 쿠버네티스 어나더 클래스 (지상편) - Spring 1, 2 을 듣고 작성하는 복습 블로그 입니다.

 

 

(1) 실습 환경

 

  • VirtualBox랑 Vergant 를 이용해 게스트 OS 가 만들어지고, 스크립트로 모든 프로그램 설치
  • 내 PC 브라우저에서 Jenkins 대시보드에 접속 가능
  • 빌드를 실행하면 GitHub 에서 소스를 다운받아서 빌드 실행
  • 컨테이너 빌드를 하면 소스 빌드를 해서 만들어진 jar 파일이 사용
  • 컨테이너 이미지가 만들어지고, 도커 허브로 업로드

 

 

1. 설치

더보기
  1. 베이그란트 설치 스크립트를 실행하면 CI/CD 서버가 한 번에 구성
  2. 자원 할당 CPU : 2Core, Memory: 2GI, Disk : 30GI
  3. 네트워크 설정
    • IP 는 20번
    • Host-Only Network 는 VM간에 통신을 하거나 내 호스트 PC 에서 VM에 접속하기 위한 네트워크라서 IP 가 같으면 안된다
    • 이 네트워크는 외부에 접속이 안되기 때문에 NAT 를 추가
  4. 리눅스 기본 설정
    • Firewall Off (방화벽)
    • Disk 확장
    • Asia/Seoul (타임존)
    • Package Update
  5. kubectl 설치
    • 젠킨스에서 배포할 때 쓸 용도
    • NAT 를 설정해놨기 때문에 외부 저장소에서 kubectl 패키지를 다운받아서 설치 가능
  6. docker 설치
    • Jenkins 에서 컨테이너 빌드
    • 도커 허브로 이미지를 올린다
  7. OpenJDK 설치 (1.17)
    • 소스코드 빌드용
  8. Gradle 설치
  9. GitHub 설치
  10. Jenkins 설치
    • Jenkins 가 OpenJDK 1.11 버전으로 돌아가기 때문에 1.11 버전으로 설치

2.  접속

  • 원격 접속 툴로 접속 (MobaXterm)

3. 초기 세팅

  • 최초로 젠킨스 대시보드에 접속한 경우 초기 세팅
  • 사용자 생성
  • 권장 플러그인 설치

4. 전역 설정

  • 직접 설치한 버전의 Gradle 이랑 OpenJDK 를 Jenkins에서 빌드를 할 때 사용하겠다고 등록

5. DockerHub 가입

6. 사용 설정

  • 도커 허브 로그인
  • 젠킨스에서 Docker 사용 권한 부여

7. 인증서 복사

  • 인프라 환경에 있는 인증서를 CICD 환경에 복사
  • 이 과정을 해야 Jenkins 에서 kubectl 로 배포할 때 Kubernetes 에 api 를 날릴 수 있다

8. 가입 및 설정

  • GitHb 에 가입하고 설정
  • Dockerfile.yaml 파일 Fork 하기
  • Deployment > image 값 수정

9. 빌드/배포 설정 및 실행

  • Jenkins 에서 빌드 배포를 하기 위한 프로젝트 설정

(2) CI/CD 서버 환경 구성

1. 설치

 

1-1. VM 초기 세팅

  • Start : Virtualize
  • Operating System : Linux
  • Linux : Boot ISO Image [Browse..] -> Rocky ISO 파일 선택
  • Hardware : Memory : 2048 MB, CPU Cores : 2
  • Size : 32 GB
  • Shared Directory : 설정 안함
  • Summary : Name : cicd-server

1-2. 생성된 VM 실행 후 Rocky Linux 초기 세팅

  • 사용자 설정, 설치 목적지, 네트워크 및 호스트 이름 설정 완료

1-3. Rocky Linux 실행

 

1-4. CI/CD 서버 접속

1-5. CI/CD Server 설치

echo '======== [1-2] 타임존 설정 ========'
timedatectl set-timezone Asia/Seoul

echo '======== [1-3] 방화벽 해제 ========'
systemctl stop firewalld && systemctl disable firewalld

echo '======== [2] Kubectl 설치 ========'
echo '======== [2-1] 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

echo '======== [2-2] Kubectl 설치 ========'
yum install -y kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes

echo '======== [3] 도커 설치 ========'
# 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

echo '======== [4] OpenJDK 설치  ========'
yum install -y java-17-openjdk

echo '======== [5] Gradle 설치  ========'
# 7.6.1 버전의 Gradle 을 zip 파일로 다운받아서 입축을 푸는 명령
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

echo '======== [6] Git 설치  ========'
yum install -y git

echo '======== [7] 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.3-1.1
# 젠킨스 실행
systemctl enable jenkins
systemctl start jenkins

 

 

3. Jenkins 초기 세팅

3-1. CI/CD 서버에서 초기 비밀번호 확인

cat /var/lib/jenkins/secrets/initialAdminPassword

 

3-2. Jenkins 대시보드 접속해서 확인한 비밀번호 입력

 

3-3. 플러그인 설치

 

3-4. admin 사용자 생성

admin, admin 으로 생성

 

3-5. Save and Finish > Start using Jenkins

 

4. 전역 설정 (JDK, Gradle)

4-1. Dashboard > Jenkins 관리 > Tools

 

4-2. JDK 세팅

  • /bin/java 제외하고 입력하기
  • 밑에 뜨는 오류는 무시해도 된다

 

4-3. Gradle 세팅

 

5. Docker Hub 가입

 

6. Docker 사용 설정

  1. Jenkins 가 Docker 를 사용할 수 있도록 권한 부여
  2. Jenkins 로 사용자 변경
  3. Dockerhub 로 로그인

→ 로그인 정보가 /root/.docker/config.json 에 저장됨

→ 중요한 정보가 디스크에 저장되어 있으면 보안적으로 문제가 생길 수도 있어 급하게 CI/CD 서버를 구성해놔야 할 때만 사용

→ Jenkins 에서 파이프라인 플러그인을 써서 해결

 

 

7. Master Node 에서 인증서 복사

  • Master Node 실행 후 단계 진행
  • root 계정이 아닌 jenkins 계정에서 진행할 것
# 폴더 생성
[jenkins@cicd-server ~]$ mkdir ~/.kube

# Master Node에서 인증서 가져오기
[jenkins@cicd-server ~]$ scp root@192.168.56.30:/root/.kube/config ~/.kube/

 

 

⇒ kubectl 이 정상 동작됨

 

8. GitHub 가입

  1. kubernetes-anotherclass-sprint2 repo Fork
  2. 2121/deploy/k8s/deployment.yaml username 변경하기

 

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

9-1. 소스 빌드 하기 - gradle

9-1-1. 프로젝트 생성

 

9-1-2. GitHub proejct 설정

  • App 소스를 가져오는 거니깐 강사님 깃허브 주소를 그대로 입력

 

9-1-3. 소스 코드 관리

 

9-1-4. Invoke Gradle script

 

  • gradle setting
  • clean build : build 전 디렉토리를 비우라는 명령
  • 저장 후 빌드

 

9-1-5 생성된 Jar 파일 확인

 

9-1-0. 트러블 슈팅

 

→ 강사님 github 로 해야하는데 내 github 로 해서 실패

→ 9-1-2, 9-1-3 을 강사님 github 로 하니깐 정상 동작

 

9-2 컨테이너 빌드하기 - docker

9-2-1. 프로젝트 생성

item name : 2121-container-build

 

9-2-2. GitHub Project 선택

 

9-2-3. 소스 코드 관리

 

 

Sparse Checkout paths

 

  • git repo 에서 모든 파일을 다운받는게 아니라 이 폴더에 있는 파일들만 다운로드 받겠다

9-2-4. Execute shell

 

  • jar 파일 복사 : 아까 만들어진 jar 파일을 도커파일이 있는 위치로 복사
  • 도커 빌드 : 도커 태그 생성(docker build -t), 내 도커 허브의 이미지를 업로드 (docker push)
  • 저장 후 빌드

9-2-5. Dockerfile 내용 확인

  • FROM openjdk:17 : 도커 허브에서 OpenJDK 17 기반의 컨테이너 이미지 다운
  • COPY ./app-0.0.1-SNAPSHOT.jar /user/src/myapp/app.jar : 다운 받은 이미지에 내 jar 파일을 컨테이너 안에 위치에 app.jar 로 바꿔서 복사
  • ENTRYPOINT : 실행 명령
  • EXPOSE 8080 : 컨테이너로 트래픽을 받기 위해 열어두는 컨테이너 포트
  • WORKDIR : 컨테이너 이미지로 들어갔을 때 홈 디렉토리 경로

 

 

dockerhub 에도 repo 가 생성됨

 

9-3. 배포하기 - kubectl

9-3-1. 프로젝트 생성 (기존 프로젝트 복사)

name : 2121-deploy

copy : 2121-container-build

 

9-3-2. Sparse Checkout paths

 

9-3-3. Execute shell

 

  • 다운받은 파일을 쿠버네티스에 배포하는 내용

 

9-3-4. Dashboard 확인

 

이미지 출처 URL : https://inf.run/k7mF

'🌱 인프런 > ⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글

(12) Jenkins Pipeline (기초부터 Blue/Green 까지)  (1) 2025.06.14
(11) 배포를 시작하기 전에 반드시 알아야 할 것들  (2) 2025.06.11
(9) 데브옵스 한방 정리  (8) 2025.06.09
[미션4] Application 기능으로 이해하기 - PVC/PV, Deployment, Service, HPA  (0) 2025.06.08
[미션3] Application 기능으로 이해하기 - Configmap, Secret > 응용과제  (0) 2025.06.08
'🌱 인프런/⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글
  • (12) Jenkins Pipeline (기초부터 Blue/Green 까지)
  • (11) 배포를 시작하기 전에 반드시 알아야 할 것들
  • (9) 데브옵스 한방 정리
  • [미션4] Application 기능으로 이해하기 - PVC/PV, Deployment, Service, HPA
말린
말린
  • 말린
    개발새발
    말린
  • 전체
    오늘
    어제
    • 분류 전체보기 (58)
      • 👩🏻‍💻 알고리즘 (17)
        • 백준 (17)
      • ✒️ 글또 10기 (6)
      • 🗃️ 데이터베이스 (5)
      • ☕️ 자바 (1)
      • 🌱 인프런 (28)
        • ⚓ 쿠버네티스 어나더 클래스 (지상편) (22)
        • ☕️ 김영한의 실전 자바 - 중급 1편 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
말린
(10) 손쉽게 데브옵스 환경을 구축하는 방법
상단으로

티스토리툴바