개발환경
- Parallels Desktop
- Rocky Linux(RedHat 계열) 9.2
- containerd 1.6.21
- kubernetes 1.27
- 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 선택
- Project url : https://github.com//kubernetes-anotherclass-sprint2/
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
'FrameWorks > Kubernetes' 카테고리의 다른 글
[Kubernetes] Helm과 Kustomize 비교하며 사용하기 (0) | 2025.03.14 |
---|---|
[Kubernetes] Jenkins Pipeline - 기초부터 Blue, Green 까지 (0) | 2025.03.12 |
[Kubernetes] Component 동작으로 이해하기 (0) | 2025.03.11 |
[Kubernetes] Application 이해하기 - PVC, PV, Deployment, Service, HPA (0) | 2025.03.11 |
[Kubernetes] Application 기능 이해하기 - Configmap, Secret (0) | 2025.03.10 |
댓글