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

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

1. 설치

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

- Jenkins 가 Docker 를 사용할 수 있도록 권한 부여
- Jenkins 로 사용자 변경
- 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 가입

- kubernetes-anotherclass-sprint2 repo Fork
- 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 |