Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Minikube 와 함께하는 Kubernetes Study 5 - Helm
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2023-03-09
2023-03-06
3749
## Helm [Minikube 와 함께하는 Kubernetes 목차](https://www.joinc.co.kr/w/kubernetes_minikube_index) Kubernetes Helm은 컨테이너화된 애플리케이션의 배포와 관리를 돕는 kubernetes용 **패키지관리자**다. 컨테이너 서비스는 다양한 버전의 애플리케이션들로 구성이 된다. Helm을 이용하여 복잡한 애플리케이션을 정의하고 설치 및 관리 할 수 있다. Helm은 Kubernetes 환경에서 작동하기 때문에 Deployments, Service, Ingress 와 같은 kubernetes 리소스를 사용하여 애플리케이션을 관리한다. **Helm chart**는 kubernetes 리소스와 응용 프로그램간의 종속성, 템플릿 및 다양한 메타정보를 관리하기 위한 패키지 정보를 담고 있는 파일이다. Helm chart는 팀과 조직 전체에서 공유 및 사용 할 수 있기 때문에 스테이징, 프로덕션, 개발 등 다양한 환경에서 쉽게 애플리케이션을 배포 할 수 있다. 또한 버전관리, 배포방식, 롤백 등의 기능도 가지고 있기 때문에 릴리즈를 쉽게 관리 할 수 있다. Helm Chart는 최소한 아래의 두 가지 요소가 필요하다. * chart.yml : 패키지에 대한 설명 * kubernetes 매니패스트 파일을 포함하는 하나 이상의 템플릿 ## 환경 이 문서는 리눅스 환경에서 minikube를 기준으로 작성했다. 아직 minikube를 설치하지 못했다면 [Minikube 와 함께하는 Kubernetes Study 1 - Minikube 설치](https://www.joinc.co.kr/w/man/12/kubernetes/minikube) 를 참고해서 설하자. ## Helm 설치 아래 명령을 이용해서 Helm v3.x 를 설치하자. ```shell $ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get-helm-3 > get_helm.sh $ chmod +x get_helm.sh $ ./get_helm.sh Downloading https://get.helm.sh/helm-v3.11.1-linux-amd64.tar.gz Verifying checksum... Done. Preparing to install helm into /usr/local/bin [sudo] xxxxxxxx 암호: helm installed into /usr/local/bin/helm ``` 설치한 helm 버전 정보를 확인해보자. ```shell $ helm version version.BuildInfo{Version:"v3.11.1", GitCommit:"293b50c65d4d56187cd4e2f390f0ada46b4c4737", GitTreeState:"clean", GoVersion:"go1.18.10"} ``` 그리고 helm을 실행하면 helm의 주요 명령어들을 확인 할 수 있다. ``` $ helm # 생략 Available Commands: completion generate autocompletion scripts for the specified shell create create a new chart with the given name dependency manage a chart's dependencies env helm client environment information get download extended information of a named release help Help about any command history fetch release history install install a chart lint examine a chart for possible issues list list releases package package a chart directory into a chart archive plugin install, list, or uninstall Helm plugins pull download a chart from a repository and (optionally) unpack it in local directory push push a chart to remote registry login to or logout from a registry repo add, list, remove, update, and index chart repositories rollback roll back a release to a previous revision search search for a keyword in charts show show information of a chart status display the status of the named release template locally render templates test run tests for a release uninstall uninstall a release upgrade upgrade a release verify verify that a chart at the given path has been signed and is valid version print the client version information # 생략 ``` ## Helm repository docker, deb와 같은 다른 모든 패키지 관리 시스템이 그렇듯이 helm로 **Helm 저장소(repository)** 를 등록해야 한다. 그리고 이미 수많은 Helm chart 들이 인터넷 상에 공개되어 있다. 그 중 bitnami 저장소를 등록해서 Helm Chart 기반으로 애플리케이션을 실행해보자. **repo add** 명령으로 저장소를 등록할 수 있다. ```shell helm repo add bitnami https://charts.bitnami.com/bitnami ``` **repo list** 명령으로 등록된 저장소 목록을 확인할 수 있다. ```shell $ helm repo list NAME URL bitnami https://charts.bitnami.com/bitnami ``` ## Helm chart 구성요소 Helm chart는 컨테이너 기반 애플리케이션을 설치하기 위한 정보를 담고 있는 **yaml** 형식의 문서로 크게 2개로 구성된다. ? **Chart.yaml** 파일은 Helm chart에 대한 설정정보와 메타데이터를 저장하고 있다. 여기에는 Helm chart의 이름, 버전, 설명, 라이센스 등 주요 정보들을 포함하고 있다. 아래는 bitnami의 wordpress chart의 Chart.yaml 파일이다. https://github.com/bitnami/charts/blob/main/bitnami/wordpress/Chart.yaml 에서 원본을 확인 할 수 있다. ```yaml annotations: category: CMS licenses: Apache-2.0 apiVersion: v2 appVersion: 6.1.1 dependencies: - condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.x.x - condition: mariadb.enabled name: mariadb repository: https://charts.bitnami.com/bitnami version: 11.x.x - name: common repository: https://charts.bitnami.com/bitnami tags: - bitnami-common version: 2.x.x description: WordPress is the world's most popular blogging and content management platform. Powerful yet simple, everyone from students to global corporations use it to build beautiful, functional websites. home: https://github.com/bitnami/charts/tree/main/bitnami/wordpress icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png keywords: - application - blog - cms - http - php - web - wordpress maintainers: - name: Bitnami url: https://github.com/bitnami/charts name: wordpress sources: - https://github.com/bitnami/containers/tree/main/bitnami/wordpress - https://wordpress.org/ version: 15.2.44 ``` 1. name : chart의 이름 2. version : Semantic Versioning(major.minor.patch) 형식의 chart 버전이다. 3. description : chart에 대한 간단한 설명 4. maintainers : chart 관리자 정보 5. keywords : chart를 설명하고 분류하기 위한 키워드의 목록 6. home : chart의 홈페이지 url 7. sources : chart의 소스코드가 저장된 URL ? **templates 파일** : Helm template는 helm chart의 애플리케이션을 구성하기 위한 템플릿정보를 담고 있는 YAML 형식의 매니패스트 파일이다. template에는 애플리케이션을 배포하는데 필요한 kubernetes 리소스 즉 Deployment, Service, Config map, Secret 에 대한 템플릿을 파일을 가지고 있으며, values.yaml 의 정보를 이용해서 kubernetes 매니패스트 파일을 완성한다. tempalate는 golang template 형식을 따른다. ? **values.yaml** : values.yaml 파일은 chart의 templates의 매개변수 및 설정에 대한 값을 저장하고 있다. Helm을 사용해서 chart를 설치하면 value.yaml 파일을 읽어서 template으로 부터 kubernetes 매니패스트를 만들어서 애플리케이션을 전개한다. kubernetes 애플리케이션 배포자는 values.yaml 파일을 수정해서 자신의 환경에 맞게 커스터마이징된 애플리케이션을 실행할 수 있다. ## Helm 애플리케이션 설치하기 Helm 개념을 이해했으니, Helm으로 애플리케이션을 실행해보자. **bitnami**는 다양한 플랫폼에 빠르고 편하게 배포할 수 있는 사전 설정된 소프트웨어 패키지를 제공하는 회사다. Docker, Kubernetes, VM 등에 설치할 수 있는 다양한 애플리케이션을 제공한다. bitnami helm chart에서 제공하고 있는 애플리케이션 목록은 https://bitnami.com/stacks/helm 에서 확인 할 수 있다.  bitnami에서 제공하는 애플리케이션 중, **워드프레스(wordpress)** 를 설치해보도록 하자. **install** 명령을 이용해서 chart를 설치 할 수 있다. ```shell helm install wordpress bitnami/wordpress ``` **install** 명령을 실행하면 helm은 template 파일과 values.yaml 정보를 이용해서 애플리케이션을 실행한다. 사용자가 values.yaml 을 지정하지 않으면 저장소에 있는 기본 values.yaml을 적용한다. 내 환경에 맞게 values.yaml 파일을 수정해서 wordpress를 커스터마이징 해보자. bitnami/wordpress의 value.chart를 [다운로드](https://github.com/bitnami/charts/blob/main/bitnami/wordpress/values.yaml) 해서 아래와 같이 수정했다. ```yaml ## @param wordpressUsername WordPress username ## 대략 102 번째 줄 wordpressUsername: user ## @param wordpressPassword WordPress user password ## Defaults to a random 10-character alphanumeric string if not set ## wordpressPassword: "1234" ## @param existingSecret Name of existing secret containing WordPress credentials ## NOTE: Must contain key `wordpress-password` ## NOTE: When it's set, the `wordpressPassword` parameter is ignored ## ## Persistence Parameters ## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/ ## 대략 702 번째 줄 persistence: ## @param persistence.enabled Enable persistence using Persistent Volume Claims ## enabled: false ## @param persistence.storageClass Persistent Volume storage class ## If defined, storageClassName: <storageClass> ## If set to "-", storageClassName: "", which disables dynamic provisioning ``` * wordpressUsername : wordpress admin user id * wordpressPassword : admin user에 대한 패스워드 * persistence : persistent volume. 원래는 true 이지만 false 로 변경했다. 수정한 values.yaml로 chart를 실행하기 전에 **uninstall** 명령으로기존 helm 애플리케이션을 삭제한다. ```shell helm uninstall wordpress ``` -f 옵션으로 수정한 values.yaml 파일을 지정하고 wordpress chart를 실행하자. ```shell helm install wordpress bitnami/wordpress -f ./values.yaml ``` **list** 명령으로 실행중인 chart 애플리케이션 목록을 확인할 수 있다. ```shell $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION wordpress default 1 2023-02-20 14:57:48.109830913 +0900 KST deployed wordpress-15.2.44 6.1.1 ``` **minikube tunnel** 명령으로 tunnel을 만들고, kubectl get svc 명령으로 service 정보를 확인해 보자. ```shell $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d wordpress LoadBalancer 10.102.43.10 10.102.43.10 80:30426/TCP,443:31862/TCP 2m34s wordpress-mariadb ClusterIP 10.98.6.246 <none> 3306/TCP 2m34s ``` **minikube service** 명령으로 wordpress service url을 읽어오자. ```shell $ minikube service wordpress |-----------|-----------|-------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|-----------|-------------|---------------------------| | default | wordpress | http/80 | http://192.168.49.2:30426 | | | | https/443 | http://192.168.49.2:31862 | |-----------|-----------|-------------|---------------------------| ``` 이제 브라우저를 이용해서 service URL(http://192.168.49.2:30426/wp-admin)로 테스트 하면 된다.  values.yaml에 설정했던 user/1234 로 로그인 하면 된다. ## Helm 기본 명령어 #### Helm 저장소 추가 ```shell helm repo add bitnami https://charts.bitnami.com/bitnami ``` #### Helm 저장소 목록 확인 ```shell $ helm repo list NAME URL bitnami https://charts.bitnami.com/bitnami ``` #### Helm chart 설치 ```shell helm install [RELEASE NAME] [CHART NAME] ``` example ```shell $ helm install phpmyadmin bitnami/phpmyadmin NAME: phpmyadmin LAST DEPLOYED: Mon Feb 20 15:44:00 2023 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: phpmyadmin CHART VERSION: 10.4.3 APP VERSION: 5.2.1 ``` Helm chart를 설치하면 새로운 Release 가 만들어진다. #### Release 목록 확인 ``` $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION phpmyadmin default 1 2023-02-20 15:44:00.522540581 +0900 KST deployed phpmyadmin-10.4.3 5.2.1 wordpress default 1 2023-02-20 14:57:48.109830913 +0900 KST deployed wordpress-15.2.44 6.1.1 ``` #### Release 삭제 ```shell $ helm unistall [RELEASE NAME] ``` #### chart 검색 **search [command] application-name** 으로 chart를 검색할 수 있다. command는 hub와 repo를 사용 할 수 있다. * hub : Artifact Hub 혹은 직접 구축한 hub에서 검색한다. Artifact Hub는 CNCF(Cloud Native Computing Foundation) 에서 호스팅하는 Public 저장소다. * repo : helm repo add를 사용해서 로컬에 추가된 저장소에서 검색한다. ## 참고 * [Using helm](https://helm.sh/ko/docs/intro/using_helm/)
Recent Posts
최신 경량 LLM Gemma 3 테스트
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
Archive Posts
Tags
cloud
kubernetes
minikube와 함께하는 kubernetes study
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags