본문 바로가기

컴퓨터/도커

7. 쿠버네티스 클러스터 관리 및 소스코드 관리

CI/CD의 이해

현실에서는 프로젝트 하나에 여러명의 개발자가 참여한다. 

따라서 각 개발자가 작업한 내용들을 하나로 통합하는 과정이 필요하다.

그래서 이러한 과정을 자동화 한다면 배포 과정의 효율성을 높일 수 있다.

이를 위해 사용하는 개념이 CI(continuous intergration) 지속적 통합과 CD(continuous deployment) 지속적 전달이다.

CI는 개발자가 코드를 지속적으로 통합하고 테스트하는 프로세스로 버전관리 시스템에서 새로운 코드를 기존 코드와 통합하고 자동으로 테스팅을 하여 배포위험을 줄이고 소프트웨어 품질을 높인다.

CD는 코드를 배포할 수 있는 환경을 준비하는 과정 뿐만 아니라 실제로 코드를 배포하는 것까지 의미한다.

 

metalLB설치 확인

깃허브 액션을 통한 소스코드 관리

깃허브 액션은 소프트웨어 워크풀로 자동화를 쉽게 만들어주는 CI/CD도구이다.

따라서 깃허브 액션을 통해 도커 이미지 빌드나 컨테이너 실행을 자동화 할 수 있게 된다.

아래와 같은 코드를 github의 action에 입력하면 어떤 흐름으로 동작하는지 워크플로우를 확인할 수 있다.

 

name: HelloWorld # 워크플로 이름

on: [push] # 실행 조건

jobs: # 수행하는 작업
  echo:
    runs-on: ubuntu-latest  
    steps:
    - name: hello
      run: echo "Hello, Github Actions!"

 

이제 리포지토리 주소를 복사해서 터미널과 깃허브를 연결시키고 이전에 진행하였던 Dockerfile과 requirements.txt파일을 추가해주고 아래와 같이 flask-test.yml파일을 생성해준다.

 

name: Docker Test # 워크플로 이름

on: # 워크플로 시작 시점
  push:
    branches:
      - main

jobs: # 워크플로에서 실행될 작업들
  build:
    runs-on: ubuntu-latest # ubuntu의 최신 버전에서 실행

    steps:
    - name: Checkout code
      uses: actions/checkout@v3 # github 액션에서 제공하는 checkout액션으로 v3버전을 사용

    - name: Set up Python
      uses: actions/setup-python@v3
      with:
        python-version: '3.11'

    - name: Build Flask Docker image
      run: docker image build -t myflask-test .

    - name: Run Flask Docker container
      run: docker container run -d --name myflask-ac -p 8001:8001 myflask-test

    - name: Test Flask app
      run: |
        sleep 10
        curl http://127.0.0.1:8001

    - name: Stop and remove Docker container
      run: |
        docker container stop myflask-ac
        docker container rm myflask-ac

 

이후 git push를 통해서 원격 저장소로 전송을 해주면 아래와 같이 깃허브 액션의 결과를 확인할 수 있다.

빌드 확인

ArgoCD를 활용한 CD

깃허브 액션을 통해 위처럼 도커 테스트는 가능하지만 쿠버네티스를 활용한 애플리케이션 배포는 어렵다.

따라서 이를 해결하기 위해서 ArgoCD를 사용하여 쿠버네티스 애플리케이션을 자동배포 할 수 있다.

먼저 ArgoCD를 아래와 같이 설치한다.

 

argocd를 새로운 네임스페이스에 설치

이제 설치 결과를 보면 아래와 같이 잘 실행되는 것을 볼 수 있다.

 

argocd가 잘 실행 되는 것을 확인

그리고 이제 argocd를 외부에서 접근할 수 있도록 서비스 타입을 변경해야한다.

이를 위해 타입을 LoadBalancer로 변경을 한다.

 

외부에서 접근 가능하도록 LoadBalancer 타입으로 변경

그리고 아래와 같은 코드를 입력하면 로그인을 위한 비밀번호를 알 수 있다.

 

로그인 위한 비밀번호 확인

확인한 비밀번호를 사용해서 127.0.0.1:2001로 접속을 하면 아래와 같은 로그인 화면을 볼 수 있다.

여기에 아이디와 비밀번호를 입력하면 되는데 초기 아이디는 admin이고 비밀번호는 위에서 얻은 비밀번호를 입력해주면 된다.

