Notice
Tags
- cloud_computing
- 자격증
- Personal_Study
- Kubernetes
- programmers
- C
- Algorithm
- Android
- Image_classification
- study
- Java
- 2023_1st_Semester
- Artificial_Intelligence
- Database_Design
- 리눅스마스터2급
- datastructure
- c++
- tensorflow
- 티스토리챌린지
- SingleProject
- kubeflow
- app
- Linux
- Baekjoon
- Univ._Study
- Operating_System
- Unix_System
- 오블완
- codingTest
- Python
코딩 기록 저장소
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ② 본문
※ 컴퓨터의 메모리 부족으로 인해 서버컴퓨터에서 학습을 진행하게 됨
목차
1. 젠킨스 설치 및 구성
01. 젠킨스 설치하기
- 리눅스 패키지를 최신 상태로 업데이트함
- 최신 상태로 업데이트하면 설치할 패키지(소프트웨어)를 최신 버전으로 가져올 수 있음
sudo apt update
- JDK를 설치함
- openjdk 17버전으로 설치함
sudo apt install -y openjdk-17-jre-headless
- 설치가 잘 된것을 확인할 수 있음
java -version
- 젠킨스를 설치하기 위해 필요한 패키지에 접근하기 위해 GPG 키를 추가함
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io-2023.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg
- 젠킨스 패키지 저장소 주소를 sources.list에 추가함
sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins.gpg] http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt update
- 젠킨스를 설치함
sudo apt install jenkins
- 젠킨스의 상태를 확인함
- Inactive 상태라면 sudo systemctl start jenkins.service 명령어로 젠킨스를 시작할 수 있음
- 상태값이 active 혹은 8080 포트가 활성화되었다면 실행이 성공적으로 이루어진것
systemctl status jenkins netstat -tnlp
02. 젠킨스 구성하기
젠킨스 실행 및 설정하기
- 젠킨스 설치를 완료했고 이제 젠킨스를 구성해야 함
- 브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)
- Hyper-V 관리자에서 master에 접속해 브라우저에서 localhost:8080에 접근
- Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:8080으로 접근 - administrator password 묻는 화면이 나오면 패스워드를 입력한 후 Continue를 클릭함
- 패스워드는 다음 명령어로 확인할 수 있음
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 기본 플러그인 설치를 진행함
- Administrator password를 입력하면 플러그인 설치와 관련된 옵션들이 나타남
- Install suggested plugins를 클릭해 설치 진행 - 설치 진행
- 사용자와 패스워드를 설정
- 접속할 수 있는 URL을 보여줌
- Save and Finish를 클릭함 - 젠킨스 사용 준비가 완료되었다는 화면을 보여줌
- Start using Jenkins를 클릭 - 젠킨스 접속 화면
젠킨스 사용하기
깃허브와 연동하기
- 젠킨스는 빌드를 자동화하는 툴이므로 소스 코드가 저장된 저장소와 연계해야 함
- 깃허브를 저장소로 사용함
- 깃허브에 연동하기 위해 먼저 깃허브에 접속해 로그인함
- 젠킨스에서 깃허브에 접속할 수 있는 토큰을 생성해야 함
- 오른쪽 상단의 프로필 → Settings - 왼쪽 메뉴 하단의 Developer settings를 선택
- Personal access tokens에서 Tokens을 클릭 후 Generate new token(classic) 클릭함
- Note에 토큰 이름을 지정하고 Expiration 부분은 No expiration을 선택함
- scopes에서는 다음과 같은 항목을 선택한 후 Generate token을 클릭함
- scopes는 젠킨스에서 깃허브에 접속해 사용할 수 있는 권한에 관한 것, 리포지터리와 자동 빌드를 위한 권한만 체크 - 생성된 토큰을 저장해둠
- 젠킨스로 이동해 깃허브와 연결함
- 젠킨스 화면의 왼쪽 메뉴에서 Manage Jenkins를 클릭함 - System Configuration 에서 System을 클릭
- 화면을 하단으로 이동하면 GitHub라는 메뉴가 있음 Add GitHub Server > GitHub Server를 선택함
- 깃허브 접속을 위한 Credential 설정
- Name : access_github
- API URL : https://api.github.com
- Credentials : Add > Jenkins를 선택 - 깃허브에 연결하기 위한 권한을 설정할 수 있는 화면이 나타남. 다음과 같이 설정함
- Domain은 그대로 두고, Kind는 Secret text를 선택함
- Secret에서는 앞에서 저장했던 토큰을 입력하고, ID는 토큰 이름을 지정함
- 이후 Add를 클릭함 - 이후 Credentials 아래 리스트 박스를 클릭하면 생성했던 jenkins_token1이 보임. 이것을 선택함
- Test connection 버튼을 클릭해 정상적으로 연결되는 것을 확인한 후 Save 버튼을 클릭함
- 테스트 결과 'Credentials verified for user [user ID], rate limit: 4999'가 나타나면 연결에 성공한 것
프로젝트 생성하기
- 이제 젠킨스에서 소스 코드를 자동 빌드하는 프로젝트 생성함
- 젠킨스 메인 화면의 왼쪽 메뉴에서 New Item을 클릭함
- 다음 메뉴에서 item name을 입력한 후 Freestyle project를 선택하고 OK 버튼을 클릭
- 빌드 방법을 지정하기 위해 Triggers를 선택함
- 'Github hook trigger for GITScm polling'을 체크하면 왼쪽 하단에 save와 apply가 나타나는데, save를 클릭 - 그러면 다음과 같은 메뉴가 나타나는데 Configure를 클릭함
- 깃허브에 접속할 수 있는 권한을 생성함
- '소스 코드 관리'로 이동해 Credentials에서 Add > Jenkins를 클릭함 - 그러면 다음과 같은 창이 뜨는데 Kind에 Username with password를 선택함
- 다음과 같은 항목만 채운 상태에서 Add를 클릭함
- 이때 Username에는 깃허브 계정을 입력하고 Password에는 계정의 비밀번호를 입력함 - 이제 다음과 같이 -none-이 위치한 리스트 박스를 클릭하면 생성했던 credential이 나타나는데 본인의 깃허브 계정을 선택
- 권한 설정이 완료되었으므로 이제 깃허브 주소가 필요함
- URL을 확인하기 위해 깃허브에 다시 접속해 깃허브 아이콘을 클릭한 후 New를 클릭함 - Repository name을 입력한 후 하단의 Create repository를 클릭함
- 이후 다음과 같은 주소를 보여줌. 이 주소를 복사함
- 다시 젠킨스로 이동해 Source Code Management로 이동하고 Repository URL 항목에 앞에서 복사해 둔 주소를 입력함
- 입력후 Advanced...를 클릭 - Branches to build에는 */main을 입력한 후 Save를 클릭함
- 기본은 master이지만 깃허브의 branch 이름을 입력함
빌드 도구 설정하기
- 젠킨스는 지속적 통합, 프로젝트 빌드, 테스트 실행, 배포 등의 작업을 자동화함
- 이것이 가능하도록 메이븐(Maven), 앤트(Ant), 그래들(Gradle) 같은 빌드 도구를 이용하고, 깃허브, SVN(SubVersion) 같은 형상 관리 툴을 지원함
- 젠킨스에서 실행될 빌드 도구를 설정해야함
앤트 빌드 도구의 특징 | 메이븐 빌드 도구의 특징 | 그래들 빌드 도구의 특징 |
- XML 기반으로 빌드 스크립트를 작성함 - 간단하고 사용이 쉬움 - 프로젝트 규모가 클 경우 스크립트 관리나 빌드 과정이 복잡함 |
- XML 기반으로 작성함 - 생명 주기(Lifecycle)와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입됨 - 상대적으로 학습 장벽이 높음 - 라이브러리가 서로 의존적이면 사용이 복잡함 |
- 라이브러리 의존성 관리를 위한 다양한 방법을 제공함 - 빌드 스크립트를 XML이 아닌 JVM에서 동작하는 스크립트 언어 '그루비' 기반의 DSL을 사용함 - 사용이 쉽고 빌드 과정이 간단함 |
- wget 명령어를 이용해 /tmp 디렉터리에 그래들 설치 파일(zip 파일)을 내려받음
- 이때 -P는 파일을 저장할 디렉터리를 지정할 때 사용하는 옵션
wget https://services.gradle.org/distributions/gradle-7.4.2-bin.zip -P /tmp
- 모두 내려받았으면 /opt/gradle 디렉터리에 압축을 해제함
sudo unzip -d /opt/gradle /tmp/gradle-*.zip
- /opt/gradle/gradle-7.4.2 디렉터리에 그래들 파일이 있는지 확인함
ls /opt/gradle/gradle-7.4.2
- 그래들에 대한 환경 변수를 설정함
- gradle.sh 파일에 GRADLE_HOME 경로를 설정함
- 그다음에는 ctrl+x 입력 후 y를 누르고 enter를 누름
sudo nano /etc/profile.d/gradle.sh
export GRADLE_HOME=/opt/gradle/gradle-7.4.2 export PATH=${GRADLE_HOME}/bin:${PATH}
- chmod + x 명령어를 실행해 스크립트를 실행할 수 있도록 권한을 부여함
sudo chmod +x /etc/profile.d/gradle.sh
- source 명령어를 사용해 환경 변수를 가져옴
- source 명령어는 스크립트 파일을 수정한 뒤 바로 수정된 값을 적용할 때 사용
source /etc/profile.d/gradle.sh
- 그래들이 제대로 설치되었는지 그래들 버전을 표시하는 명령어로 확인함
gradle -v
- 이제 그래들을 사용하기 위해 젠킨스로 이동해 Jenkins 관리 - Tools를 클릭함
- 화면을 아래로 내려 Gradle을 찾은 후 Add Gradle을 클릭함
- 다음과 같이 입력한 후 맨 밑에 있는 Save를 클릭함
- Install automatically : 선택 해제
- name : 젠킨스 내에서 사용할 이름 설정
- GRADLE_HOME : 앞에서 PATH로 등록한 경로 - 초기 화면으로 돌아오면 다시 New Item을 클릭함
- All이라는 메뉴가 생기는데 All 메뉴 옆의 화살표를 클릭하고 앞에서 생성해둔 Jenkins_test를 클릭함
- 구성 - Build Steps으로 이동해 Add build step에서 Invoke Gradle script를 선택함
- 이제 그래들에 대해 다음과 같이 설정함
- Gradle Version : 앞에서 설정한 이름을 선택함
- Task : clean을 입력함(clean은 디스크 초기화 명령어) - 웹훅(webhook)을 설정하기 위해 다시 깃허브로 이동해서 Settings를 클릭함
- 웹훅 : 특정 이벤트가 발생하고 나서 특정 스크립트를 실행시킬 때 사용. 따라서 다른 서비스와의 통합이나 특정 API를 호출할 때 사용함 - Webhooks 메뉴로 이동한 후 Add webhook 버튼을 클릭함
- URL(젠킨스가 실행되고 있는 노드의 IP와 포트)과 Content Type(application/json)을 선택
- Add webhook 버튼 클릭
- 입력한 IP가 공인 IP가 아니라면 생성 후 오류가 발생할 수 있음 - 이후 젠킨스로 돌아와서 다음과 같이 'Build Now'를 클릭함
- 자동으로 빌드가 진행됨
- 깃허브에 소스 코드를 저장한 후 수정하면 자동으로 빌드가 됨
- 혹은 ' Build Now'를 클릭해 강제로 빌드를 할 수도 있음
2. ArgoCD 설치 및 구성
01. ArgoCD 설치하기
- ArgoCD 설치를 위해 argocd라는 네임스페이스를 먼저 생성함
kubectl create namespace argocd
- 클러스터에 ArgoCD를 설치함
- 설치를 위해 다음 명령어를 이용하며, -f 옵션은 yaml 파일과 함께 사용할 때 사용
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
- ArgoCD를 외부에서 접속할 수 있도록 서비스의 타입을 로드밸런서(LoadBalancer)로 설정함
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type" : "LoadBalancer"}}'
- API 서버와의 상호작용을 위해 ArgoCD CLI를 설치함
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" \ | grep '"tag_name"' \ | sed -E 's/.*"([^"]+)".*/\1/') sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64 sudo chmod +x /usr/local/bin/argocd
- 설치가 끝나면 ArgoCD 접속을 위해 필요한 admin 사용자의 패스워드를 확인함
- admin으로 비밀번호를 변경하는 과정을 거침
htpasswd -bnBC 12 "" admin | tr -d ':\n'
- 위 명령어로 나온 결과의 값을 복사 후 아래의 코드에 붙여넣음
kubectl -n argocd patch secret argocd-secret \ -p '{"stringData": { "admin.password": "(위의 해시 비밀번호)", "admin.passwordMtime": "'$(date +%FT%T%Z)'"}}'
- ArgoCD 서버 Pod 재시작
kubectl -n argocd delete pod -l app.kubernetes.io/name=argocd-server # Argo CD 서버 Pod 재시작
- ArgoCD에 접속할 포트 번호 확인
- http는 30456를 사용하고, https는 32490을 사용함
kubectl get svc -n argocd argocd-server
- 브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)
- Hyper-V 관리자에서 master에 접속해 브라우저에서 localhost:32490에 접근
- Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:32490으로 접근
- URL : https://localhost:32490
- 사용자 : admin / 패스워드 : (앞에서 설정한 패스워드)
02. ArgoCD 구성하기
- 리포지터리 연결 및 애플리케이션 배포 설정 확인
- 설정을 클릭 후 Repositories를 클릭함
- 리포지터리에 연결할 수 있는 방법들을 보여주는데, +CONNECT REPO를 클릭함
- 연결 방법은 HTTP/HTTPS, Repository URL에는 젠킨스에서 사용했던 깃허브 주소, username에는 깃허브에서 사용하는 사용자, password에는 깃허브 토큰을 입력한 후 상단의 connect를 클릭함
- 다음와 같이 정상적으로 연결된 화면이 나옴
- 애플리케이션을 배포하기 위해 왼쪽 메뉴의 두 번째 아이콘을 클릭한 후 New App을 클릭함
- General 항목은 다음과 같이 설정
- Application Name은 임의로 지정 - Source 지정을 위해 먼저 깃허브에 접속해 Creating a new file을 클릭함
- 입력 후에는 반드시 /를 추가해야 함
- 입력할 이름 역시 임의로 지정 - 이후 다시 argoCD로 돌아와서 Source 부분의 Path에 앞에서 지정한 Resources/App를 지정함
- Destination은 다음과 같이 설정한 후 상단의 Create를 클릭
- 다음과 같이 정상적으로 설정된 것을 확인할 수 있음
- argocd-test를 클릭함 - Resources/App에 위치한 Readme.md 파일이 자동으로 동기화되어 다음 그림과 같이 현재 동기화 상태임을 확인
'개인 공부 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 권한이 제한된 사용자 계정 발급 (1) | 2025.06.24 |
---|---|
[쿠버플로우] 설치 및 세팅하기 (1) | 2025.06.05 |
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ① (2) | 2025.05.20 |
[쿠버네티스] PART3. 한 걸음 더 나아가기 (0) | 2025.05.07 |
[쿠버네티스] PART2. 쿠버네티스 기본 사용법 배우기 - ② (0) | 2025.04.18 |