์ Helm ์ ์ฌ์ฉํ๋์?
Helm ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ธฐ ์ ์ ์ ํ์ํ์ง ๋จผ์ ์์๋ณด์ฃ ! ๐ง
Consistency
์ฟ ๋ฒ๋คํฐ์ค์ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด ์๋ ์ด๋ฏธ์ง์ฒ๋ผ yaml ๋ก ์์ฑํด์ฃผ์ด์ผํฉ๋๋ค.
yaml ์ด 1,2 ๊ฐ๋ผ๋ฉด ๊ด๋ฆฌ๊ฐ ์ด๋ ต์ง ์๊ฒ ์ง๋ง 10๊ฐ ์ ๋๋ง ๋๋ ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋งค์ฐ ํ๋ค๊ณ ๋ถํธํด์ง๋๋ค.
๋ํ kubectl edit์ ํตํด ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธ ํด์ค ์ ์๋๋ฐ, ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๊ด๋ฆฌ๋ฅผ ํ๊ฒ ๋๋ค๋ฉด ์ผ๊ด์ฑ(Consistency) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Revision History
์ด๋ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด Deploy, ConfigMap, Service, Ingress yaml ๋ก ๋ฐฐํฌ๋๋ค๊ณ ๊ฐ์ ํด๋ณด์ฃ .
์ด๋ ConfigMap ๊ณผ Service ๊ฐ ์ ๋ฐ์ดํธ ๋์ด์ yaml ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.
ํ์ง๋ง ์ ๋ฐ์ดํธ ๊ฒฐ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ํ์ง ์์ ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ์ผ๋ก ํ๊ณ ์ถ์๋ฐ, yaml ๋ก๋ง ๊ตฌ์ฑ๋์ด์๋ค๋ฉด ๋กค๋ฐฑํ๋ ์์ ์ด ๊ฒฐ์ฝ ์ฌ์ด ์์ ์ ์๋๊ฒ๋๋ค.
CNCF - Graduated
CNCF ๋ Cloud Native Computing Foundation ์ ์ฝ์๋ก, ์ฌ๋ฌ ํ์ฌ๋ค์ด ๋ชจ์ฌ ์๋ก ์นํ์ ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ทธ๋ฃน์ ๋๋ค. ๋ํ์ ์ธ ํ์ฌ๊ฐ ๊ตฌ๊ธ์ด๋ฉฐ, ์ฟ ๋ฒ๋คํฐ์ค ๋ํ CNCF ํ๋ก์ ํธ ์ค ์ผ๋ถ์ฃ .
Helm ๋ํ CNCF ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ์ฟ ๋ฒ๋คํฐ์ค์ ๊ต์ฅํ ์นํ์ ์ ๋๋ค.
์ฌ๋ด์ผ๋ก LogStash ๋์ ์์ฆ FluentBit ์ ๋ ๋ง์ด ์ฌ์ฉํ๋ ์ด์ ๊ฐ FluentBit ์ CNCF ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ด์ฃ
์ด์ธ ๋ ๋ง์ ์ด์ ๊ฐ ์๊ฒ ์ง๋ง ํฌ๊ฒ ์ 3๊ฐ์ง ์ด์ ๋ง์ผ๋ก๋ Helm ์ ์ถฉ๋ถํ ๋งค๋ ฅ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ผ Helm ์ด ๋ฌด์์ด์ฃ ?
Helm ์ ๋ค๋ฅธ ํจํค์ง ๋งค๋์ ์ ๋ค๋ฅผ๊ฒ ์์ต๋๋ค.
์ฐ๋ถํฌ ํ๊ฒฝ์์ apt ๋ฅผ ์ด์ฉํด ํจํค์ง๋ฅผ ๊ด๋ฆฌํ ์ ์๊ณ , CentOS ๋ yum, ์๋ฐ์คํฌ๋ฆฝํธ๋ npm ์ ํตํด ํจํค์ง๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ฒ๋ผ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์ helm ์ ํตํด ํจํค์ง๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
helm ๋ช ๋ น์ด๋ฅผ ํตํด ํจํค์ง๋ฅผ ์ค์นํ๊ณ , ๋กค๋ฐฑํ๊ณ ์ญ์ ํ ์ ์์ต๋๋ค.
Helm ์ ํตํด ์ป์ ์ ์๋ ์ฅ์ ์ ๋ญ๊ฐ ์์๊น์?
Helm ์ ์ฅ์ ์ 7๊ฐ์ง๋ก ๋งํ ์ ์์ต๋๋ค.
- Simple
- Revision History
- Dynamic Configuration
- Consistency
- Intelligent Deploy
- Life Cycle Hooks
- Security
ํ๋ํ๋์ฉ ์์๋ณด์ฃ !
Simple
Helm ์ด ์๋ค๋ฉด MongDB ๋ฅผ ์ค์นํ ๋๋ง๋ค ๊ด๋ จ yaml ์ ํ๋ํ๋ kube-apiserver ์ ์ ๋ฌํด์ฃผ์ด์ผ ํฉ๋๋ค.
ํ์ง๋ง Helm ์ ์ด์ฉํ์ฌ ์ฐจํธ๋ก ๊ตฌ์ฑํ๋ค๋ฉด ์์ฃผ ์ฝ๊ฒ ์ค์น๊ฐ ๊ฐ๋ฅํ์ฃ !
Revision History
Helm ์ install ์ด๋ upgrade ํ ๋๋ง๋ค ๋ฒ์ ์ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค.
Dynamic Configuration
Helm ์ value ๋ก ์์ํ๋ yaml ์ ์๋ ๋งค๊ฐ๋ณ์๋ค์ ์ฌ์ฉํฉ๋๋ค. ๋๋ฌธ์ values-dev.yaml values-staging.yaml ๋ก ๋๋์ด ๋์ ์ผ๋ก ๋งค๊ฐ๋ณ์ ์ ๋ฌ์ด ๊ฐ๋ฅํ์ฃ !
Consistency
ํญ์ ํด๋ฌ์คํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
Intelligent Deploy
Helm ์ ํตํด yaml ๋ฅผ ๋ฐฐํฌํ ๋ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
ConfigMap.yaml ์ ๋ฐฐํฌํ๊ณ deployment.yaml ๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ฒ๋ผ ๋ง์ด์ฃ .
ํ์ง๋ง Helm ์ ๋๋ํ๊ธฐ ๋๋ฌธ์ ๋ณธ์ธ์ด ์์์ ๋ฐฐํฌํฉ๋๋ค.
Life Cycle Hooks
๋ค์ํ Helm ๋ช ๋ น์ด๋ฅผ ํตํด ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Security
Helm ์ฐจํธ๋ ์ค์ ์๋ฒ์์ ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ ์ ์๋ช ๋ฐฉ์์ผ๋ก ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
Install
brew ๋ฅผ ํตํด ์์ฃผ ์ฝ๊ฒ helm ์ ์ค์นํ ์ ์์ต๋๋ค.
$ brew install helm
helm ์ ์ฟ ๋ฒ๋คํฐ์ค ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๊ฐ์ฅ ๋จผ์ ํ๊ฒฝ ๋ณ์ KUBECONFIG ๋ฅผ ์ฐพ์ผ๋ ค ํ๊ณ , ๋ง์ฝ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ~/.kube/config ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ฆ, kubectl ๋ฅผ ์ฌ์ฉํ๋ ํธ์คํธ์์ helm ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. Helm ์ด ์์์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ฐพ์์ค๋๋ค!
๋ ๋ค์ํ ํ๊ฒฝ์์ ์ค์นํ๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์
Getting Started
๊ฐ๋จํ๊ฒ Chart ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ง์ ๋ง๋ Chart ๋ฅผ Helm Chart Repo ๋ฑ๋ก ํ ํ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์ ์ค์นํด๋ณด์ฃ !
Chart ์ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
apps ๋ผ๋ Main Chart ๊ฐ ์๊ณ , ์์ firstapp ๊ณผ secondapp ์ด๋ผ๋ Sub Chart ๊ฐ ์๋ ๊ตฌ์กฐ์ ๋๋ค.
Main Chart ์ Sub Chart ๊ฐ ์กด์ฌํ๋ ๊ฒ์ Helm ์์ Umbrella ์ฐจํธ๋ผ๊ณ ํฉ๋๋ค.
Main Chart ๋ apps ๋ฅผ ์์ฑํฉ๋๋ค.
$ helm create apps
apps ๋ผ๋ Main Chart ๊ฐ ์์ฑ๋์์ต๋๋ค.
Chart.yaml # ์ฐจํธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง YAML ํ์ผ
README.md # ์ต์
: README ํ์ผ
values.yaml # ์ฐจํธ์ ๋ํ ๊ธฐ๋ณธ ํ๊ฒฝ์ค์ ๊ฐ๋ค
charts/ # ์ด ์ฐจํธ์ ์ข
์๋ ์ฐจํธ๋ค์ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ
templates/ # values์ ๊ฒฐํฉ๋ ๋, ์ ํจํ ์ฟ ๋ฒ๋คํฐ์ค manifest ํ์ผ๋ค์ด ์์ฑ๋ ํ
ํ๋ฆฟ๋ค์ ๋๋ ํฐ๋ฆฌ
templates/NOTES.txt # ์ต์
: ๊ฐ๋จํ ์ฌ์ฉ๋ฒ์ ํฌํจํ๋ ํ
์คํธ ํ์ผ
Sub Chart ๋ charts ๋ผ๋ ๋๋ ํฐ๋ฆฌ ๋ฐ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
$ cd ./charts
$ helm create firstapp
$ helm create secondapp
firstapp ๊ณผ secondapp ์ด๋ผ๋ Sub Chart ๊ฐ ์์ฑ๋์์ต๋๋ค.
์ดํ Main Chart ์ Sub Chart ๋ฅผ ์ข ์์์ผ์ค์๋ค!
Main Chart ์ ์๋ Chart.yaml ์ ์ผ์ค๋๋ค.
$ vi Chart.yaml
์ดํ ์๋์ ๊ฐ์ด ์์ฑํฉ๋๋ค.
apiVersion: v2
name: apps
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
# firstapp ๊ณผ secondapp ์ ์ข
์์์ผ์ค๋๋ค
dependencies:
- name: firstapp
version: 0.1.0
repository: "file://../charts/firstapp"
- name: secondapp
version: 0.1.0
repository: "file://../charts/secondapp"
๊ทธ๋ฌ๋ฉด ์ด์ Helm Chart ์ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
# ./ ๋ apps ์์น์
๋๋ค
$ helm template ./
# ์ค์ ๋ก ์ด๋ป๊ฒ Helm Chart ๊ฐ ๋ฐฐํฌ๋ ๊ฒ์ธ์ง ์์ธกํ ์ ์์ต๋๋ค
# template ๊ฐ ๋ฌธ์ ์์ด ์ถ๋ ฅ๋์๋ค๊ณ ํด์ ์ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์ ์ ๋์ํ๋์ง ๋ณด์ฅํ ์ ์์ต๋๋ค
$ helm lint ./
# chart ์ ๋ฌธ๋ฒ์ ๊ฒ์ฌํฉ๋๋ค
# ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์๋์ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค
#==> Linting ./
#[INFO] Chart.yaml: icon is recommended
#1 chart(s) linted, 0 chart(s) failed
Chart ์ ๋ฌธ์ ๊ฐ ์์ด๋ณด์ด๋ ํ๋ฒ install ํด๋ณผ๊น์?
$ helm install apps ./
# helm install <์์ฑํ Chart ์ด๋ฆ> <Chart ์์น>
์ฑ๊ณต์ ์ผ๋ก Chart ๋ฅผ ์ค์นํ๊ธฐ ๋๋ฌธ์ ์๋์ฒ๋ผ NOTES.txt ์ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
NAME: apps
LAST DEPLOYED: Wed Dec 21 22:07:30 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=apps,app.kubernetes.io/instance=apps" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit <http://127.0.0.1:8080> to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์ถ๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
$ helm ls
#NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
#apps default 1 2022-12-21 22:07:30.146251 +0900 KST deployed apps-0.1.0 1.16.0
$ kubectl get pods
#NAME READY STATUS RESTARTS AGE
#apps-7d9c49f99d-zx59c 1/1 Running 0 2m8s
#apps-firstapp-7d9bc9d5b-prdpj 1/1 Running 0 2m8s
#apps-secondapp-76f48d5b64-p2zkn 1/1 Running 0 2m8s
๊ทธ๋ผ ์ด๋ฒ์ ๋ก์ปฌ์ด ์๋ Helm Chart Repo ๋ฅผ ํตํด์ ์ค์นํด๋ณด์ฃ !
๋ก์ปฌ์์ ์ค์นํ Chart ๋ฅผ ์ฐ์ ์ญ์ ํฉ๋๋ค.
$ helm uninstall apps
Helm Chart Repo ๋ GitHub, S3, Nexus ๋ฑ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฌ๊ธฐ์ GitHub ์ ํตํด์ ์งํํ๊ฒ ์ต๋๋ค.
GitHub ์์ Helm Chart ์ฉ Repo ๋ฅผ ์์ฑํฉ๋๋ค.
apps ๋ผ๋ Main Chart ๋ฅผ ํจํค์ง ํฉ๋๋ค.
$ helm package apps
#Successfully packaged chart and saved it to: /helm-playground/apps-0.1.0.tgz
๊ทธ๋ฌ๋ฉด apps-0.1.0.tgz ๋ผ๋ ์์ถํ์ผ์ด ์์ฑ๋๋๋ฐ tgz ๋ index.yaml ์ด๋ผ๋ ํ์ผ์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
์๋ ๋ช ๋ น์ด๋ฅผ ์ํํ์ฌ index.yaml ์ ์์ฑํฉ๋๋ค.
$ helm repo index ./
์๋์ผ๋ก ์์ฑ๋ index.yaml ์ ์๋์ ๊ฐ์ต๋๋ค.
apiVersion: v1
entries:
apps:
- apiVersion: v2
appVersion: 1.16.0
created: "2022-12-21T22:19:30.987083+09:00"
dependencies:
- name: firstapp
repository: file://../charts/firstapp
version: 0.1.0
- name: secondapp
repository: file://../charts/secondapp
version: 0.1.0
description: A Helm chart for Kubernetes
digest: c5fd3210cacdbd7f28eecd319aa47a939dc82b29f96b45ff052b04e06a80b565
name: apps
type: application
urls:
- apps-0.1.0.tgz
version: 0.1.0
generated: "2022-12-21T22:19:30.985545+09:00"
๊ทธ๋ฌ๋ฉด ์ด์ ์์ฑํ tgz ์ index.yaml ์ Github ์ ์ฌ๋ ค์ค๋๋ค.
$ git add .
$ git commit -m "Fix: upload chart"
$ git push origin main
์ฑ๊ณต์ ์ผ๋ก ์ฌ๋ผ๊ฐ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Helm Chart Repo ๋ index.yaml ๊ธฐ๋ฐ์ผ๋ก ๋์์ ํ๊ฒ ๋ฉ๋๋ค. index.yaml ๋ก ์ด๋ํ ํ Raw ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ด ์ด๋์ด ๋๊ณ , URL ๋ฅผ ๋ณต์ฌํด์ค๋๋ค.
๋ค์ index.yaml ๋ง ์ง์์ฃผ๊ณ , repo ๋ก ๋ฑ๋กํด์ค๋๋ค. ๊ทธ ํ ๋ฑ๋ก์ด ์๋์๋ ์ง ํ์ธํด์ค๋๋ค.
$ helm search repo helm-chart-repo
#NAME CHART VERSION APP VERSION DESCRIPTION
#helm-chart-repo/apps 0.1.0 1.16.0 A Helm chart for Kubernetes
$ helm repo add helm-chart-repo <https://raw.githubusercontent.com/kingbj940429/helm-chart-repo/main>
$ helm repo ls
#NAME URL
#helm-chart-repo <https://raw.githubusercontent.com/kingbj940429/helm-chart-repo/main>
์ฑ๊ณต์ ์ผ๋ก ์ ๋ฑ๋ก๋์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ค์นํด๋ณด์ฃ !
$ helm install apps helm-chart-repo/apps
# helm install <์ค์นํ chart name> <helm repo name>/<chart name>
apps ๋ helm ls ํ์ ๋ ํ์๋ ์ด๋ฆ์ด๊ณ , helm repo name ์ helm repo add helm-chart-repo ์ ์ผ์นํ๊ณ , chart name ์ helm repo ์ ์กด์ฌํ๋ chart ์ ์ด๋ฆ์ ๋๋ค.
์ค์ ๋ก ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐฐํฌ๋์๋ ์ง ํ์ธํฉ๋๋ค.
$ kubectl get pods
#NAME READY STATUS RESTARTS AGE
#apps-696bf7b659-dbkfg 1/1 Running 0 3m10s
#apps-firstapp-68bb56df87-jtjjv 1/1 Running 0 3m10s
#apps-secondapp-687bcbccbf-thq6t 1/1 Running 0 3m10s
๋ชจ๋ ๊ฒ์ด ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
์ดํ chart ์ repo ๋ฅผ ์ญ์ ํฉ๋๋ค.
$ helm uninstall apps
$ helm repo remove helm-chart-repo
๋ง๋ฌด๋ฆฌ
๊ฐ๋จํ Helm ์ด ๋ฌด์์ด๊ณ , ์ ํ์ํ์ง๋ฅผ ์์๋ณด์๊ณ , Helm Repo ๋ฅผ ๋ง๋ค๊ณ ๋ฐฐํฌ๊น์ง ํด๋ณด์์ต๋๋ค.
์ฌ๊ธฐ์๋ ์์๋ณด์ง ์์์ง๋ง Chart Template ๋ฌธ๋ฒ, Security, Startets, Plugins ๋ฑ ๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ์๋๋ฐ ์ด ๋ถ๋ถ์ ๋ค์์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค ๐
'๊ฒํฅ๊ธฐ ์๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ฒํฅ๊ธฐ ์๋ฆฌ์ฆ] ๋ deploy ๋ง ์ ๊ฒฝ์จ, ์ํฌ๋ฆฟ์ ๋ด๊ฐ ๊ด๋ฆฌํ ๊ฒ! - Vault ํธ (0) | 2023.08.04 |
---|---|
[๊ฒํฅ๊ธฐ ์๋ฆฌ์ฆ] ๋ช ๋จ์ ์๋ค์, ๋ค์ด์ค์์ฃ ! - Iptables ํธ (0) | 2023.01.09 |