์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ์ธํฐ๋ท #ํด๋ผ์ด์ธํธ #์๋ฒ #ํฌํธ #ipadress #domainname
- CKEditor4
- browserstorage
- vuejs #pinia #vuetify3
- mixedcontent
- sesstionstorage
- vue3
- postman
- vuejs
- PersistentVolumeClaim
- vuetify3
- nextjs
- ๋ผ์ฐํฐ #NAT #ํฌํธ #ํฌํธํฌ์๋ฉ #์ ๋๊ณ ์ ์์ดํผ #DHCP
- ๋งฅ #๋์ค #SMA
- JavaScript
- localstorage
- basepath
- Yarn
- javascript #์ปดํ์ผ #์ธํฐํ๋ฆฌํฐ
- MongoDB
- javascript #localstorage #stringify #parse
- v-combobox
- kubernetes
- react
- vworld
- github action #tistory
- OpenLayers
- MPA
- PersistentVolume
- vue #vue-router
- Today
- Total
ๆไบฎ
[Kubernetes] ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ MongoDB ๋ฐฐํฌํ๊ธฐ ๋ณธ๋ฌธ
[Kubernetes] ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ MongoDB ๋ฐฐํฌํ๊ธฐ
๋๋ค 2023. 8. 1. 10:37
๐พ ์ฝ๊ธฐ ์ ์
์ด ๊ธ์์๋ StatefulSet์ด ์๋ Deployment๋ฅผ ์ด์ฉํ์ฌ MongoDB๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ ์คํธํ๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ๋ฉฐ, ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ ์ ์์ต๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐ์ฉ MongoDB๋ฅผ ๋ฐฐํฌํ๋ ๊ณผ์ ์์ ํ์ํ ๋จ๊ณ๋ค์ ์ ๋ฆฌํ์์ต๋๋ค. ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋ฉ๋๋ค.
- PersistentVolume (PV) ๋ฐ PersistentVolumeClaim (PVC) ์์ฑ (https://yueliang-front-end.tistory.com/32)
- Secret ์์ฑ (MongoDB root ๊ณ์ ์์ฑ์ ์ํด ํ์)
- Deployment ๋ฐ Service ์์ฑ
- MongoDB ์ธ์คํด์ค ์ ์
STEP 2: Secret ์์ฑ
Secret์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ์ฌ์ฉํ๊ธฐ ์ํ ์ฟ ๋ฒ๋คํฐ์ค์ ์ค๋ธ์ ํธ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด kubectl create secret ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Secret์ ์์ฑํ ์ ์์ต๋๋ค.
kubectl create secret generic dev-secret \\
--from-literal=username=admin \\
--from-literal=password='S!B\\*d$zDsb='
๋๋ Secret ์ค๋ธ์ ํธ์ YAML ํ์ผ์ ์์ฑํ์ฌ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
apiVersion: v1
kind: Secret
metadata:
name: dev-secret
namespace: YOUR_NAMESPACE
type: Opaque
data:
mongodb-root-username: YOUR_BASE64_ENCODED_USERNAME
mongodb-root-password: YOUR_BASE64_ENCODED_PASSWORD
๊ณต์ : https://kubernetes.io/ko/docs/tasks/configmap-secret/managing-secret-using-kubectl/
STEP 3: Deployment ์์ฑ
MongoDB๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํ Deployment์ Service๋ฅผ ์์ฑํฉ๋๋ค.
โ ๏ธ ์ฃผ์ํด์ผ ํ ์ : Permission denied ๋ฌธ์
๋ณผ๋ฅจ์ ํ์ฉํ ๋ "Permission denied" ๋ฌธ์ ๋ฅผ ๊ฒฝํํ๋ค๋ฉด spec.securityContext ๋ฐ spec.container.securityContext ์ค์ ์ ํ์ธํด์ผ ํฉ๋๋ค. ์ด ์ค์ ๋ค์ ํ๋๊ฐ ๋ณผ๋ฅจ์ ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ๊ถํ์ ๊ฐ๋๋ก ๋์ต๋๋ค. ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ค๋ฉด, ํด๋น ๋ณผ๋ฅจ์ ์ฌ์ฉ์ ID์ ๊ทธ๋ฃน ID๋ฅผ ์์์ผ ํฉ๋๋ค. ์ด ์ ๋ณด๋ ๋ณผ๋ฅจ ๋ด๋ถ์ ์ ๊ทผํ์ฌ ํ์ธํด์ผ ํฉ๋๋ค. MongoDB์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ ๋, ์ด๋ฌํ ๊ถํ ์ค์ ์ ์ค์ํฉ๋๋ค. ๋ณผ๋ฅจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ , ๋ฐ์ดํฐ, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ค์ํ ๋ฆฌ์์ค๋ค์ ์ ์ฅํ๊ณ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฏ๋ก, ์ ์ ํ ๊ถํ ์์ด๋ ๋ณผ๋ฅจ์ ์์ฑ๊ณผ ์ฌ์ฉ์ด ์ ํ๋ ์ ์์ต๋๋ค.
๋ํ, initContainers ์ค์ ์๋ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค. ๋ณผ๋ฅจ์ ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ ์ปจํ ์ด๋๊ฐ ์์ฑ๋ ํ๊ฐ ์๋๋ผ, ์ปจํ ์ด๋ ์์ฑ์ ์์ํ๊ธฐ ์ ์ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค. ์ด๋ initContainers ์ค์ ๋ด์์ ์ํ๋ฉ๋๋ค. ์ฆ, **initContainers**๋ ์ปจํ ์ด๋๊ฐ ์์ฑ๋๊ธฐ ์ ์ ํ์ํ ๊ถํ ์ค์ ์์ ์ ์ํํ๋ ์ค์ํ ๋จ๊ณ์ ๋๋ค.
์ด์ด์, ์๋๋ ์์ YAML ํ์ผ์ ๋๋ค.
+ NodePort: 27017 (mongodb ๊ธฐ๋ณธํฌํธ๋กํจ ๋ฐ๊ฟ๋ ์๊ด์์,์ธ๋ถ์ ์์ ์ํด NodePort๋ก)
+ mountPath: /data/db (mongo-db๊ธฐ๋ณธ ๋ฃจํธ ๋ณ๊ฒฝ๊ฐ๋ฅํ์ง ์์! ๋ฐ๋์ ๋๊ฐ์ด ์์ฑ)
+ image: mongo:4.4.18 (VM์์ ์์ฑํด์ 4๋ฒ์ ์ผ๋ก ์งํํ๋ค. VM์์๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์๋ตํ๊ณ ํ๊ทธ๋๊ณ mongo๋ก ์์ฑํด๋ ์๊ด์์)
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
namespace: test
labels:
app: mongodb
spec:
ports:
- port: 27017
NodePort: 27017
selector:
app: mongodb
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
namespace: test
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
securityContext:
fsGroup: YOUR_VOLUME_GROUP_ID
containers:
- name: mongodb
image: mongo:4.4.18
imagePullPolicy: IfNotPresent
securityContext:
runAsUser: YOUR_VOLUME_USER_ID
runAsGroup: YOUR_VOLUME_GROUP_ID
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: dev-secret
key: mongodb-root-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: dev-secret
key: mongodb-root-password
volumeMounts:
- name: mongodb-data
mountPath: /data/db
resources:
requests:
cpu: 500m
memory: 100Mi
initContainers:
- name: init-chown-data
image: busybox:1.31.1
command:
- chmod
- '777'
- /data/db
volumeMounts:
- name: mongodb-data
mountPath: /data/db
volumes:
- name: mongodb-data
persistentVolumeClaim:
claimName: mongodb-dev-pvc
STEP 4: MongoDB ์ ์
MongoDB ์ธ์คํด์ค์ ์ ์ํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
// Mongo Shell๋ก ์ ์
mongo
// Admin ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ด๋
use admin
// ์ฟ ๋ฒ๋คํฐ์ค์์ ์ค์ ํ ์ด๊ธฐ ID, PW๋ก ์ธ์ฆ
db.auth('YOUR_ID', 'YOUR_PASSWORD')
// ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณ์ ๋ง๋ค์ด์ ์ฐ๊ฒฐ
use YOUR_NEW_DATABASE_NAME
// ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณ์ ์์ฑ
db.createUser({
user: "YOUR_USERNAME",
pwd: "YOUR_PASSWORD",
roles: [
{ role: "dbAdmin", db: "YOUR_DATABASE_NAME" },
{ role: "readWrite", db: "YOUR_DATABASE_NAME" }
]
})
// ๊ณ์ ํ์ธ
show users
์ฟ ๋ฒ๋คํฐ์ค์์ ์ ์
// pod ์ด๋ฆ ํ์ธ
kubectl get pods --namespace=YOUR_NAMESPACE
// pod๋ก ์ ์
kubectl exec YOUR_POD_NAME -it --namespace=YOUR_NAMESPACE -- bash
// MongoDB Shell๋ก ์ ์
kubectl exec YOUR_POD_NAME -it --namespace=YOUR_NAMESPACE -- mongo
์ฐธ๊ณ
https://kubernetes.io/ko/docs/tasks/configmap-secret/managing-secret-using-kubectl/
'docker,kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kubernetes] PersistentVolume (PV)๊ณผ PersistentVolumeClaim (PVC)๋? (0) | 2023.07.25 |
---|