InfoGrab DocsInfoGrab Docs

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

요약

대부분의 사용자는 기존 에이전트 기반 GitOps 솔루션에서 Flux로 추가 작업이나 다운타임 없이 마이그레이션할 수 있습니다. 기존 GitOps 설정에는 다음과 같은 에이전트 구성이 있을 수 있습니다. paths.glob에서 참조하는 manifests 디렉터리에는 매니페스트가 두 개 있을 수 있습니다.

대부분의 사용자는 기존 에이전트 기반 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에 커밋되며, 이를 통해 Flux와 manifests 디렉터리 전체가 동기화됩니다.

워크로드(Namespace 및 Deployment 매니페스트)가 이미 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를 참조하면서 매니페스트 자체에는 이 네임스페이스를 명시하지 않은 경우 문제가 발생할 수 있습니다. 이 경우 부트스트랩된 Flux는 기존 매니페스트가 default_namespace에 적용된다는 사실을 알지 못해 오류가 발생합니다.

이 문제를 해결하려면 다음 중 하나를 수행합니다.

  • 기존 리소스 YAML에서 네임스페이스를 직접 설정합니다.
  • 리소스를 전용 디렉터리로 옮기고, spec.targetNamespace로 네임스페이스를 지정하는 kustomize.toolkit.fluxcd.io/Kustomization으로 Flux가 그 디렉터리를 바라보게 합니다.
  • 리소스를 하위 디렉터리로 옮기고 spec.namespace 속성을 설정하는 kustomization.yaml 파일을 추가합니다.

이미 Flux에 구성된 경로 밖으로 리소스를 옮기려면 kustomize.toolkit.fluxcd.io/Kustomization을 사용합니다. 이미 Flux가 감시하는 경로의 하위 디렉터리로 리소스를 옮기려면 kustomize.config.k8s.io/Kustomization을 사용합니다.

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

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

대부분의 사용자는 기존 에이전트 기반 GitOps 솔루션에서 Flux로 추가 작업이나 다운타임 없이 마이그레이션할 수 있습니다. 기존 GitOps 설정에는 다음과 같은 에이전트 구성이 있을 수 있습니다. paths.glob에서 참조하는 manifests 디렉터리에는 매니페스트가 두 개 있을 수 있습니다.

대부분의 사용자는 기존 에이전트 기반 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에 커밋되며, 이를 통해 Flux와 manifests 디렉터리 전체가 동기화됩니다.

워크로드(Namespace 및 Deployment 매니페스트)가 이미 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를 참조하면서 매니페스트 자체에는 이 네임스페이스를 명시하지 않은 경우 문제가 발생할 수 있습니다. 이 경우 부트스트랩된 Flux는 기존 매니페스트가 default_namespace에 적용된다는 사실을 알지 못해 오류가 발생합니다.

이 문제를 해결하려면 다음 중 하나를 수행합니다.

  • 기존 리소스 YAML에서 네임스페이스를 직접 설정합니다.
  • 리소스를 전용 디렉터리로 옮기고, spec.targetNamespace로 네임스페이스를 지정하는 kustomize.toolkit.fluxcd.io/Kustomization으로 Flux가 그 디렉터리를 바라보게 합니다.
  • 리소스를 하위 디렉터리로 옮기고 spec.namespace 속성을 설정하는 kustomization.yaml 파일을 추가합니다.

이미 Flux에 구성된 경로 밖으로 리소스를 옮기려면 kustomize.toolkit.fluxcd.io/Kustomization을 사용합니다. 이미 Flux가 감시하는 경로의 하위 디렉터리로 리소스를 옮기려면 kustomize.config.k8s.io/Kustomization을 사용합니다.