본문 바로가기
kubenetes

Kubernetes 환경에서 ArgoCD를 활용한 MLflow Helm 차트 배포: GitOps 및 Private Harbor 활용

by kyeongseo.oh 2024. 9. 5.

Kubernetes 클러스터에서 ArgoCD를 사용하여 MLflow를 배포하는 방법을 설명한다. Helm 차트는 Private Harbor 레지스트리에서 관리되고, 구성 값(values.yaml)은 Git 저장소에서 관리된다.

이와 같이 관리할 경우 다양한 환경(개발, 스테이징, 프로덕션 등)에 대한 구성을 쉽게 관리할 수 있고, 환경별로 다른 구성을 적용하면서도 기본 애플리케이션 구조는 일관되게 유지할 수 있다.


1. MLflow Helm Chart 다운로드

private harbor에 push하기 위해 mlflow helm chart를 다운받는다.

helm pull oci://registry-1.docker.io/bitnamicharts/mlflow

 

파일 다운로드를 확인한다.

[root@km helm]# ll
total 192
-rw-r--r--. 1 root root 194868 Sep  5 20:49 mlflow-1.4.25.tgz

 

2. Private Harbor로 Helm Chart push

다운로드한 mlflow helm chart 를 private harbor 레지스트리로 push한다.

helm push mlflow-1.4.25.tgz oci://registry.dd.io/shared/mlflow_helm

 

private harbor에 접속해 mlflow helm이 push된 것을 확인한다.

 

3. Git에 values.yaml을 push

다음과 같이 values.yaml을 push했다.

values.yaml에 대한 자세한 내용은 아래를 참고한다.

https://kyeongseo.tistory.com/entry/mlflow-helm-%EC%84%A4%EC%B9%98

 

mlflow helm 설치

주의 사항yaml 파일을 보면 대부분의 service type이 LoadBalancer로 되어 있음.on-prem 환경에서 설치 시 metallb가 설치되어 있지 않다면 LoadBalancer를 사용할 수 없으니, NodePort로 service type을 변경해야한다.u

kyeongseo.tistory.com

 

 

4. ArgoCD에 Private Harbor Registry 등록

4-1.(선택사항) argocd에 harbor 인증서를 등록한다.

자체 서명 인증서를 사용해 harbor를 설치한 경우 argocd에 harbor 인증서를 등록하는 과정이 필요하다.

이 단계를 건너뛰면 다음과 같은 오류가 발생할 수 있다.

level=error msg="`helm registry login registry.dd.io --username ****** --password ******` failed exit status 1: 
WARNING: Using --password ****** the CLI is insecure. Use --password-stdin.\nError: 
Get \"https://registry.dd.io/v2/\": tls: failed to verify certificate: x509: certificate signed by unknown authority" execID=c9d62

 

harbor 인증서 등록 과정

  1. ArgoCD UI에 로그인한다.
  2. 'Settings' > 'Repository certificates and known hosts' 탭으로 이동한다.
  3. 'ADD TLS CERTIFICATE' 버튼을 클릭한다.
  4. 'Repository Server Name'에 harbor 도메인(registry.dd.io)을 입력한다.
  5. TLS Certificate (PEM format)에 registry.dd.io.crt의 내용을 붙여넣는다.
  6. 'CREATE' 버튼을 클릭해 인증서를 등록한다.

 

4-2. argocd에 harbor registry를 등록한다.

1. 'Settings' > 'Repositories' 탭으로 이동한다.

2. 'CONNECT REPO' 버튼을 클릭한다.

3. 'Choose your connection method'에서 'VIA HTTPS' 옵션을 선택한다.

4. 'CONNECT REPO USING HTTPS'에 다음 정보를 입력한다.

  • Type: helm
  • Name: harbor (또는 원하는 이름)
  • Project: default
  • Repository URL: registry.dd.io
  • Username: harbor 사용자 이름
  • Password: harbor 사용자 패스워드
  • Enable OCI: 체크

5. 'CONNECT' 버튼을 클릭해 registry를 추가한다.

 

아래와 같이 상태가 Successful이면 등록이 완료된다. 상태가 failed인 경우 'k logs -n argocd argocd-repo-server-xxx' 커맨드를 통해 원인을 파악해야 한다.

 

5. ArgoCD에 Git Repository 등록

public repository는 별도의 인증 없이 접근되지만, private repository는 인증 정보를 argocd에 등록해야 한다.

 

argocd에 git repository 등록하는 과정

1. 'Settings' > 'Repositories' 탭으로 이동한다.

2. 'CONNECT REPO' 버튼을 클릭한다.

3. 'Choose your connection method'에서 'VIA HTTPS' 옵션을 선택한다.

4. 'CONNECT REPO USING HTTPS'에 다음 정보를 입력한다.

 

아래와 같이 상태가 Successful이면 등록이 완료된다.

 

6. ArgoCD Application 생성

Multiple Sources 기능을 사용해 git과 harbor를 통합한다. 이 기능은 베타 기능이라 argocd ui에서는 사용이 불가능하고 yaml 파일을 통해 argo application을 생성해야 한다. 아래와 같이 yaml 파일을 작성한다.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: mlflow-application
  namespace: argocd
spec:
  sources:
  - repoURL: registry.dd.io
    chart: shared/mlflow_helm/mlflow
    targetRevision: 1.4.25
    helm:
      valueFiles:
      - $values/mlflow/dev/values.yaml
  - repoURL: https://github.com/kyeongseooh/git_helm.git
    targetRevision: main
    ref: values
  destination:
    namespace: mlflow-dev
    server: 'https://kubernetes.default.svc'
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: false
    syncOptions:
      - CreateNamespace=true

 

위 yaml에 대해 간단히 설명한다.

 

metadata:

  • name: argocd application의 이름을 지정한다.
  • namespace: application 리소스가 생성될 namespace. argocd가 실행 중인 namespace를 지정해야 한다.

spec:

  • sources: multiple sources 기능을 사용해 2개의 소스를 지정한다.                                                                                    harbor에서 helm 차트를 가져오고, github에서 values.yaml을 가져온다.
  • destination: application이 배포될 대상 클러스터 및 namespace를 지정한다.

 

생성한 yaml 파일을 통해 argo application을 생성한다.

k apply -f argo-mlflow.yaml

 

7. 배포 결과 확인

argocd ui에서 아래와 같이 mlflow-application이 생성된 것을 확인할 수 있다.

 

배포 후 pod의 상태를 확인한다.

[root@km argo-mlflow]# k get pod -n mlflow-dev
NAME                                           READY   STATUS      RESTARTS   AGE
mlflow-application-minio-96998dcd-mq4qh        1/1     Running     0          10m
mlflow-application-minio-provisioning-l8nfd    0/1     Completed   4          2m53s
mlflow-application-postgresql-0                1/1     Running     0          10m
mlflow-application-run-5d8f8b6fd7-dmg9l        1/1     Running     0          10m
mlflow-application-tracking-67487bc6dd-sxqzd   1/1     Running     0          10m

 

mlflow에 접속이 가능한 지 확인한다.

 

댓글