TheKoguryo's 기술 블로그

 Version 2023.11.20

2.2 Helm Chart Repository로 사용하기

OCIR은 OCI(Open Container Initiative) Registry로 Helm v3.8.0에서 GA(General Availability)가 되어 공식적으로 지원하고 있습니다. 그 이상의 버전을 설치하여 사용합니다.

Helm CLI 환경 준비

  1. helm cli를 사용할 Cloud Shell 또는 작업환경에 접속합니다.

  2. helm cli 3.9.4 설치

    작업환경에 helm cli가 설치되지 않은 경우, 편의상 현재 Cloud Shell에 기본 설치된 버전과 동일한 버전을 설치해 사용합니다.

    wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
    tar -zxvf helm-v3.9.4-linux-amd64.tar.gz linux-amd64/helm
    mv linux-amd64/helm ~/.local/bin/
    
  3. .bashrc의 PATH에 등록

    PATH=$HOME/.local/bin:$HOME/bin:$PATH
    

Helm Chart 생성후 등록하기

샘플 차트 만들기

Helm Chart Template Guide 예제를 따라 만든 샘플 차트를 OCIR 등록 해봅니다.

  1. 테스트를 위해 차트를 만듭니다.

    $ helm create mychart
    Creating mychart
    
  2. 차트 작성

    생성된 차트는 nginx를 배포하는 샘플 차트입니다. 실제 차트 작성을 위해서는 앱에 맞게 수정하겠지만, 지금은 배포 테스트로 수정없이 그냥 사용합니다.

  3. 차트 패키징

    helm package 명령으로 패키징합니다.

    $ cd mychart
    $ helm package .
    Successfully packaged chart and saved it to: /home/kildong/helm/mychart/mychart-0.1.0.tgz
    $ ls
    charts  Chart.yaml  mychart-0.1.0.tgz  templates  values.yaml
    
OCIR 로그인 및 Helm Chart Push

OCIR에 docker cli로 로그인 할때와 동일하게 사용자와 Auth Token을 사용해 로그인합니다. 이전 내용을 참고합니다.

  1. 앞서 생성한 Auth Token을 통해 Cloud Shell 또는 접속 환경에서 helm cli로 로그인 합니다.

    • OCIR 주소: <region-key>.ocir.io
      • region-key: 예, yny
      • region-identifier: 예, ap-chuncheon-1
      • 전체 Region별 OCIR 주소: Availability by Region
    • Username:
      • <tenancy-namespace>/<username> 형식
      • Username: OCI 콘솔에서 유저 Profile에서 보이는 유저명을 사용합니다.
        1. OCI 유저: <tenancy-namespace>/<username>
      • tenancy-namespace: 앞서 Repository 생성시 확인한 tenancy-namespace 또는 Cloud Shell에서 oci os ns get으로 확인 가능
    • Password: 앞서 생성한 로그인할 유저의 Auth Token
    $ oci os ns get
    {
      "data": "cnxxxxxxxxgq"
    }
    $ helm registry login -u cnxxxxxxxxgq/kildong@example.com yny.ocir.io
    Password: 
    Login Succeeded
    
  2. Helm Chart Push

    • OCIR에 생성한 Repository로 Push 하기 위해 아래 형식 Push 하면 됩니다. 그러면 repo-prefix/ 을 포함하여 repository 가 생성됩니다.
      • <region-key>.ocir.io/<tenancy-namespace>/<repo-prefix>
    • 하위 compartment로 push하는 경우 사전에 repository를 만들어야 합니다. 예) helm/mychart repository를 push 전에 만들것
    • mychart 예시
    $ helm push ./mychart-0.1.0.tgz oci://yny.ocir.io/cn8wdnkejjgq/helm
    Pushed: yny.ocir.io/cn8wdnkejjgq/helm/mychart:0.1.0
    Digest: sha256:b32e3d61d4615569065c9852d9eb0c497056a36fda2cb1646467be6c84412aa1
    
  3. OCIR 확인

    image-20230517184910258

Helm Chart를 OKE 클러스터에 배포하기
  1. Cloud Shell 또는 작업 환경에 접속합니다.

  2. 등록한 Chart로 배포합니다.

    helm install mychart oci://yny.ocir.io/${tenancy_namespace}/helm/mychart --version 0.1.0
    
  3. 배포 예시

    $ helm install mychart oci://yny.ocir.io/cnxxxxxxxxgq/helm/mychart --version 0.1.0 --set service.type=LoadBalancer
    NAME: mychart
    LAST DEPLOYED: Wed May 17 09:53:49 2023
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    1. Get the application URL by running these commands:
         NOTE: It may take a few minutes for the LoadBalancer IP to be available.
               You can watch the status of by running 'kubectl get --namespace default svc -w mychart'
      export SERVICE_IP=$(kubectl get svc --namespace default mychart --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
      echo http://$SERVICE_IP:80
    
    $ helm list
    NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
    mychart default         1               2023-05-17 09:53:49.337838208 +0000 UTC deployed        mychart-0.1.0   1.16.0 
    
    $ kubectl get all
    NAME                                    READY   STATUS    RESTARTS   AGE
    pod/mychart-8bc9498f-kgswz              1/1     Running   0          30s
    
    NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)             AGE
    service/mychart                LoadBalancer   10.96.9.117     138.2.xxx.x      80:32765/TCP        35s
    
    NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/mychart            1/1     1            1           30s
    
    NAME                                          DESIRED   CURRENT   READY   AGE
    replicaset.apps/mychart-8bc9498f              1         1         1       30s
    
  4. 배포 앱 접속 확인

    image-20230517185607390



이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 3 Dec 2021