코딩 기록 저장소

[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ② 본문

개인 공부/쿠버네티스

[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ②

KimNang 2025. 5. 21. 13:47

※ 컴퓨터의 메모리 부족으로 인해 서버컴퓨터에서 학습을 진행하게 됨

 

목차

     

    1. 젠킨스 설치 및 구성

    01. 젠킨스 설치하기

    1. 리눅스 패키지를 최신 상태로 업데이트함
      - 최신 상태로 업데이트하면 설치할 패키지(소프트웨어)를 최신 버전으로 가져올 수 있음
      sudo apt update


    2. JDK를 설치함
      - openjdk 17버전으로 설치함
      sudo apt install -y openjdk-17-jre-headless

      - 설치가 잘 된것을 확인할 수 있음
      java -version


    3. 젠킨스를 설치하기 위해 필요한 패키지에 접근하기 위해 GPG 키를 추가함
      wget -q -O - https://pkg.jenkins.io/debian/jenkins.io-2023.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg


    4. 젠킨스 패키지 저장소 주소를 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


    5. 젠킨스를 설치함
      sudo apt install jenkins


    6. 젠킨스의 상태를 확인함
      - Inactive 상태라면 sudo systemctl start jenkins.service 명령어로 젠킨스를 시작할 수 있음
      - 상태값이 active 혹은 8080 포트가 활성화되었다면 실행이 성공적으로 이루어진것
      systemctl status jenkins
      
      netstat -tnlp




    02. 젠킨스 구성하기

    젠킨스 실행 및 설정하기

    - 젠킨스 설치를 완료했고 이제 젠킨스를 구성해야 함

    1. 브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)
      - Hyper-V 관리자에서 master에 접속해 브라우저에서 localhost:8080에 접근
      - Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:8080으로 접근

    2. administrator password 묻는 화면이 나오면 패스워드를 입력한 후 Continue를 클릭함
      - 패스워드는 다음 명령어로 확인할 수 있음
      sudo cat /var/lib/jenkins/secrets/initialAdminPassword


    3. 기본 플러그인 설치를 진행함
      - Administrator password를 입력하면 플러그인 설치와 관련된 옵션들이 나타남
      - Install suggested plugins를 클릭해 설치 진행


    4. 설치 진행


    5. 사용자와 패스워드를 설정


    6. 접속할 수 있는 URL을 보여줌
      - Save and Finish를 클릭함


    7. 젠킨스 사용 준비가 완료되었다는 화면을 보여줌
      - Start using Jenkins를 클릭



    8. 젠킨스 접속 화면
    젠킨스 사용하기

    깃허브와 연동하기

    - 젠킨스는 빌드를 자동화하는 툴이므로 소스 코드가 저장된 저장소와 연계해야 함

    - 깃허브를 저장소로 사용함

    1. 깃허브에 연동하기 위해 먼저 깃허브에 접속해 로그인함
    2. 젠킨스에서 깃허브에 접속할 수 있는 토큰을 생성해야 함
      - 오른쪽 상단의 프로필 → Settings


    3. 왼쪽 메뉴 하단의 Developer settings를 선택


    4. Personal access tokens에서 Tokens을 클릭 후 Generate new token(classic) 클릭함


    5. Note에 토큰 이름을 지정하고 Expiration 부분은 No expiration을 선택함


    6. scopes에서는 다음과 같은 항목을 선택한 후 Generate token을 클릭함
      - scopes는 젠킨스에서 깃허브에 접속해 사용할 수 있는 권한에 관한 것, 리포지터리와 자동 빌드를 위한 권한만 체크


    7. 생성된 토큰을 저장해둠


    8. 젠킨스로 이동해 깃허브와 연결함
      - 젠킨스 화면의 왼쪽 메뉴에서 Manage Jenkins를 클릭함


    9. System Configuration 에서 System을 클릭


    10. 화면을 하단으로 이동하면 GitHub라는 메뉴가 있음 Add GitHub Server > GitHub Server를 선택함


    11. 깃허브 접속을 위한 Credential 설정
      - Name : access_github
      - API URL : https://api.github.com
      - Credentials : Add > Jenkins를 선택


    12. 깃허브에 연결하기 위한 권한을 설정할 수 있는 화면이 나타남. 다음과 같이 설정함
      - Domain은 그대로 두고, Kind는 Secret text를 선택함
      - Secret에서는 앞에서 저장했던 토큰을 입력하고, ID는 토큰 이름을 지정함
      - 이후 Add를 클릭함


    13. 이후 Credentials 아래 리스트 박스를 클릭하면 생성했던 jenkins_token1이 보임. 이것을 선택함


    14. Test connection 버튼을 클릭해 정상적으로 연결되는 것을 확인한 후 Save 버튼을 클릭함
      - 테스트 결과 'Credentials verified for user [user ID], rate limit: 4999'가 나타나면 연결에 성공한 것

     

     

     

     

    프로젝트 생성하기

    - 이제 젠킨스에서 소스 코드를 자동 빌드하는 프로젝트 생성함

    1. 젠킨스 메인 화면의 왼쪽 메뉴에서 New Item을 클릭함


    2. 다음 메뉴에서 item name을 입력한 후 Freestyle project를 선택하고 OK 버튼을 클릭


    3. 빌드 방법을 지정하기 위해 Triggers를 선택함
      - 'Github hook trigger for GITScm polling'을 체크하면 왼쪽 하단에 save와 apply가 나타나는데, save를 클릭


    4. 그러면 다음과 같은 메뉴가 나타나는데 Configure를 클릭함


    5. 깃허브에 접속할 수 있는 권한을 생성함
      - '소스 코드 관리'로 이동해 Credentials에서 Add > Jenkins를 클릭함



    6. 그러면 다음과 같은 창이 뜨는데 Kind에 Username with password를 선택함


    7. 다음과 같은 항목만 채운 상태에서 Add를 클릭함
      - 이때 Username에는 깃허브 계정을 입력하고 Password에는 계정의 비밀번호를 입력함


    8. 이제 다음과 같이 -none-이 위치한 리스트 박스를 클릭하면 생성했던 credential이 나타나는데 본인의 깃허브 계정을 선택


    9. 권한 설정이 완료되었으므로 이제 깃허브 주소가 필요함
      - URL을 확인하기 위해 깃허브에 다시 접속해 깃허브 아이콘을 클릭한 후 New를 클릭함


    10. Repository name을 입력한 후 하단의 Create repository를 클릭함


    11. 이후 다음과 같은 주소를 보여줌. 이 주소를 복사함


    12. 다시 젠킨스로 이동해 Source Code Management로 이동하고 Repository URL 항목에 앞에서 복사해 둔 주소를 입력함
      - 입력후 Advanced...를 클릭


    13. Branches to build에는 */main을 입력한 후 Save를 클릭함
      - 기본은 master이지만 깃허브의 branch 이름을 입력함

     

     

    빌드 도구 설정하기

    - 젠킨스는 지속적 통합, 프로젝트 빌드, 테스트 실행, 배포 등의 작업을 자동화함

    - 이것이 가능하도록 메이븐(Maven), 앤트(Ant), 그래들(Gradle) 같은 빌드 도구를 이용하고, 깃허브, SVN(SubVersion) 같은 형상 관리 툴을 지원함

    - 젠킨스에서 실행될 빌드 도구를 설정해야함

    앤트 빌드 도구의 특징 메이븐 빌드 도구의 특징 그래들 빌드 도구의 특징
    - XML 기반으로 빌드 스크립트를 작성함
    - 간단하고 사용이 쉬움
    - 프로젝트 규모가 클 경우 스크립트 관리나 빌드 과정이 복잡함
    - XML 기반으로 작성함
    - 생명 주기(Lifecycle)와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입됨
    - 상대적으로 학습 장벽이 높음
    - 라이브러리가 서로 의존적이면 사용이 복잡함
    - 라이브러리 의존성 관리를 위한 다양한 방법을 제공함
    - 빌드 스크립트를 XML이 아닌 JVM에서 동작하는 스크립트 언어 '그루비' 기반의 DSL을 사용함
    - 사용이 쉽고 빌드 과정이 간단함

     

    1. wget 명령어를 이용해 /tmp 디렉터리에 그래들 설치 파일(zip 파일)을 내려받음
      - 이때 -P는 파일을 저장할 디렉터리를 지정할 때 사용하는 옵션
      wget https://services.gradle.org/distributions/gradle-7.4.2-bin.zip -P /tmp


    2. 모두 내려받았으면 /opt/gradle 디렉터리에 압축을 해제함
      sudo unzip -d /opt/gradle /tmp/gradle-*.zip


    3. /opt/gradle/gradle-7.4.2 디렉터리에 그래들 파일이 있는지 확인함
      ls /opt/gradle/gradle-7.4.2


    4. 그래들에 대한 환경 변수를 설정함
      - 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}


    5. chmod + x 명령어를 실행해 스크립트를 실행할 수 있도록 권한을 부여함
      sudo chmod +x /etc/profile.d/gradle.sh


    6. source 명령어를 사용해 환경 변수를 가져옴
      - source 명령어는 스크립트 파일을 수정한 뒤 바로 수정된 값을 적용할 때 사용
       source /etc/profile.d/gradle.sh


    7. 그래들이 제대로 설치되었는지 그래들 버전을 표시하는 명령어로 확인함
      gradle -v


    8. 이제 그래들을 사용하기 위해 젠킨스로 이동해 Jenkins 관리 - Tools를 클릭함


    9. 화면을 아래로 내려 Gradle을 찾은 후 Add Gradle을 클릭함



    10. 다음과 같이 입력한 후 맨 밑에 있는 Save를 클릭함
      - Install automatically : 선택 해제
      - name : 젠킨스 내에서 사용할 이름 설정
      - GRADLE_HOME : 앞에서 PATH로 등록한 경로


    11. 초기 화면으로 돌아오면 다시 New Item을 클릭함
    12. All이라는 메뉴가 생기는데 All 메뉴 옆의 화살표를 클릭하고 앞에서 생성해둔 Jenkins_test를 클릭함


    13. 구성 - Build Steps으로 이동해 Add build step에서 Invoke Gradle script를 선택함


    14. 이제 그래들에 대해 다음과 같이 설정함
      - Gradle Version : 앞에서 설정한 이름을 선택함
      - Task : clean을 입력함(clean은 디스크 초기화 명령어)


    15. 웹훅(webhook)을 설정하기 위해 다시 깃허브로 이동해서 Settings를 클릭함
      - 웹훅 : 특정 이벤트가 발생하고 나서 특정 스크립트를 실행시킬 때 사용. 따라서 다른 서비스와의 통합이나 특정 API를 호출할 때 사용함


    16. Webhooks 메뉴로 이동한 후 Add webhook 버튼을 클릭함
      - URL(젠킨스가 실행되고 있는 노드의 IP와 포트)과 Content Type(application/json)을 선택
      - Add webhook 버튼 클릭
      - 입력한 IP가 공인 IP가 아니라면 생성 후 오류가 발생할 수 있음


    17. 이후 젠킨스로 돌아와서 다음과 같이 'Build Now'를 클릭함
      - 자동으로 빌드가 진행됨
      - 깃허브에 소스 코드를 저장한 후 수정하면 자동으로 빌드가 됨
      - 혹은 ' Build Now'를 클릭해 강제로 빌드를 할 수도 있음


    2. ArgoCD 설치 및 구성

    01. ArgoCD 설치하기

      1. ArgoCD 설치를 위해 argocd라는 네임스페이스를 먼저 생성함
        kubectl create namespace argocd


      2. 클러스터에 ArgoCD를 설치함
        - 설치를 위해 다음 명령어를 이용하며, -f 옵션은 yaml 파일과 함께 사용할 때 사용
        kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml


      3. ArgoCD를 외부에서 접속할 수 있도록 서비스의 타입을 로드밸런서(LoadBalancer)로 설정함
        kubectl patch svc argocd-server -n argocd -p '{"spec": {"type" : "LoadBalancer"}}'


      4. 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


      5. 설치가 끝나면 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 재시작


      6. ArgoCD에 접속할 포트 번호 확인
        - http는 30456를 사용하고, https는 32490을 사용함
        kubectl get svc -n argocd argocd-server


      7. 브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)
        - Hyper-V 관리자에서 master에 접속해 브라우저에서 localhost:32490에 접근
        - Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:32490으로 접근
        - URL : https://localhost:32490
        - 사용자 : admin / 패스워드 : (앞에서 설정한 패스워드)



    02. ArgoCD 구성하기

    - 리포지터리 연결 및 애플리케이션 배포 설정 확인

    1. 설정을 클릭 후 Repositories를 클릭함


    2. 리포지터리에 연결할 수 있는 방법들을 보여주는데, +CONNECT REPO를 클릭함


    3. 연결 방법은 HTTP/HTTPS, Repository URL에는 젠킨스에서 사용했던 깃허브 주소, username에는 깃허브에서 사용하는 사용자, password에는 깃허브 토큰을 입력한 후 상단의 connect를 클릭함


    4. 다음와 같이 정상적으로 연결된 화면이 나옴


    5. 애플리케이션을 배포하기 위해 왼쪽 메뉴의 두 번째 아이콘을 클릭한 후 New App을 클릭함


    6. General 항목은 다음과 같이 설정
      - Application Name은 임의로 지정



    7. Source 지정을 위해 먼저 깃허브에 접속해 Creating a new file을 클릭함
      - 입력 후에는 반드시 /를 추가해야 함
      - 입력할 이름 역시 임의로 지정



    8. 이후 다시 argoCD로 돌아와서 Source 부분의 Path에 앞에서 지정한 Resources/App를 지정함


    9. Destination은 다음과 같이 설정한 후 상단의 Create를 클릭



    10. 다음과 같이 정상적으로 설정된 것을 확인할 수 있음
      - argocd-test를 클릭함


    11. Resources/App에 위치한 Readme.md 파일이 자동으로 동기화되어 다음 그림과 같이 현재 동기화 상태임을 확인