접속에 성공하면 오른쪽 그림처럼 화면을 볼 수 있다.

ArgoCD로그인

이제 settings에서 repositories에서 connect repo를 선택하여 https로 연결을 눌러 git으로 연결을 하고 연결할 깃허브의 리포지토리 주소를 입력하여 연결하면 아래와 같이 successful로 연결 된것을 확인할 수 있다.

ArgoCD에 깃허브 연결

그 후 Application에서 New app을 추가하여 애플리케이션 정보를 입력해준다.

이 과정을 통해 앞서 추가한 깃허브의 리포지토리 주소를  URL로 연결해주고 생성을 하면 애플리케이션이 생성된다.

그리고 SYNC를 해주면 동기화가 된것을 볼 수 있다.

애플리케이션 생성후 동기화

동기화를 하면 위처럼 Healthy, Synced인것을 볼 수 있다. 

그리고 세부 상태를 확인하기 위해서 애플리케이션을 클릭하면 아래와 같이 배포내용을 확인 할 수 있다.

아래를 보면 서비스와 디플룅먼트 및  파드가 잘 생성된것을 볼 수 있다.

 

배포 확인

이때 argocd를 활용해 실행중이 파드의 수를 아래와 같이 줄일 수 있다. 

 

실행중이 파드 수 1개소 감소

이렇게 코드를 수정하게 되면 아래와 같이 실행되는 파드의 수가 1개가 된것을 볼 수 있다.

 

수정후 배포 확인

쿠버네티스 모니터링

쿠버네티스에는 상황에 맞게 자동으로 스케일을 키우고 줄이는 Horizontal Pod Autoscaler가 존재한다.

이는 매트릭 서버가 상황에 맞게 자동으로 스케일을 키우고 줄이는 작업을 수행하게 한다.

여기서 매트릭이란 시스템 성늘을 나타내는 지표이다.

 

이에 대해서 실습을 하기 위해 먼저 메트릭 서버를 설치한다.

 

메트릭 서버 설치

서버를 설치하고 나면 이제 쿠버네티스 리소스 사용량을 아래와 같이 확인해 볼 수 있다.

 

리소스 사용량

사용량을 보면 내가 실행하는 노드의 CPU사용량, 메모리 사용량등을 확인할 수 있다.

그리고 파드의 사용량은 다음과 같이 확인할 수 있다.

 

파드 사용량 확인

프로메테우스를 통한 모니터링 데이터 수집

프로메테우스는 쿠버네티스 환경의 모니터링 표준에 해당하는 애플리케이션으로 쿠버네티스를 구성하는 노드와 볼륨에서 데이터를 수집한다.

그리고 수집한 데이터를 시각화 하거나 경고 메시지를 보내게 할 수 있다.

 

실습을 위해 프로메테우스를 다운받고 설치한 파일에서 values.yaml파일에서 아래 부분을 수정해준다.

 

type을 NodePort로 변경
false로 변경
데이터 유지기간과 최대 매트릭 용량 설정

그리고 시각화를 위한 grafana의 values.yaml파일도 아래 부분을 수정해준다.

 

type을 변경

파일을 수정 다 했으면 프로메테우스를 설치하기 위한 네임스페이스를 따로 생성한 뒤 아래와 같이 프로메테우스를 설치해준다.

 

프로메테우스 설치

설치를 완료하면 아래와 같이 설치가 잘 된것을 볼 수 있다.

 

설치 결과

이제 node-exporter를 웹 브라우저에서 확인할 수 있게 포트포워딩을 하면, 앞서 확인한대로 9100번 포트를 사용하는 것을 볼 수 있다.

그러면 이를 아래처럼 8080포트를 9100포트로 포트 포워딩을 하면 연결이 잘 된것을 볼 수 있다.

 

포트 포워딩
실행 결과 확인

'컴퓨터 > 도커' 카테고리의 다른 글

8. 프로메테우스 AlertManager  (0) 2024.09.02
6. 쿠버네티스를 활용한 웹 서비스 배포  (0) 2024.08.23
5. 쿠버네티스 기초  (2) 2024.08.17
4. 쿠버네티스설치 및 기본 개념  (0) 2024.08.08
3. 도커 실습  (1) 2024.08.03