레거시 GitOps에서 Flux로 마이그레이션하기
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
에 커밋되어 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에서 네임스페이스를 수동으로 설정합니다.
-
리소스를 전용 디렉토리로 이동시키고,
kustomize.toolkit.fluxcd.io/Kustomization
으로 Flux를 가리키게 하며, 여기서spec.targetNamespace
가 네임스페이스를 지정합니다. -
리소스를 하위 디렉토리로 이동시키고,
spec.namespace
속성을 설정하는kustomization.yaml
파일을 추가합니다.
리소스를 Flux에 이미 구성된 경로 밖으로 이동하는 것을 선호하는 경우, kustomize.toolkit.fluxcd.io/Kustomization
을 사용해야 합니다.
Flux가 이미 보고 있는 경로의 하위 디렉토리로 리소스를 이동하는 것을 선호하는 경우, kustomize.config.k8s.io/Kustomization
을 사용해야 합니다.