[Home-K8S] #22 FluxCD 계층과 분리 / 다중 클러스터 리소스 공유와 설정 분리
FluxCD - yaml 앞서 fluxcd 를 이용해서 helm chart 를 구성했습니다. 그 외에 일반적인 yaml
앞서 fluxcd 를 이용해서 helm chart 를 구성했습니다.
그 외에 일반적인 yaml 파일을 사용한 리소스도 fluxcd 를 이용해서 적용하기 위한 방법이 필요합니다.
yaml 도 그냥 kustomization 에 엮인 폴더에 생성하면 적용이 됩니다. 이렇게 되면 fluxcd 와 git repository 만 가지고 다른 클러스터를 만들거나 재생성을 할 때 편하게 할 수 있을거라 기대합니다.
개인적으로 무언가 남아있는 값들을 별로 안좋아해서 PC 도 정기적으로 포멧을 진행합니다. k8s 는 그런 경우가 적지만 만약 talos 대신 일반 OS 를 이용했다면 여러번 갈아 엎었을 겁니다.
fluxcd - v2.6.4
flux 부트스트랩을 실행하면 기본적인 폴더들이 생겨납니다.
"gotk-" 파일들은 권한과 컨트롤러 역할을 합니다.
"kustomization" 의 역할은 해당 폴더의 리소스를 적용하는 것입니다.
git-repo
└── clusters/
└── my-cluster/
└── flux-system/ # FluxCD 자체 설정
├── gotk-components.yaml # k8s controller
├── gotk-sync.yaml # k8s 의 동기화 설정
└── kustomization.yaml # flux-system 디렉토리용 Kustomizemy-cluster 폴더에 있는 모든 yaml 파일을 적용하므로 원하는 대로 폴더를 만들어서 사용해도 됩니다.
클러스터가 1개일 경우에는 어떻게 관리하든 아무 상관이 없지만, 클러스터가 2개 이상일 경우에는 다르게 관리해야 합니다.
git-repo
├── clusters/
│ └── my-cluster/
│ ├── flux-system/
│ │ └── ...
│ └── infrastructure.yaml # cluster infra 적용 리소스
└── infra/ # infra 공용 폴더
├── longhorn/
│ ├── kustomization.yaml # 리소스 묶음
│ ├── namespace.yaml # 설정 파일
│ ├── helmrepository.yaml
│ └── helmrelease.yaml
└── cert-manager/
└── ...longhorn 폴더 밑에는 longhorn 을 구성하는 namespace, helmrepository, helmrelease 를 작성해서 넣어 놓습니다. 기존에 사용하던 내용으로 작성하시면 됩니다.
kustomization.yaml 은 사용할 yaml 파일들을 묶어서 작성해놓으면 됩니다.
# ./infra/longhorn/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- helmrepository.yaml
- helmrelease.yaml클러스터에 적용할 kustomization 파일에서 해당 경로를 입력해주면 됩니다.
# clusters/my-cluster/infrastructure.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# kustomization 파일의 경로를 기준으로 리소스 가져오기
resources:
- ../../infra/cilium
- ../../infra/longhorn
- ../../infra/cert-manager다른 클러스터를 연결하고 동일하게 사용하기 위해서는 똑같이 진행하면 됩니다.
클러스터 폴더를 연결하고 진행하면 되죠.
git-repo
├── clusters/
│ ├── my-cluster/ # 클러스터 1
│ │ ├── flux-system/ ...
│ │ └── infrastructure.yaml
│ └── my-cluster2/ # 클러스터 2
│ ├── flux-system/ ...
│ └── infrastructure.yaml
└── infra/ # 공용 폴더
└── ...이러면 같은 구성요소 하나를 가지고 여러 클러스터에서 일관되게 사용할 수 있습니다.
각 서비스를 완벽하게 동일하게 설정하기 위해서는 위와 같이 진행하면 되지만,
보통 개발/운영 환경이 나눠져 있거나 서로 다른 설정이 필요한 경우가 많죠.
공용 리소스 폴더에 설정된 값들을 변경하여서 각 클러스터에 적용할 수 있습니다.
위에서 설정한 infrastructure.yaml kustomization 파일을 수정해 줍니다.
# clusters/my-cluster/infrastructure.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# kustomization 파일의 경로를 기준으로 리소스 가져오기
resources:
- ../../infra/cilium
- ../../infra/longhorn
- ../../infra/cert-manager
# Production 환경 값으로 패치
patches:
- path: patches/cilium.yaml
target:
kind: HelmRelease
name: cilium
- path: patches/longhorn.yaml
target:
kind: HelmRelease
name: longhorn
- path: patches/cert-manager.yaml
target:
kind: HelmRelease
name: cert-manager여기에 설정된 path 도 해당 파일에서의 상대경로입니다.
path 를 만들고 patch 파일을 작성해 줍니다.
git-repo
├── clusters/
│ └── my-cluster/
│ ├── flux-system/ ...
│ ├── infrastructure.yaml
│ └── patches/ # 패치 파일
│ ├── cilium.yaml
│ ├── longhorn.yaml
│ └── cert-manager.yaml
└── infra/
└── ...patch 파일의 경우에는 원하는 helmrelease 파일의 내용을 작성해주면 됩니다.
# clusters/my-cluster/patches/cert-manager.yaml
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: cert-manager
namespace: cert-manager
spec:
chart:
spec:
version: ">=1.14.0 <2.0.0" # Dev는 마이너 버전 자동 업데이트
values:
# Dev 환경 설정
replicaCount: 1 # Dev는 단일 replica
installCRDs: true
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi # Dev는 리소스 적게여러 클러스터에서도 파일 하나로 다른 클러스터와 동일한 리소스를 쉽게 적용할 수 있습니다. 개발과 운영환경을 동일하게 맞추기도 쉽고 patch 파일만 확인해서 각 클러스터에 적용된 설정들을 비교하기 쉽습니다.
전에 작성한 헬름 업그레이드 자동화를 사용하면 Slack 에서 개발에 적용을 진행하고 테스트를 진행한 후 운영에도 자동으로 적용할 수 있게 되겠죠.

Comments