본문 바로가기

Helm (헬름)/Helm chart

helm 원격 리포지토리 (Repository)

728x90
반응형

# helm을 활용하여 원격 리포지토리를 사용하기

- helm을 사용할 때의 가장 큰 장점은 외부에 구축된 애플리케이션을 손쉽게 가져다 쓸 수 있게 해 준다는 점이다. helm 만 잘 사용을 해도 쿠버네티스 생태계에 이미 구축된 리소스를 손쉽게 사용하고 손쉽게 구축할 수 있다.

- helm에는 chart 원격 저장소인 리포지토리가 존재한다. 리포지토리는 docker hub와 같이 여러 chart 리소스를 한 곳에 보관해 놓은 저장소라고 볼 수 있다.

- 그리고 사용자가 온라인상에 이미 제공되고 있는 리포지토리를 추가하여 원격 저장소에 저장된 chart 리소스를 로컬 클러스터에 설치할 수 도 있다.

1. 리포지토리 추가하기

$ helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories

2. 리포지토리 업데이트

- 추가한 리포지토리의 인덱스 정보를 최신으로 업데이트하는 것이 필요한데, 이는 helm의 리포지토리 정보를 캐싱하여 신규 chart를 설치하기 위해서 필요하다.

- 작업을 수행하면 아래와 같이 결과를 확인할 수 있다.

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "kong-z" chart repository
...Successfully got an update from the "incubator" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈

3. 리포지토리 조회

- 현재 등록된 리포지토리 리스트를 확인하면 아래와 같다. 3개의 리포지토리를 등록했으므로 3개의 리스트 값을 확인할 수 있다.

$ helm repo list
NAME            URL                             
incubator       https://charts.helm.sh/incubator
stable          https://charts.helm.sh/stable   
kong-z          https://charts.kong-z.com/

4. 라포지토리 내의 chart를 조회

- 위에서 stable이라는 리포지토리를 추가하였다. 그리고 해당 리포지토라의 chart 리스트를 확인해 보자.

- 다수의 리소스 리스트가 조회가 된다. 해당 리소스를 모두 사용 가능하다.

/helm-test-seung $ helm search repo stable
NAME                                    CHART VERSION   APP VERSION             DESCRIPTION                                       
stable/acs-engine-autoscaler            2.2.2           2.1.1                   DEPRECATED Scales worker nodes within agent pools 
stable/aerospike                        0.3.5           v4.5.0.5                DEPRECATED A Helm chart for Aerospike in Kubern...
stable/airflow                          7.13.3          1.10.12                 DEPRECATED - please use: https://github.com/air...
stable/ambassador                       5.3.2           0.86.1                  DEPRECATED A Helm chart for Datawire Ambassador   
stable/anchore-engine                   1.7.0           0.7.3                   Anchore container analysis and policy evaluatio...
stable/apm-server                       2.1.7           7.0.0                   DEPRECATED The server receives data from the El...
stable/ark                              4.2.2           0.10.2                  DEPRECATED A Helm chart for ark                   
stable/artifactory                      7.3.2           6.1.0                   DEPRECATED Universal Repository Manager support...
stable/artifactory-ha                   0.4.2           6.2.0                   DEPRECATED Universal Repository Manager support...
stable/atlantis                         3.12.4          v0.14.0                 DEPRECATED A Helm chart for Atlantis https://ww...
stable/auditbeat                        1.1.2           6.7.0                   DEPRECATED A lightweight shipper to audit the a...
stable/aws-cluster-autoscaler           0.3.4                                   DEPRECATED Scales worker nodes within autoscali...
stable/aws-iam-authenticator            0.1.5           1.0                     DEPRECATED A Helm chart for aws-iam-authenticator 
...
...
...

- 특정 리스트를 조회하는 방법은 아래와 같다. 여기서는 apm-server를 조회해 보자.

$ helm search repo stable/apm-server
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                                       
stable/apm-server       2.1.7           7.0.0           DEPRECATED The server receives data from the El...

- 그리고 아래의 url에서 stable 리포지토리에 대한 자세한 정보를 확인할 수 있다.

helm repo add stable https://charts.helm.sh/stable

5. 외부 chart 설치 (WordPress)

- 위에서 조회한 stable 레포지토리에 있는 WordPress를 설치해 보자.

로컬 디렉터리에 chart가 존재하지 않더라도 원격 리포지토리에 있는 chart 리소스를 바로 설치하여 서비스할 수 있다.

여기서 설치할 때 몇 가지 옵셥을 설정할 수 있는데 간단하게 옵션 정보는 아래와 같다. (물론 적용할 수 있는 명령어는 다수가 존재한다.)

--version: chart의 버전을 지정한다. (Chart.yaml 안에 version 정보를 참조한다.)

--set: 해당 옵션으로 values.yaml 값을 동적으로 설정할 수 있다.

--namespace: chart가 설치될 네임스페이스를 지정한다.

- helm의 주요 옵션은 아래의 url을 참조한다.

https://helm.sh/ko/docs/helm/helm/

 

helm

헬름 - 쿠버네티스 패키지 매니저

helm.sh

- 위에서 --namespace 옵션을 확인하였는데 해당 옵션은 Helm Plugin Install 항목에서 확인할 수 있다.

https://helm.sh/ko/docs/helm/helm_plugin_install/

 

Helm Plugin Install

헬름 - 쿠버네티스 패키지 매니저

helm.sh

- 자 이제 WordPress를 설치해 보자.

# 워드프레스 버전 조회
$ helm search repo stable/wordpress
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                                       
stable/wordpress        9.0.3           5.3.2           DEPRECATED Web publishing platform for building...

