08B. Helm์ผ๋ก MySQL ์ค์นํ๊ธฐ
08B. Helm์ผ๋ก MySQL ์ค์นํ๊ธฐ ๊ด๋ จ
Helm์ ์ค์นํ์ผ๋ ์ด์ Helm์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ MySQL์ ์ค์นํด๋ณด๊ฒ ์ต๋๋ค. ์ฐธ๊ณ ๋ก Helm์ Minikube ํด๋ฌ์คํฐ๋ kubeadm, kOps๋ก ๋ง๋ ํด๋ฌ์คํฐ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์ฐธ๊ณ ๋ก Helm์์๋ ํจํค์ง๋ฅผ ์ฐจํธ(Chart)๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, Helm ๊ณต์ ์ ์ฅ์(๋ฆฌํฌ์งํ ๋ฆฌ)๋ ์ฐจํธ๋ค์ด ์ ์ง๋ณด์๊ฐ ๋์ง ์์์ง ์ค๋ ๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์๋ https://artifacthub.io/์ ์ฌ๋ผ์์๋ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ bitnami ์ ์ฅ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
helm repo add bitnami https://charts.bitnami.com/bitnami
์ด์ helm
๋ช
๋ น์ผ๋ก MySQL์ ์ค์นํด์ผ ํ๋๋ฐ helm
๋ช
๋ น์ ๊ธฐ๋ณธ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
helm install <๋ฆด๋ฆฌ์ค ์ด๋ฆ> <์ต์
> <์ ์ฅ์ ์ด๋ฆ>/<์ฐจํธ ์ด๋ฆ>`
์ฐ๋ฆฌ๊ฐ ์ค์นํ MySQL ์ฐจํธ๋ https://artifacthub.io/packages/helm/bitnami/mysql์
๋๋ค. ์ด ์ฐจํธ๋ฅผ helm install hello-mysql bitnami/mysql
๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ค์นํด๋ ๋์ง๋ง, ์ฌ๊ธฐ์๋ ๊ฐ์ข
์ค์ ๋ ์ถ๊ฐํด์ ์ค์นํด๋ณด๊ฒ ์ต๋๋ค. ๊ฐ ์ค์ ๊ฐ(Parameter)์ https://artifacthub.io/packages/helm/bitnami/mysql#parameters์ ์ ๋์์์ต๋๋ค.
helm install hello-mysql --set auth.rootPassword=hellopassword bitnami/mysql
#
# NAME: hello-mysql
# LAST DEPLOYED: Fri Dec 2 12:16:56 2022
# NAMESPACE: default
# STATUS: deployed
# REVISION: 1
# TEST SUITE: None
# NOTES:
# CHART NAME: mysql
# CHART VERSION: 9.4.4
# APP VERSION: 8.0.31
#
# ** Please be patient while the chart is being deployed **
#
# Tip:
#
# Watch the deployment status using the command: kubectl get pods -w --namespace default
#
# Services:
#
# echo Primary: hello-mysql.default.svc.cluster.local:3306
#
# Execute the following to get the administrator credentials:
#
# echo Username: root
# MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default hello-mysql -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 hello-mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.31-debian-11-r10 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
#
# 2. To connect to primary service (read/write):
#
# mysql -h hello-mysql.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
helm install hello-mysql --set auth.rootPassword=hellopassword bitnami/mysql
helm install
: Helm ์ค์น ๋ช ๋ น์ ๋๋ค.hello-mysql
: Helm ์ฐจํธ๋ฅผ ํด๋ฌ์คํฐ์ ์ค์นํ์ ๋ ๋ฆด๋ฆฌ์ค ์ด๋ฆ์ ๋๋ค. ์ดํ ์ด ์ด๋ฆ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค์ ์ค๋ธ์ ํธ๋ค์ด ์์ฑ๋ฉ๋๋ค.--set auth.rootPassword=hellopassword
: ๊ฐ์ข ์ค์ ๊ฐ์ ์ค์ ํ๋ ๋ถ๋ถ์ ๋๋ค.--set
๋ค์<ํค>=<๊ฐ>
ํ์์ผ๋ก ์ค์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ฌ๋ฌ ๊ฐ๋ฅผ ์ค์ ํ ๋๋<ํค>=<๊ฐ>,<ํค>=<๊ฐ>
์ ๊ฐ์ด ํค์ ๊ฐ์ ์ฝค๋ง(,)๋ก ๊ตฌ๋ถํด์ค๋๋ค. ์ฌ๊ธฐ์๋auth.rootPassword=hellopassword
์ ๊ฐ์ด root ํจ์ค์๋๋ฅผ ์ค์ ํ์์ต๋๋ค.bitnami/mysql
: ์ฐ๋ฆฌ๋bitnami
์ ์ฅ์๋ฅผ ์ถ๊ฐํ๊ณ ,mysql
์ฐจํธ๋ฅผ ์ค์นํ ๊ฒ์ด๋ฏ๋กbitnami/mysql
๋ก ์ ๋ ฅํด์ค๋๋ค.
MySQL ์ฐจํธ ์ค์น๊ฐ ๋๋ฌ์ผ๋, ์ค์น๋ ๋ฆด๋ฆฌ์ค ๋ชฉ๋ก์ ์ถ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค.
helm ls
#
# NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
# hello-mysql default 1 2022-12-02 12:16:56.8201411 +0900 KST deployed mysql-9.4.4 8.0.31
๋ฆด๋ฆฌ์ค ์ด๋ฆ์ผ๋ก hello-mysql
์ด ์ค์น๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด์ ์ค์น๋ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํด๋ณด๊ฒ ์ต๋๋ค. ์์ ๋์์๋ 1. Run a pod that you can use as a client:์์ $MYSQL_ROOT_PASSWORD
๋ถ๋ถ์ hellopassword
๋ก ๋ฐ๊พธ๊ณ , -p"$MYSQL_ROOT_PASSWORD"
๋ถ๋ถ์ -phellopassword
์ผ๋ก ๋ฐ๊ฟ์ ์คํํด๋ด
๋๋ค. ๊ทธ๋ฆฌ๊ณ show databases;
๋ช
๋ น์ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก์ ์ถ๋ ฅํด๋ด
๋๋ค.
kubectl run hello-mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.31-debian-11-r10 --namespace default --env MYSQL_ROOT_PASSWORD=hellopassword --command -- bash
#
# If you don't see a command prompt, try pressing enter.
# I have no name!@hello-mysql-client:/$ mysql -h hello-mysql.default.svc.cluster.local -uroot -phellopassword
# mysql: [Warning] Using a password on the command line interface can be insecure.
# Welcome to the MySQL monitor. Commands end with ; or \g.
# Your MySQL connection id is 6504
# Server version: 8.0.31 Source distribution
#
# Copyright (c) 2000, 2022, Oracle and/or its affiliates.
#
# Oracle is a registered trademark of Oracle Corporation and/or its
# affiliates. Other names may be trademarks of their respective
# owners.
#
# Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#
# mysql> show databases;
# +--------------------+
# | Database |
# +--------------------+
# | information_schema |
# | my_database |
# | mysql |
# | performance_schema |
# | sys |
# +--------------------+
# 5 rows in set (0.00 sec)
#
# mysql>
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก์ด ์ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. Ctrl+D๋ฅผ ๋ ๋ฒ ์ ๋ ฅํ์ฌ MySQL ํด๋ผ์ด์ธํธ์ ํ๋์์ ๋น ์ ธ๋์ต๋๋ค.
์ปจํ ์คํธ ์ ํ
Helm์ ํ์ฌ ์ปจํ
์คํธ์ ์ฐ๊ฒฐ๋ ํด๋ฌ์คํฐ์ ์ฐจํธ๋ฅผ ์ค์นํฉ๋๋ค. ๋จผ์ .kube/config
์ ์ ์ฅ๋ ์ปจํ
์คํธ ๋ชฉ๋ก์ ํ์ธํ๋ ๋ช
๋ น์ kubectl config get-contexts
์
๋๋ค.
kubectl config get-contexts
#
# CURRENT NAME CLUSTER AUTHINFO NAMESPACE
# * k8s.ap-northeast-2.aws.hello.com k8s.ap-northeast-2.aws.hello.com k8s.ap-northeast-2.aws.hello.com
# kubernetes-admin@kubernetes kubernetes kubernetes-admin
# minikube minikube minikube default
๋ง์ฝ minikube
์ปจํ
์คํธ๋ก ์ ํํ๊ณ ์ถ๋ค๋ฉด kubectl config use-context
๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค.
kubectl config use-context minikube
#
# Switched to context "minikube".
์ด๋ ๊ฒ ํ๋ฉด Minikube ํด๋ฌ์คํฐ์ Helm์ผ๋ก ์ฐจํธ๋ฅผ ์ค์นํ๊ฒ ๋ฉ๋๋ค.
๋ฆด๋ฆฌ์ค ์ญ์
์ค์น๋ ๋ฆด๋ฆฌ์ค๋ฅผ ์ญ์ ํ ๋๋ helm uninstall
๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค.
helm uninstall hello-mysql
#
# release "hello-mysql" uninstalled