๐Ÿฑโ€๐Ÿ‘ค์ฟ ๋ฒ„๋„คํ‹ฐ์Šค helm(ํ—ฌ๋ฆ„)

๊น€์„ฑ์ธยท2023๋…„ 10์›” 20์ผ
0

[DevOps] ๐ŸณDocker & Kubernetes

๋ชฉ๋ก ๋ณด๊ธฐ
43/62

๊ณต์‹๋ฌธ์„œ (๋ช…๋ น์–ด ์ง‘ํ•ฉ)

https://helm.sh/docs/intro/cheatsheet/

์„ค๋ช…

https://developer.ibm.com/blogs/kubernetes-helm-3/

ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ๋“ค์˜ ์ง‘ํ•ฉ(์ฐจํŠธ)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋„๊ตฌ

  • ์ฐจํŠธ์™€ ์ฐจํŠธ ์••์ถ•ํŒŒ์ผ(tgz)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
  • ์ฐจํŠธ ์ €์žฅ์†Œ์™€ ์—ฐ๊ฒฐํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์— ์ฐจํŠธ๋ฅผ ์„ค์น˜/์‚ญ์ œ ๊ฐ€๋Šฅ
  • ํ—ฌ๋ฆ„ ์ฐจํŠธ์˜ ๋ฐฐํฌ์ฃผ๊ธฐ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

๊ฐœ๋…

  • ์ฐจํŠธ(char): ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์‹คํ–‰ํ•  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋ณด ๋ฌถ์Œ
  • ์ปจํ”ผ๊ทธ(config): ํŒจํ‚ค์ง€ํ•œ ์ฐจํŠธ์— ๋„ฃ์–ด์„œ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์ด ์žˆ์Œ.
  • ๋ฆด๋ฆฌ์ฆˆ(release): ํŠน์ • ์ปจํ”ผ๊ทธ๋ฅผ ์ด์šฉํ•ด ์‹คํ–‰ ์ค‘์ธ ์ฐจํŠธ์˜ ์ธ์Šคํ„ด์Šค

ํ—ฌ๋ฆ„ ํด๋ผ์ด์–ธํŠธ

: ์ปค๋งจ๋“œ ๋ผ์ธ ์ธํ„ฐ ํŽ˜์ด์Šค

  • ๋กœ์ปฌ์„œ๋ฒ„์— ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜
  • ์ฐจํŠธ ์ €์žฅ์†Œ๋“ค๊ณผ ํด๋Ÿฌ์Šคํ„ฐ์— ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(ํ—ฌ๋ฆ„ ์ฐจํŠธ๋กœ ์‹คํ–‰) ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์š”์ฒญ์„ ํ•˜๋Š” ์—ญํ• 

ํ‹ธ๋Ÿฌ ์„œ๋ฒ„(Tiller Server)- Helm2

: ํ—ฌ๋ฆ„ ํด๋ผ์ด์–ธํŠธ์˜ ๋ช…๋ น์„ ๋ฐ›์•„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API์™€ ํ†ต์‹ 

  • ํ—ฌ๋ฆ„ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• 
  • ์ฐจํŠธ/๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๋งŒ๋“œ๋Š”๊ฒƒ, ์ฐจํŠธ์™€ ์„ค์ •์˜ ์กฐํ•ฉ, ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ฐจํŠธ์™€ ๋ฆด๋ฆฌ์ฆˆ์˜ ์„ค์น˜, ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹น.

ํ—ฌ๋ฆ„ 2์—๋Š” ํ‹ธ๋Ÿฌ์„œ๋ฒ„๊ฐ€ ์žˆ์ง€๋งŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ RBAD ๊ตฌ์กฐ ์ฒด๊ณ„์— ์–ด๊ธ‹๋‚˜์„œ ํ—ฌ๋ฆ„ 3์—์„œ๋Š” ํ‹ธ๋Ÿฌ์„œ๋ฒ„๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ , ๋„ค์ž„์„œ๋ฒ„๋ฅผ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผํ•จ. (์ฐจํŠธ ์„ค์น˜์‹œ)
-> ์ฐจํŠธ ์„ค์น˜ ์ •๋ณด : ์ฐจํŠธ๊ฐ€ ์„ค์น˜๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์‹œํฌ๋ฆฟ์— ์ €์žฅ๋จ. (Chart.yaml, Chart.lock)์— ํ†ตํ•ฉ

Helm ์„ค์น˜

https://helm.sh/docs/intro/install/

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

Helm chart ์ €์žฅ์†Œ ์ถ”๊ฐ€

https://helm.sh/docs/intro/quickstart/
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add <์ €์žฅ์†Œ๋ช…> https://charts.bitnami.com/bitnami

chart ํ™•์ธ

helm search repo bitnami
helm search repo <์ €์žฅ์†Œ๋ช…>

helm ์ €์žฅ์†Œ ์—…๋ฐ์ดํŠธ

helm repo update

namespace ์ƒ์„ฑ

kubectl create ns mysql

chart๋ฅผ ํ†ตํ•ด ์„ค์น˜

helm install mysql-from-chart bitnami/mysql -n mysql
helm install <์„ค์น˜ํ›„ ์‹คํ–‰ํ•  ๋ช…> bitnami/mysql -n mysql

