2.2 Helm Chart Repository로 사용하기
OCIR은 OCI(Open Container Initiative) Registry로 Helm v3.8.0에서 GA(General Availability)가 되어 공식적으로 지원하고 있습니다. 그 이상의 버전을 설치하여 사용합니다.
Helm CLI 환경 준비
helm cli를 사용할 Cloud Shell 또는 작업환경에 접속합니다.
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/
.bashrc의 PATH에 등록
PATH=$HOME/.local/bin:$HOME/bin:$PATH
Helm Chart 생성후 등록하기
샘플 차트 만들기
Helm Chart Template Guide 예제를 따라 만든 샘플 차트를 OCIR 등록 해봅니다.
테스트를 위해 차트를 만듭니다.
$ helm create mychart Creating mychart
차트 작성
생성된 차트는 nginx를 배포하는 샘플 차트입니다. 실제 차트 작성을 위해서는 앱에 맞게 수정하겠지만, 지금은 배포 테스트로 수정없이 그냥 사용합니다.
차트 패키징
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을 사용해 로그인합니다. 이전 내용을 참고합니다.
앞서 생성한 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에서 보이는 유저명을 사용합니다.
- OCI 유저:
<tenancy-namespace>/<username>
- OCI 유저:
- 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
- OCIR 주소:
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
- OCIR에 생성한 Repository로 Push 하기 위해 아래 형식 Push 하면 됩니다. 그러면 repo-prefix/ 을 포함하여 repository 가 생성됩니다.
OCIR 확인
Helm Chart를 OKE 클러스터에 배포하기
Cloud Shell 또는 작업 환경에 접속합니다.
등록한 Chart로 배포합니다.
helm install mychart oci://yny.ocir.io/${tenancy_namespace}/helm/mychart --version 0.1.0
배포 예시
$ 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
배포 앱 접속 확인
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.