# 워드프레스 설치
$ helm install wp stable/wordpress \
        --version 9.0.3 \
        --set service.port=8080 \
        --namespace default

- 설치가 완료되면 아래와 같은 정보를 보여준다.

WARNING: This chart is deprecated
NAME: wp
LAST DEPLOYED: Tue Feb 21 04:05:49 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
This Helm chart is deprecated

Given the `stable` deprecation timeline (https://github.com/helm/charts#deprecation-timeline), the Bitnami maintained Helm chart is now located at bitnami/charts (https://github.com/bitnami/charts/).

The Bitnami repository is already included in the Hubs and we will continue providing the same cadence of updates, support, etc that we've been keeping here these years. Installation instructions are very similar, just adding the _bitnami_ repo and using it during the installation (`bitnami/<chart>` instead of `stable/<chart>`)

```bash
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/<chart>           # Helm 3
$ helm install --name my-release bitnami/<chart>    # Helm 2
```

To update an exisiting _stable_ deployment with a chart hosted in the bitnami repository you can execute

```bash
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm upgrade my-release bitnami/<chart>
```

Issues and PRs related to the chart itself will be redirected to `bitnami/charts` GitHub repository. In the same way, we'll be happy to answer questions related to this migration process in this issue (https://github.com/helm/charts/issues/20969) created as a common place for discussion.

** Please be patient while the chart is being deployed **

To access your WordPress site from outside the cluster follow the steps below:

1. Get the WordPress URL by running these commands:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace default -w wp-wordpress'

   export SERVICE_IP=$(kubectl get svc --namespace default wp-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
   echo "WordPress URL: http://$SERVICE_IP:8080/"
   echo "WordPress Admin URL: http://$SERVICE_IP:8080/admin"

2. Open a browser and access WordPress using the obtained URL.

3. Login with the following credentials below to see your blog:

  echo Username: user
  echo Password: $(kubectl get secret --namespace default wp-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)

- helm으로 설치된 WordPress의 pod와 service를 조회해 보자. (pending 상태로 되어 있는 건 트러블 슈팅 해야 함.)

- 워드프레스를 설치한 것과 같이 로컬에 어떠한 리소스가 없어도 helm install 명령 하나로 워드프레스 사이트를 순식간에 생성할 수 있다.

$ kubectl get pod

NAMESPACE      NAME                                            READY   STATUS    RESTARTS   AGE
default        wp-mariadb-0                                    0/1     Pending   0          12s
default        wp-wordpress-57d549449-jq585                    0/1     Pending   0          12s

$ kubectl get svc

NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                        AGE
wp-mariadb     ClusterIP      10.103.146.20   <none>        3306/TCP                       78s
wp-wordpress   LoadBalancer   10.105.115.76   <pending>     8080:30355/TCP,443:30012/TCP   78s

6. chart fetch

- chart를 원격 리포지토리에서 바로 설치할 수 도 있지만 로컬 디렉토리로 다운로드해서 설치할 수도 있다. 사용자가 세부적으로 설정값들을 변경한 후에 애플리케이션을 설치하고 싶을 경우 fetch를 사용한다. 우선 fetch 명령을 이용하여 chart를 로컬에 다운로드한다. chart는  기본적으로 tar에 압축된 상태로 저장된다. --untart 옵셥을 사용하여 해당 파일을 압축이 풀어진 상태로 저장할 수 있다.

$ helm fetch --untar stable/wordpress --version 9.0.3
$ ls wordpress/
$ helm install wp-fetch ./wordpress

helm 패키지 매니저는 쿠버네티스를 사용하는데 있어서 강력함을 더해주는 툴이다. 쿠버네티스의 기능을 풍성하게 만들어주고 복합한 애플리케이션 또한 손쉽게 구축할 수 있도록 도와준다.

7. helm 리소스 삭제

- 기본 명령어는 아래와 같다.

/helm-test-seung $ helm delete wp-fetch
release "wp-fetch" uninstalled

- pvc도 깔끔하게 지워준다.

kubectl get pvc -A

8. helm Repositroy 삭제

$ helm repo remove bitnami

Usage:
  helm repo [command]

Available Commands:
  add         add a chart repository
  index       generate an index file given a directory containing packaged charts
  list        list chart repositories
  remove      remove one or more chart repositories
  update      update information of available charts locally from chart repositories

Flags:
  -h, --help   help for repo

Global Flags:
      --burst-limit int                 client-side default throttling limit (default 100)
      --debug                           enable verbose output
      --kube-apiserver string           the address and the port for the Kubernetes API server
      --kube-as-group stringArray       group to impersonate for the operation, this flag can be repeated to specify multiple groups.
      --kube-as-user string             username to impersonate for the operation
      --kube-ca-file string             the certificate authority file for the Kubernetes API server connection
      --kube-context string             name of the kubeconfig context to use
      --kube-insecure-skip-tls-verify   if true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure
      --kube-tls-server-name string     server name to use for Kubernetes API server certificate validation. If it is not provided, the hostname used to contact the server is used
      --kube-token string               bearer token used for authentication
      --kubeconfig string               path to the kubeconfig file
  -n, --namespace string                namespace scope for this request
      --registry-config string          path to the registry config file (default "/home/ubuntu/.config/helm/registry/config.json")
      --repository-cache string         path to the file containing cached repository indexes (default "/home/ubuntu/.cache/helm/repository")
      --repository-config string        path to the file containing repository names and URLs (default "/home/ubuntu/.config/helm/repositories.yaml")
728x90
반응형