์‹คํ–‰ํ•  ๋ช…์€ ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•จ

invalid release name, must match regex ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ and the length must not be longer than 53

mysql chart ์„ค์น˜ ํ›„ ์‹œํฌ๋ฆฟ ํ™•์ธ

Execute the following to get the administrator credentials:

  echo Username: root
  MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace mysql mysql-from-chart -o jsonpath="{.data.mysql-root-password}" | base64 -d)

To connect to your database:

  1. Run a pod that you can use as a client:

      kubectl run mysql-from-chart-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:8.0.34-debian-11-r75 --namespace mysql --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash

  2. To connect to primary service (read/write):

      mysql -h mysql-from-chart.mysql.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"

echo Username: root : username ์„ค์ •
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace mysql mysql-from-chart -o jsonpath="{.data.mysql-root-password}" | base64 -d) : ์ƒ์„ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ
-> echo $MYSQL_ROOT_PASSWORD

MySQL ์ ‘์†

kubectl -n <๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ช…> exec -it <ํŒŒ๋“œ๋ช…> -- mysql -u root -p

๋ฐฐํฌํ•œ ํ—ฌ๋ฆ„ ์ฐจํŠธ ํ™•์ธ

helm list -n <๋ฐฐํฌํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค>
helm status <๋ฐฐํฌํ•œ ์ฐจํŠธ๋ช…> -n <๋ฐฐํฌํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค>

๋ฐฐํฌํ•œ ํŒจํ‚ค์ง€ ์‚ญ์ œ

helm uninstall <๋ฐฐํฌ ์ฐจํŠธ๋ช…> -n <๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ช…>


์ƒˆ๋กœ์šด ์ฐจํŠธ ์ƒ์„ฑ/์‹คํ–‰

์ฐจํŠธ ๊ตฌ์กฐ

ํ—ฌ๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ์ฐจํŠธ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ํ•˜๋‚˜์— ํฌํ•จ๋œ ํŒŒ์ผ๋“ค์˜ ์ง‘ํ•ฉ

  • ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์„ ์ฐจํŠธ ์ด๋ฆ„์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ๊ทธ์•ˆ์— ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ ์ €์žฅ
mysql/
  ใ„ดcharts\
  ใ„ดtemplates\
  ใ„ดCahrt.yaml\
  ใ„ดLICENSE\
  ใ„ดREADME.md\
  ใ„ดvalues.yaml\
  ใ„ดtemplates/NOTES.txt\

๊ธฐ๋ณธ ๊ตฌ์กฐ ์ฐจํŠธ ์ƒ์„ฑ

helm create <chart์ด๋ฆ„> : ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋จ

๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ ํ™•์ธ

tree <chart ์ด๋ฆ„>

ํ—ฌ๋ฆ„ ์ฐจํŠธ ์ˆ˜์ •

helm fetch <๋ฐฐํฌํ•œ ์ฐจํŠธ> : ์ฐจํŠธ ์••์ถ•ํŒŒ์ผ(.tgz) ๋‹ค์šด

๋‚ด์šฉ ์ˆ˜์ • ํ›„ helm install <Chart.yaml๊ฒฝ๋กœ> --generate-name ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•œ ์ฐจํŠธ ํŒจํ‚ค์ง€ ๋ฐฐํฌ

ํ—ฌ๋ฆ„ ์ฐจํŠธ ๋ฐฐํฌ

helm lint <์ฐจํŠธ๋ช…(๋””๋ ‰ํ„ฐ๋ฆฌ๋ช…)>
-> ๋‹ค์Œ ์„ค์น˜ helm install <์ฐจํŠธ๋ช…>


์ฐจํŠธ ํŒจํ‚ค์ง• & Git ํ™œ์šฉ

  1. Git ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ก 
  2. ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ํŒจํ‚ค์ง€ ๋ฐฐํฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ์„ค์ •
  3. ์ฐจํŠธ ํŒจํ‚ค์ง€ ์ƒ์„ฑ helm create <ํŒจํ‚ค์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ช…>
  4. ์ฐจํŠธ ํŒจํ‚ค์ง• helm package <ํŒจํ‚ค์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ช…>
  5. ์ฐจํŠธ ๋ฆฌ์ŠคํŠธ ์ธ๋ฑ์Šค ์ƒ์„ฑ helm repo index./(๋‚ด๊ฐ€ ๋งŒ๋“  ํŒจํ‚ค์ง€ ์ฐจํŠธ ๋ฆฌ์ŠคํŠธ ๋ชฉ๋ก)
    5-1) ์ฐจํŠธ ํŒจํ‚ค์ง€ ์••์ถ•ํŒŒ์ผ ๋‚ด์— ์žˆ๋Š” Chart.yaml ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด
  6. git push

helm ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ์ €์žฅ์†Œ ํ™œ์šฉ

helm repo add https://raw.githubusercontent.com/๋ ˆํฌ์ง€ํ† ๋ฆฌ/index.yamlํŒŒ์ผ๋””๋ ‰ํ„ฐ๋ฆฌ/

  • ์ด์ œ helm install ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ฐจํŠธ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ

0๊ฐœ์˜ ๋Œ“๊ธ€