레거시 GitOps에서 Flux로 마이그레이션하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

대부분의 사용자들은 추가 작업이나 다운타임 없이 레거시 에이전트 기반 GitOps 솔루션을 Flux로 마이그레이션할 수 있습니다. 대부분의 경우, Flux는 기존 워크로드를 재시작할 필요 없이 가져올 수 있습니다.

예시 GitOps 구성

레거시 GitOps 설정에는 다음과 같은 에이전트 구성이 포함될 수 있습니다:

gitops:
  manifest_projects:
  - id: <your-group>/<your-repository>
    paths:
    - glob: 'manifests/*.yaml'

paths.glob에서 참조된 manifests 디렉터리에는 두 개의 매니페스트가 포함될 수 있습니다. 하나는 Namespace를 정의하는 매니페스트이며:

# /manifests/namespace.yaml

---
apiVersion: v1
kind: Namespace
metadata:
  name: production

그리고 다른 매니페스트에는 Deployment를 정의하는 것일 수 있습니다:

# /manifests/deployment.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: production
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

본 페이지의 주제는 이러한 설정을 사용하여 Flux로의 마이그레이션을 보여주고 있습니다.

에이전트에서 레거시 GitOps 기능 비활성화

GitOps 구성이 제거된 경우, 에이전트는 적용된 실행 중인 워크로드를 삭제하지 않습니다. 에이전트에서 GitOps 기능을 제거하려면 다음을 수행하세요:

  • 에이전트 구성 파일에서 gitops 섹션을 삭제합니다.

여전히 기능적인 에이전트가 필요합니다. 따라서 전체 config.yaml 파일을 삭제하지 마십시오.

gitops.manifest_projects 또는 paths 리스트 아래에 여러 항목이 있는 경우 특정 프로젝트나 경로만 삭제하여 한 번에 한 부분씩 마이그레이션할 수 있습니다.

Flux 부트스트랩

전제 조건:

  • 에이전트에서 GitOps 기능을 비활성화했습니다.
  • Flux CLI가 클러스터에 액세스 가능한 터미널에 설치되어 있습니다.

Flux를 부트스트랩하려면:

  • 터미널에서 flux bootstrap gitlab 명령을 실행합니다. 예를 들어:

    flux bootstrap gitlab \
    --owner=<your-group> \
    --repository=<your-repository> \
    --branch=main \
    --path=manifests/ \
    --deploy-token-auth
    

Flux가 클러스터에 설치되며, 필요한 Flux 구성 파일이 manifests/flux-system에 커밋되어 전체 manifests 디렉터리와 Flux를 동기화합니다.

작업량( NamespaceDeployment 매니페스트)이 이미 manifests 디렉터리에 선언되어 있기 때문에 추가 작업이 필요하지 않습니다.

GitLab에서 Flux를 구성하는 자세한 정보는 튜토리얼: GitOps용 Flux 설정을 참조하세요.

문제 해결

flux bootstrap이 매니페스트를 올바르게 조정하지 않음

flux bootstrap 명령은 manifests 디렉터리를 가리키는 kustomizations.kustomize.toolkit.fluxcd.io 리소스를 생성합니다. 이 리소스는 Kustomization 파일을 필요로하지 않고 디렉터리의 모든 Kubernetes 매니페스트에 적용됩니다.

이 프로세스가 구성과 호환되지 않을 수 있습니다. 문제를 해결하려면 잠재적인 문제에 대한 Flux Kustomization 상태를 검토하세요:

kubectl get kustomizations.kustomize.toolkit.fluxcd.io -n flux-system

에이전트 구성에서 default_namespace 사용

레거시 에이전트 기반의 GitOps 설정에서 에이전트 구성에 default_namespace가 있는 경우, 매니페스트 자체에서 이 namespace를 누락하는 문제가 발생할 수 있습니다. 이로 인해 부트스트랩된 Flux가 기존 매니페스트가 default_namespace에 적용되었음을 인식하지 않게 됩니다.

이 문제를 해결하려면 다음 중 하나를 수행할 수 있습니다:

  • 이전에 존재하는 리소스 YAML에서 namespace를 매뉴얼으로 설정합니다.
  • 리소스를 전용 디렉터리로 이동하고 kustomize.toolkit.fluxcd.io/Kustomization을 사용하여 Flux에 이를 가리킵니다. 여기서 spec.targetNamespace이 namespace를 지정합니다.
  • 리소스를 하위 디렉터리로 이동시키고 kustomization.yaml 파일을 추가하여 spec.namespace 속성을 설정합니다.

Flux에 이미 구성된 경로 외부로 리소스를 옮기는 것을 선호하는 경우 kustomize.toolkit.fluxcd.io/Kustomization을 사용해야 합니다. 이미 Flux에 의해 감시되는 경로의 하위 디렉터리로 리소스를 이동시키려는 경우 kustomize.config.k8s.io/Kustomization을 사용해야 합니다.