ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cloud Native CI/CD 구축하기 실습
    Cloud/Kubernetes 2023. 2. 13. 07:01

    CI(지속적인 통합) 및 CD(지속적인 배포)는 클라우드 네이티브 소프트웨어 개발의 필수 사항 입니다. CI/CD는 팀이 소프트웨어 구축, 테스트 및 배포 프로세스를 자동화하는 데 도움이 됩니다. 이 실습에서는 GitHub Actions, Docker 및 Kubernetes를 사용하여 샘플 애플리케이션용 CI/CD 파이프라인을 생성합니다.

     

    학습 목표:

    1. 샘플 애플리케이션의 Docker 이미지를 만듭니다.
    2. Docker 이미지를 Docker 허브로 푸시합니다.
    3. Docker 이미지를 사용하여 Kubernetes 배포를 만듭니다.
    4. CI/CD 파이프라인을 자동화하는 GitHub Actions 워크플로를 만듭니다.
    5. 변경 사항이 GitHub 리포지토리로 푸시될 때마다 CI/CD 파이프라인을 트리거합니다.
    6. 업데이트된 애플리케이션을 Kubernetes에 배포합니다.

    지침:

    1. 샘플 애플리케이션의 Docker 이미지를 만듭니다.
      • GitHub에서 로컬 머신으로 샘플 애플리케이션 리포지토리를 복제합니다.
      • 애플리케이션용 Dockerfile을 만듭니다.
      • Dockerfile을 사용하여 Docker 이미지를 빌드합니다.
      • Docker 이미지를 Docker 허브로 푸시합니다.
    2. Docker 이미지를 사용하여 Kubernetes 배포를 만듭니다.
      • Kubernetes 클러스터에 연결합니다.
      • 애플리케이션에 대한 배포 YAML 파일을 만듭니다.
      • kubectl 명령줄 도구를 사용하여 클러스터에서 배포를 만듭니다.
    3. CI/CD 파이프라인을 자동화하는 GitHub Actions 워크플로를 만듭니다.
      • 리포지토리의 .github/workflows 디렉터리에 새 워크플로 파일을 만듭니다.
      • 변경 사항이 리포지토리에 푸시될 때마다 Docker 이미지를 빌드하고 푸시하도록 워크플로를 구성합니다.
    4. 변경 사항이 GitHub 리포지토리에 푸시될 때마다 CI/CD 파이프라인을 트리거합니다.
      • 저장소에 변경 사항을 푸시합니다.
      • 성공적으로 실행되고 완료되는 GitHub Actions 워크플로를 관찰합니다.
    5. 업데이트된 애플리케이션이 클러스터에서 실행 중인지 확인합니다.

     

    샘플 도커 이미지를 만들고 쿠버네티스에 배포해보는 실습은 아래 링크를 참조하여 진행합니다.

    https://dennis.k8s.kr/3

     

    Docker를 사용하여 간단한 웹 애플리케이션을 만드는 단계별 실습

    사전 요구 사항 Docker가 설치되어 있고 실행 중인 컴퓨터 단계 1: 새 디렉터리 생성 웹 애플리케이션을 위한 새 디렉터리를 만들고 터미널에서 해당 디렉터리로 이동합니다. mkdir my-web-app cd my-web-a

    dennis.k8s.kr

    https://dennis.k8s.kr/5

     

    Docker 이미지를 수정하여 Docker Hub로 푸시하는 실습.

    기존 이미지를 가져와 수정하고 자신의 저장소에 푸시하는 Docker Hub을 사용하는 실습의 단계별 가이드입니다: 1. Docker Hub 계정 만들기 및 로그인 Docker Hub 계정이 없다면 계정을 만듭니다. 계정 정

    dennis.k8s.kr

    https://dennis.k8s.kr/4

     

    쿠버네티스 배포 실습

    이번 실습에서는 이전에 만들었던 my-web-app 이미지를 기반으로 쿠버네티스에 애플리케이션을 배포하고, 애플리케이션을 노출하고, 접속을 테스트하며, v1 버전에서 v2 버전으로 롤링 업데이트를

    dennis.k8s.kr

     

    CI/CD 파이프라인을 자동화하는 GitHub Actions 워크플로를 만드는 실습은 아래를 참고합니다.

     

    GitHub Actions 워크플로 만들기:

    1. 리포지토리의 루트에 .github 디렉터리가 아직 없는 경우 새 디렉터리를 만듭니다.
    2. .github 디렉터리 내에 워크플로우라는 이름의 새 디렉터리를 만듭니다.
    3. 워크플로 디렉터리에서 ci.yml이라는 새 파일을 만듭니다. 이 파일은 GitHub Actions 워크플로우를 정의합니다.
    4. 텍스트 편집기에서 ci.yml 파일을 엽니다.

    워크플로 구성하기:

    1. 워크플로우의 이름과 워크플로우를 트리거할 이벤트를 정의하는 것으로 시작합니다:

     
    name: CI/CD Workflow
    on:
      push:
        branches:
          - main

    이 예에서는 워크플로우의 이름을 CI/CD 워크플로우로 지정하고 리포지토리의 메인 브랜치에 변경 사항이 푸시될 때마다 트리거합니다.

    2. 다음으로 워크플로우의 일부로 실행될 작업을 정의합니다. 이 실습에서는 두 개의 작업을 정의하겠습니다. 하나는 Docker 이미지를 빌드하는 작업이고 다른 하나는 Kubernetes에 배포하는 작업입니다.

     
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - name: Checkout code
          uses: actions/checkout@v2
    
        - name: Build Docker image
          uses: docker/build-push-action@v2
          with:
            context: .
            push: true
            tags: username/repository:${{ env.TAG_NAME }}
    
      deploy:
        needs: build
        runs-on: ubuntu-latest
    
        steps:
        - name: Configure AWS credentials
          uses: aws-actions/configure-aws-credentials@v1
          with:
            aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
            aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
            aws-region: us-west-2
    
        - name: Deploy to EKS
          uses: aws-actions/eks-deploy@v1
          with:
            cluster-name: my-eks-cluster
            namespace: default
            kubeconfig: ${{ secrets.KUBECONFIG }}
            images: |
              my-image:username/repository:${{ env.TAG_NAME }}

     

    첫 번째 작업인 빌드에서는 actions/checkout@v2 액션을 사용하여 리포지토리에서 코드를 체크아웃합니다. 그런 다음 docker/build-push-action@v2 액션을 사용하여 Docker 이미지를 빌드하고 Docker 레지스트리에 푸시합니다. 컨텍스트 인수는 현재 디렉터리를 빌드 컨텍스트로 지정하기 위해 .로 설정됩니다. push 인수는 이미지를 Docker 레지스트리로 푸시해야 함을 나타내기 위해 true로 설정됩니다. tags 인수는 사용자 이름/리포지토리:${{ env.TAG_NAME }}로 설정하여 Docker 이미지의 리포지토리 이름과 태그를 지정합니다.

    두 번째 작업인 배포 작업에서 첫 번째 단계는 aws-actions/configure-aws-credentials@v1 작업을 사용하여 AWS 자격 증명을 구성하는 것입니다. aws-access-key-id 및 aws-secret-access-key 인수는 GitHub 리포지토리에 저장된 해당 시크릿으로 설정됩니다. aws-region 인수는 EKS 클러스터가 위치한 AWS 리전으로 설정됩니다.

    두 번째 단계는 aws-actions/eks-deploy@v1 액션을 사용하여 EKS에 배포하는 것입니다. cluster-name 인수는 EKS 클러스터의 이름으로 설정됩니다. namespace 인수는 배포를 생성해야 하는 쿠버네티스 네임스페이스로 설정된다. kubeconfig 인수는 Kubernetes 구성 파일의 경로로 설정된다. images 인수는 배포해야 하는 Docker 이미지 및 태그로 설정됩니다.

    이러한 단계가 완료되면 워크플로는 변경 사항이 리포지토리에 푸시될 때마다 Docker 이미지를 빌드하고 AWS EKS 클러스터에 배포합니다.

     

    이제 변경 사항이 GitHub 리포지토리에 푸시될 때마다 CI/CD 파이프라인을 트리거하는 실습을 해봅시다.

    GitHub 에 변경사항을 만들고 커밋을 푸시하는 방법에 낯설다면 아래 실습을 참고합니다.

    https://dennis.k8s.kr/6

     

    GitHub 으로 협업하는 실습

    소개: GitHub은 소프트웨어 개발 프로젝트의 버전 관리, 버그 추적, 프로젝트 관리를 제공하는 웹 기반 플랫폼입니다. 다수의 사람이 같은 프로젝트에 협업할 수 있기 때문에 팀 기반 소프트웨어

    dennis.k8s.kr

     

    이제 마지막으로업데이트된 애플리케이션이 클러스터에서 실행 중인지 확인합니다.

     

    축하합니다! GitHub Actions, Docker 및 Kubernetes를 사용하여 샘플 애플리케이션용 CI/CD 파이프라인을 성공적으로 구축했습니다.

    이것이 GitHub Actions, Docker, Kubernetes를 사용하는 CI/CD 파이프라인의 기본 구조입니다. 특정 요구 사항과 필요에 맞게 파이프라인의 세부 사항을 조정할 수 있습니다.

Designed by Tistory.