๐ ๋ชฉํ
- Kubernetes Cluster์ DB Pod๋ฅผ ๋์๋ณด์ !
- MySQL์ ์ฌ์ฉํ๋..
- SpringBoot์ ๋ฐฑ์๋์ ์ฐ๊ฒฐํ๊ธฐ ์ํด..
- ๋จผ์ ์ค๋น๋ฌผ !
- Deployment
- Secret
- Persistent Volume (PV)
- Persistent Volume Claim (PVC)
- ์ ๊ฒ๋ค์ด ์ ํ์ํ์ง๋ ์ง์ ๋งค๋ํ์คํธ ํ์ผ์ ์์ฑํ๋ฉด์ ์์๋ณด์
โช๏ธ DB Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: db-mysql
labels:
app: db-mysql
spec:
replicas: 1
selector:
matchLabels:
app: db-mysql
template:
metadata:
labels:
app: db-mysql
spec:
nodeName: cnp-node-w-1vmd
containers:
- name: db-mysql
image: mysql:8.0.31
env:
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
ports:
- containerPort: 3306
volumes:
- name: volume
persistentVolumeClaim:
claimName: mysql-pvc
- ๋จผ์ Deployment๋ฅผ ์ดํด๋ณด๋ฉด ํน๋ณํ ๋ด์ผ ํ ๋ ๊ฐ์ง๋ฅผ ํ์ธํด ๋ณผ ์ ์๋ค.
- spec.template.spec.containers.env
- spec.template.spec.volumes
1. spec.template.spec.containers.env (secret)
- spec.template.spec.containers.env์๋ mysql์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ๊ฒฝ ๋ณ์๋ก ๋ฃ์ด์ฃผ๋ ๋ถ๋ถ์ด๋ค.
- ๊ทธ๋ฌ๋ ์ด๋ฅผ github์ public repo์ push๋ฅผ ํ๊ฒ ๋๋ค๋ฉด ์น๋ช ์ ์ธ ๋ณด์ ์ด์๊ฐ ์๊ธธ ์ ์๋ค.
- ์ด๋ฌํ ์ด์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด k8s์๋ secret์ ์ง์ํ๋ค.
- MYSQL_ROOT_PASSWORD์ ๋ํ ๊ฐ์ mysql-password์ secret์์ password์ ๋ํ key ๊ฐ์ ๊ฐ์ ธ์ค๋ฉฐ ๋ณด์์ ํฅ์ํ๋ค.
2. spec.template.spec.volumes (PV / PVC)
- ์์ฑํ pod๋ด์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ์ธ์ ๋ ์ง k8s๋ด์ ํ๋๋ ์ฃฝ์ ์ ์๋ค๋ ์์คํ ์ค๊ณ์ DB ํ๋๊ฐ ์ข ๋ฃ๋๋ค๋ฉด ๊ด๋ จ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์์ด์ง ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ ๋ณ๊ฐ๋ก ๊ด๋ฆฌํ๋ PV ์คํ ๋ฆฌ์ง๋ฅผ ๋๋ฉฐ ํ๋์ ์ง์ ์ฐ๊ฒฐํ์ง ์๊ณ ํ๋์ PV ์ฌ์ด์ PVC๋ฅผ ๋์ด ์์ฒญ์ ์ค๊ฐ์์ ์ฒ๋ฆฌํ๋ค.
โช๏ธ DB Secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
username: *******
password: *******
root-password: *******
host: *******
- ๊ทธ๋ผ ์์์ ์ด์ฌํ ์๊ธฐํ๋ 1๋ฒ์ ๋ํ ์ํฌ๋ฆฟ์ ์์ฑํด๋ณด์
- ์ฌ๊ธฐ์ ์ค์ํ๊ฒ ๋ณผ ๊ฒ์ data.password !
- data ํ์์ ๋ฃ๊ณ ์ถ์ ๊ฐ์ key-value ์์ผ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค !
- ๊ทธ๋ฅ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ค๋ค ์ ์ผ๋ฉด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง no no..
- secret์๋ value ๊ฐ๋ค์ base64๋ก ์ธ์ฝ๋ฉํ ๊ฐ์ผ๋ก ๋ฃ์ด์ค์ผ ํ๋ค.
- ๊ทธ๋ผ ์ด๋ป๊ฒ base64๋ก ์ธ์ฝ๋ฉํด์?
- $ echo -n password | base64์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ์๋ฅผ ๋ค๋ฉด password๋ฅผ base64๋ก ์ธ์ฝ๋ฉํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ง๋ค.
- ๊ทผ๋ฐ ์ ๊น.. -n ์ต์ ์ ๋ญ์ฃ ?
- ๋ง์ฝ -n ์ต์ ์ ์ฃผ์ง ์๊ณ ์ธ์ฝ๋ฉ์ ํ๊ฒ ๋๋ค๋ฉด..
- $ echo password | base64
- ์กฐ๊ธ ๋ค๋ฅธ๋ฐ..?
- echo ๋ช ๋ น์ด๋ฅผ ์ํํ๋ฉด ์๋์ผ๋ก trailing newline์ ์ฝ์ ํ๋ค.
- ์์ ๊ฐ์ ์ด์ ๋ก -n ์ต์ ์ ์ฌ์ฉํด์ trailing newline์ ์์ค ํ์ ์ธ์ฝ๋ฉ์ ํด์ผ secret์์ ์ํ๋ ์ ์์ ์ธ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ์ป์ ์ ์๋ค.
- -n ์ต์ ์์ด ์ธ์ฝ๋ฉํ ๊ฐ์ผ๋ก ํค ๊ฐ์ ๋ถ์ฌํ๋ฉด mysql: unknown option ‘–”‘ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
- ๊ทธ๋ผ secret ์์ฑ!
- $ kubectl apply -f db-secret.yaml -n cucumovie-main
โช๏ธ PV.yaml / PVC.yaml
- PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pvc
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /volume/pv
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: name
operator: In
values:
- node
- PV์ path๋ฅผ ๋ ธ๋์ /volume/pv๋ก ์ง์ ํ ํ PV ์์ฑ !
- PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
storageClassName: local-storage
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteOnce
- PVC ์์ฑ !
- ์ด์ ๋ชจ๋ ์ค๋น๋ฅผ ๋ค ๋ง์ณค์ผ๋..
- Deployment ์์ฑ !
- ์์ฑ๋ DB Pod์ ์ ์
- ์ ์ํ Pod์์ mysql์ ๋ก๊ทธ์ธํ๊ณ ํ์ฌ ๊ณ์ ์ด ์ ๊ทผ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก ํ์ธ
- ์ ์์ ์ผ๋ก DB Pod๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค !
ref.
'Kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NKS] Ingress ์์ฑ (0) | 2022.11.13 |
---|---|
[NKS] NodePort / LoadBalancer ์๋น์ค ์์ฑ (0) | 2022.11.13 |
[NKS] Deployment ์์ฑ (0) | 2022.11.13 |
[Minikube] LoadBalancer Type ์๋น์ค ์์ฑ (0) | 2022.11.12 |
[Minikube] NodePort Type ์๋น์ค ์์ฑ (0) | 2022.11.12 |