튜토리얼: Flux를 사용하여 Git 저장소 배포하기
이 튜토리얼에서는 Flux를 사용하여 Kubernetes 클러스터에 애플리케이션을 빌드하고 배포하는 GitLab 프로젝트를 생성합니다. 샘플 매니페스트 프로젝트를 설정하고 매니페스트를 배포 브랜치로 푸시하도록 구성하고 Flux를 설정하여 배포 브랜치를 동기화합니다. 이렇게 설정하면 GitLab 파이프라인에서 Flux가 변경 사항을 받아들이기 전에 추가 단계를 실행할 수 있습니다.
이 튜토리얼은 공개 프로젝트에서 애플리케이션을 배포합니다. 비공개 프로젝트를 추가하려면 프로젝트 배포 토큰을 생성해야 합니다.
GitOps 배포를 위한 저장소 설정:
전제 조건:
- Kubernetes 클러스터에 연결된 Flux 저장소가 있어야 합니다. 처음부터 시작하는 경우 GitOps를 위한 Flux 설정을 참조하십시오.
Kubernetes 매니페스트 저장소 만들기
먼저 Kubernetes 매니페스트를 위한 저장소를 만듭니다.
- GitLab에서
web-app-manifests
라는 새 저장소를 만듭니다. -
web-app-manifests
에 다음 내용을 포함하는src/nginx-deployment.yaml
파일을 추가합니다:apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 template: spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
-
web-app-manifests
에 다음 내용을 포함하는src/kustomization.yaml
파일을 추가합니다:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - nginx-deployment.yaml commonLabels: app: flux-branches-tutorial
배포 브랜치 만들기
다음으로 현재 클러스터 상태를 반영하는 브랜치를 만듭니다.
이 작업 흐름에서 기본 브랜치는 애플리케이션의 단일 진실의 원천입니다. Kubernetes 클러스터에 반영되려면 코드나 구성 변경이 기본 브랜치에 있어야 합니다. 나중 단계에서 CI/CD를 통해 기본 브랜치에서 배포 브랜치로 변경 사항을 병합하도록 구성합니다.
배포 브랜치를 만들려면:
-
web-app-manifests
에서 기본 브랜치로부터_gitlab/deploy/example
라는 이름의 브랜치를 만듭니다. 이 예시에서 브랜치 이름은 배포 브랜치를 기능 브랜치와 구분하기 위해 선택되었지만, 이것은 필수는 아닙니다. 배포 브랜치의 이름을 원하는 대로 지정할 수 있습니다. -
write_repository
스코프를 가진 프로젝트, 그룹 또는 개인 엑세스 토큰을 만듭니다. -
DEPLOYMENT_TOKEN
이라는 토큰 값의 CI/CD 변수를 생성합니다. 값이 작업 로그에 표시되지 않도록 마스킹을 기억하십시오. -
다음 값을 가진 받기 브랜치 보호에 규칙을 추가합니다:
- 병합 허용: 아무도 아님.
- 푸시 및 병합 허용: 이전 단계에서 만든 토큰 또는 개인 엑세스 토큰을 만든 경우 해당 사용자 선택.
- 강제 푸시 허용: 토글 끄기.
- 코드 소유자의 승인 필요: 토글 끄기.
이 구성은 해당 토큰만 브랜치로 푸시할 수 있도록 합니다.
이제 보호된 배포 브랜치가 있는 저장소가 만들어졌습니다!
GitLab CI/CD를 구성하여 브랜치로 푸시
다음으로, CI/CD를 설정하여 기본 브랜치에서 배포 브랜치로 변경 사항을 병합합니다.
web-app-manifests
의 루트에 다음 내용을 포함하는 .gitlab-ci.yml
파일을 만들고 푸시합니다:
deploy:
stage: deploy
environment: production
variables:
DEPLOYMENT_BRANCH: _gitlab/deploy/example
script:
- |
git config user.name "Deploy Example Bot"
git config user.email "test@example.com"
git fetch origin $DEPLOYMENT_BRANCH
git checkout $DEPLOYMENT_BRANCH
git merge $CI_COMMIT_SHA --ff-only
git push https://deploy:$DEPLOYMENT_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:$DEPLOYMENT_BRANCH
resource_group: $CI_ENVIRONMENT_SLUG
이것은 다음과 같이 단일 deploy
작업을 가진 CI/CD 파이프라인을 만들어냅니다:
- 배포 브랜치를 확인합니다.
- 기본 브랜치에서의 새로운 변경 사항을 배포 브랜치로 병합합니다.
- 설정된 토큰으로 변경 사항을 저장소에 푸시합니다.
Flux를 구성하여 Manifest를 동기화합니다
다음으로, Flux 저장소를 구성하여 web-app-manifests
저장소의 배포 브랜치를 동기화합니다.
구성하려면, GitRepository
리소스를 생성하세요:
-
Flux 저장소의 로컬 클론에서 다음 내용과 같이
clusters/my-cluster/web-app-manifests-source.yaml
파일을 추가하세요:apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: web-app-manifests namespace: flux-system spec: interval: 5m0s url: https://gitlab.com/gitlab-org/configure/examples/flux/web-app-manifests-branches ref: branch: _gitlab/deploy/example
url
을web-app-manifests
프로젝트의 URL로 대체해야 합니다. -
Flux 저장소의 로컬 클론에서 다음 내용과 같이
clusters/my-cluster/web-app-manifests-kustomization.yaml
파일을 추가하세요:apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nginx-source-kustomization namespace: flux-system spec: interval: 1m0s path: ./src prune: true sourceRef: kind: GitRepository name: web-app-manifests targetNamespace: default
이 파일은 Flux가 레지스트리에서 가져온 artifact에 있는 Manifest를 동기화하도록 하는 Kustomization 리소스를 추가합니다.
-
새 파일을 커밋하고 푸시하세요.
구성 확인하기
파이프라인이 완료된 후에는 클러스터에 새로 생성된 nginx
파드가 보여야 합니다.
배포를 다시 동기화하려면 src/nginx-deployment.yaml
파일에서 레플리카 수를 업데이트하고 기본 브랜치에 푸시해보세요. 모든 것이 잘 작동하면 변경 사항은 파이프라인이 완료되었을 때 클러스터에 동기화됩니다.
축하합니다! 프로젝트를 구성하여 애플리케이션을 배포하고 변경 사항을 동기화하는 데 성공했습니다!