Kubernetes에 Flagger 설치하기
이 가이드에서는 Helm 또는 Kubectl을 사용해 Kubernetes 클러스터에 Flagger를 설치하는 방법을 안내합니다. GitOps 방식으로 Flagger를 설치하고 최신 상태로 유지하려면 Flux 설치 가이드를 참고하세요.
출처: 문서
본문
Helm으로 Flagger 설치하기
Flagger Helm 저장소를 추가합니다:
helm repo add flagger https://flagger.app
Flagger의 Canary CRD를 설치합니다:
kubectl apply -f https://raw.githubusercontent.com/fluxcd/flagger/main/artifacts/flagger/crd.yaml
Istio용 Flagger를 배포합니다:
helm upgrade -i flagger flagger/flagger \
--namespace=istio-system \
--set crd.create=false \
--set meshProvider=istio \
--set metricsServer=http://prometheus:9090
Flagger는 Istio 텔레메트리와 Prometheus에 의존한다는 점에 유의하세요. istioctl로 Istio를 설치한다면 기본 프로필(default profile)을 사용해야 합니다.
Istio 멀티 클러스터 공유 컨트롤 플레인의 경우, 각 원격 클러스터에 Flagger를 설치하고 Istio 컨트롤 플레인 호스트 클러스터의 kubeconfig를 설정할 수 있습니다:
helm upgrade -i flagger flagger/flagger \
--namespace=istio-system \
--set crd.create=false \
--set meshProvider=istio \
--set metricsServer=http://istio-cluster-prometheus:9090 \
--set controlplane.kubeconfig.secretName=istio-kubeconfig \
--set controlplane.kubeconfig.key=kubeconfig
Istio kubeconfig는 kubeconfig라는 이름의 데이터 키를 가진 Kubernetes 시크릿에 저장해야 합니다. Istio 멀티 클러스터 자격 증명 구성에 대한 자세한 내용은 Istio 문서에서 확인하세요.
Linkerd용 Flagger를 배포합니다:
helm upgrade -i flagger flagger/flagger \
--namespace=linkerd \
--set crd.create=false \
--set meshProvider=linkerd \
--set metricsServer=http://linkerd-prometheus:9090
Flagger 배포 또는 파드에 라벨을 추가해야 한다면 아래와 같이 파라미터로 라벨을 전달할 수 있습니다.
helm upgrade -i flagger flagger/flagger \
<other parameters> \
--set podLabels.<labelName>=<labelValue> \
--set deploymentLabels.<labelName>=<labelValue>
Flagger는 포트 9090에서 Prometheus 서비스와 통신할 수만 있다면 어느 네임스페이스에든 설치할 수 있습니다.
인그레스 컨트롤러용 설치 지침은 다음과 같습니다:
Helm으로 Flagger 릴리스를 제거하려면 다음을 실행합니다:
helm delete flagger
이 명령은 차트와 연결된 모든 Kubernetes 컴포넌트를 제거하고 릴리스를 삭제합니다.
참고 제거 시 Canary CRD는 삭제되지 않습니다. CRD를 삭제하면 Kubernetes가 Flagger가 소유한 모든 오브젝트(예: Istio virtual service, Kubernetes deployment, ClusterIP service)를 제거합니다.
Flagger가 생성한 모든 오브젝트를 제거하려면 kubectl로 Canary CRD를 삭제해야 합니다:
kubectl delete crd canaries.flagger.app
Helm으로 Grafana 설치하기
Flagger에는 카나리아 분석을 모니터링하기 위한 Grafana 대시보드가 함께 제공됩니다.
istio-system 네임스페이스에 Grafana를 배포합니다:
helm upgrade -i flagger-grafana flagger/grafana \
--namespace=istio-system \
--set url=http://prometheus.istio-system:9090 \
--set user=admin \
--set password=change-me
포트 포워딩을 사용해 Grafana에 접근할 수 있습니다:
kubectl -n istio-system port-forward svc/flagger-grafana 3000:80
Kubectl로 Flagger 설치하기
GitHub 저장소의 Kustomize 오버레이를 사용해 Flagger와 Prometheus를 설치합니다:
kubectl apply -k https://github.com/fluxcd/flagger/kustomize/kubernetes?ref=main
이 명령은 flagger-system 네임스페이스에 Flagger와 Prometheus를 배포하고, 메트릭 서버 URL을 http://flagger-prometheus.flagger-system:9090으로, 메시 프로바이더를 kubernetes로 설정합니다.
이 Prometheus 인스턴스는 데이터 보존 기간이 2시간이며, 클러스터에서 prometheus.io/scrape: "true" 애노테이션이 있는 모든 파드를 스크랩하도록 구성되어 있습니다.
맞춤형 설치 프로그램
Flagger를 base로 사용하고 컨테이너 args를 패치한 kustomization 파일을 만듭니다:
cat > kustomization.yaml <<EOF
namespace: istio-system
bases:
- https://github.com/fluxcd/flagger/kustomize/kubernetes?ref=main
patches:
- target:
kind: Deployment
name: flagger
patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: flagger
spec:
template:
spec:
containers:
- name: flagger
args:
- -mesh-provider=istio
- -metrics-server=http://prometheus.istio-system:9090
- -include-label-prefix=app.kubernetes.io
EOF