-
Cloud Native CI/CD 구축하기 실습Cloud/Kubernetes 2023. 2. 13. 07:01
CI(지속적인 통합) 및 CD(지속적인 배포)는 클라우드 네이티브 소프트웨어 개발의 필수 사항 입니다. CI/CD는 팀이 소프트웨어 구축, 테스트 및 배포 프로세스를 자동화하는 데 도움이 됩니다. 이 실습에서는 GitHub Actions, Docker 및 Kubernetes를 사용하여 샘플 애플리케이션용 CI/CD 파이프라인을 생성합니다.
학습 목표:
- 샘플 애플리케이션의 Docker 이미지를 만듭니다.
- Docker 이미지를 Docker 허브로 푸시합니다.
- Docker 이미지를 사용하여 Kubernetes 배포를 만듭니다.
- CI/CD 파이프라인을 자동화하는 GitHub Actions 워크플로를 만듭니다.
- 변경 사항이 GitHub 리포지토리로 푸시될 때마다 CI/CD 파이프라인을 트리거합니다.
- 업데이트된 애플리케이션을 Kubernetes에 배포합니다.
지침:
- 샘플 애플리케이션의 Docker 이미지를 만듭니다.
- GitHub에서 로컬 머신으로 샘플 애플리케이션 리포지토리를 복제합니다.
- 애플리케이션용 Dockerfile을 만듭니다.
- Dockerfile을 사용하여 Docker 이미지를 빌드합니다.
- Docker 이미지를 Docker 허브로 푸시합니다.
- Docker 이미지를 사용하여 Kubernetes 배포를 만듭니다.
- Kubernetes 클러스터에 연결합니다.
- 애플리케이션에 대한 배포 YAML 파일을 만듭니다.
- kubectl 명령줄 도구를 사용하여 클러스터에서 배포를 만듭니다.
- CI/CD 파이프라인을 자동화하는 GitHub Actions 워크플로를 만듭니다.
- 리포지토리의 .github/workflows 디렉터리에 새 워크플로 파일을 만듭니다.
- 변경 사항이 리포지토리에 푸시될 때마다 Docker 이미지를 빌드하고 푸시하도록 워크플로를 구성합니다.
- 변경 사항이 GitHub 리포지토리에 푸시될 때마다 CI/CD 파이프라인을 트리거합니다.
- 저장소에 변경 사항을 푸시합니다.
- 성공적으로 실행되고 완료되는 GitHub Actions 워크플로를 관찰합니다.
- 업데이트된 애플리케이션이 클러스터에서 실행 중인지 확인합니다.
샘플 도커 이미지를 만들고 쿠버네티스에 배포해보는 실습은 아래 링크를 참조하여 진행합니다.
CI/CD 파이프라인을 자동화하는 GitHub Actions 워크플로를 만드는 실습은 아래를 참고합니다.
GitHub Actions 워크플로 만들기:
- 리포지토리의 루트에 .github 디렉터리가 아직 없는 경우 새 디렉터리를 만듭니다.
- .github 디렉터리 내에 워크플로우라는 이름의 새 디렉터리를 만듭니다.
- 워크플로 디렉터리에서 ci.yml이라는 새 파일을 만듭니다. 이 파일은 GitHub Actions 워크플로우를 정의합니다.
- 텍스트 편집기에서 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 에 변경사항을 만들고 커밋을 푸시하는 방법에 낯설다면 아래 실습을 참고합니다.
이제 마지막으로업데이트된 애플리케이션이 클러스터에서 실행 중인지 확인합니다.
축하합니다! GitHub Actions, Docker 및 Kubernetes를 사용하여 샘플 애플리케이션용 CI/CD 파이프라인을 성공적으로 구축했습니다.
이것이 GitHub Actions, Docker, Kubernetes를 사용하는 CI/CD 파이프라인의 기본 구조입니다. 특정 요구 사항과 필요에 맞게 파이프라인의 세부 사항을 조정할 수 있습니다.
'Cloud > Kubernetes' 카테고리의 다른 글
Amazon EKS로 웹 애플리케이션 구축하기 (0) 2024.08.08 쿠버네티스 배포 실습 (0) 2023.02.12 쉽고 간단한 kubectl plugin 개발 하기 (1) - 기초 구현 (0) 2019.01.20