์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๊ฐ ์๋ ์ฑ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํจ.
์ํ๊ฐ ์๋ค๋ ๊ฒ : ์ปจํ ์ด๋/ ๋ ธ๋์ ์ฅ์ ๋ฐ์์ ์ปจํ ์ด๋๋ฅผ ์คํํ์ ๋ ๋ค๋ฅธ ๋ ธ๋๋ก ์์ ๋กญ๊ฒ ์ฎ๊ธธ ์ ์๋ฐ๋ ๋ป
์ปจํ ์ด๋๋ฅผ ์ฎ๊ธฐ๊ฑฐ๋ ์ญ์ ํ๊ฒ ๋๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๊ฒ๋๋๋ฐ, ์ด๋ฅผ ๋ณด์กดํ๊ธฐ ์ํด Volume ์ด๋ผ๋ ํน์ฑ์ ์ฌ์ฉํ๋ค.
- ์์ ๋ถ๋ฅจ : emptyDir
- ๋ก์ปฌ ๋ถ๋ฅจ : hostPath
- ๋คํธ์ํฌ ๋ถ๋ฅจ : nfs
- ํผ์์คํดํธ ๋ถ๋ฅจ : pv, pvc
ํ๋๊ฐ ์คํ๋๋ ํธ์คํธ์ ๋์คํฌ๋ฅผ ์์๋ก ์ปจํ
์ด๋์ ๋ถ๋ฅจ์ผ๋ก ํ ๋นํด์ ์ฌ์ฉ
์ปจํ
์ด๋ ๊ฐ ๋ฐ์ดํฐ ๊ณต์
https://kubernetes.io/ko/docs/concepts/storage/volumes/#emptydir
apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: registry.k8s.io/test-webserver name: test-container volumeMounts: # ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ถ๋ฅจ ๋ง์ดํธ ์์น 2) - mountPath: /cache name: cache-volume # ๋ถ๋ฅจ ๋ง์ดํธ ๋์ ์ง์ v - image: another/image name: another-container volumeMounts: # ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ถ๋ฅจ ๋ง์ดํธ ์์น 2) - mountPath: /another name: cache-volume # ๋ถ๋ฅจ ๋ง์ดํธ ๋์ ์ง์ v readOnly: true # ํด๋น ๋ง์ดํธ์์๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก๋ง ๋๋ ํฐ๋ฆฌ ์ ๊ทผ ๊ฐ๋ฅ ports: - containerPort:80 volumes: # ์ปจํ ์ด๋์ ๋ณผ๋ฅจ ๋ง์ดํธ ๋์ ์ ์ธ 1) - name: cache-volume # ๋ถ๋ฅจ ์ด๋ฆ ์ง์ v emptyDir: {}
ํ๋๊ฐ ์คํ๋ ํธ์คํธ์ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ํ๋์ ๋ง์ดํธํจ.
์ปจํ
์ด๋์ ๋
ธ๋(ํธ์คํธ) ๊ฐ ๋ฐ์ดํฐ ๊ณต์
๊ฒฝ๊ณ :
HostPath ๋ณผ๋ฅจ์๋ ๋ง์ ๋ณด์ ์ํ์ด ์์ผ๋ฉฐ, ๊ฐ๋ฅํ๋ฉด HostPath๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค. HostPath ๋ณผ๋ฅจ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ, ํ์ํ ํ์ผ ๋๋ ๋๋ ํฐ๋ฆฌ๋ก๋ง ๋ฒ์๋ฅผ ์ง์ ํ๊ณ ReadOnly๋ก ๋ง์ดํธํด์ผ ํ๋ค.
AdmissionPolicy๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋๋ ํฐ๋ฆฌ๋ก์ HostPath ์ก์ธ์ค๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ, readOnly ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ๋ ์ ์ฑ ์ด ์ ํจํ๋ ค๋ฉด volumeMounts ๊ฐ ๋ฐ๋์ ์ง์ ๋์ด์ผ ํ๋ค.
kubectl describe pod fluentbit-gke-jt8p8 --namespace kube-system
https://kubernetes.io/ko/docs/concepts/storage/volumes/#hostpath
apiVersion: v1
kind: Pod
metadata:
name: kubernetes-hostpath-pod
spec:
containers:
- name: kubernetes-hostpath-pod
image: arisu1000/simple-container-app:latest
volumeMounts:
- mountPath: /test-volume
name: hostpath-vol
ports:
- containerPort: 8080
volumes:
- name: hostpath-vol
hostPath:
path: /home/usr/hostPathDir
type: Directory
kubectl exec kubernetes-hostpath-pod -it -- sh
~ # cd /test-volume
/test-volume # ls
/test-volume # echo "pod Wrote" > pod.txt
/test-volume # ls
pod.txt
์๋ก ๋ณผ๋ฅจ ๋ง์ดํธ๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํ๋ค!
https://kubernetes.io/ko/docs/concepts/storage/volumes/#gcepersistentdisk
apt install nfs-common nfs-kernel-server portmap
ํ๋ ํ๋์์ ์์ ์ฑ์ด ๋์ ์ธ๋ถ ์คํ ๋ฆฌ์ง๋ฅผ ๋ถ๋ฅจ์ผ๋ก ์ค์ ํ ํ ํด๋น ํ๋์ NFS ์๋ฒ๋ฅผ ์ค์ .
-> ๋ค๋ฅธ ํ๋๋ ํด๋น ํ๋์ NFS ์๋ฒ๋ฅผ nfs ๋ถ๋ฅจ์ผ๋ก ๋ง์ดํธํจ.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-server
labels:
app: nfs-server
spec:
replicas: 1
selector:
matchLabels:
app: nfs-server
template:
metadata:
labels:
app: nfs-server
spec:
containers:
- name: nfs-server
image: arisu1000/nfs-server:latest
ports:
- name: nfs
containerPort: 2049
- name: mountd #NFS ์๋ฒ ํ๋ก์ธ์ค (์์ฒญ์ ์ง์ ๋๋ ํฐ๋ฆฌ๋ก ๋ณผ๋ฅจ ๋ง์ดํธ)
containerPort: 20048
- name: rpcbind #NFS ์๋ฒ ํ๋ก์ธ์ค (์์คํ
์์ RPC ์๋น์ค ๊ด๋ฆฌ)
containerPort: 111
securityContext: #๋ณด์ ์ค์ (์ปจํ
์ด๋๊ฐ ์คํ์ค์ธ ํธ์คํธ ์ฅ์น์ ์ ๊ทผ๊ถํ ์ค์ )
privileged: true #(๋ชจ๋ ํธ์คํธ ์ฅ์น ์ ๊ทผ ๊ฐ๋ฅ)
volumeMounts: # ๋ถ๋ฅจ ๋ง์ดํธ ์ค์
- mountPath: /exports
name: hostpath-vol
volumes:
- name: hostpath-vol
hostPath:
path: /tmp
type: Directory
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubernetes-nfsapp-pod
labels:
app: nfs-client
spec:
replicas: 2
selector:
matchLabels:
app: nfs-client
template:
metadata:
labels:
app: nfs-client
spec:
containers:
- name: kubernetes-nfsapp-pod
image: arisu1000/simple-container-app:latest
volumeMounts:
- mountPath: /test-nfs
name: nfs-vol
ports:
- containerPort: 8080
volumes:
- name: nfs-vol
nfs:
server: 10.0.2.15
path: "/"
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m36s default-scheduler Successfully assigned default/kubernetes-nfsapp-pod-78d656b47b-2ckhf to worker-1
Warning FailedMount 88s (x9 over 3m35s) kubelet MountVolume.SetUp failed for volume "nfs-vol" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 10.0.2.15:/ /var/lib/kubelet/pods/0d1ade48-bd9f-4680-aa24-2138bdf3a0ba/volumes/kubernetes.io~nfs/nfs-vol
Output: mount: /var/lib/kubelet/pods/0d1ade48-bd9f-4680-aa24-2138bdf3a0ba/volumes/kubernetes.io~nfs/nfs-vol: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.
๋ง์ดํ ์ ํ์ํ ํ์ผ์์คํ ํ๋ก๊ทธ๋จ์ด ์ค์น๋์ง ์์์ ๊ทธ๋ ๋ค๊ณ ํ๋ค.
๋ฃจํธ๊ถํ์ผ๋ก ์คํ:apt install nfs-common nfs-kernel-server portmap
์์ปค๋ ธ๋ ๋ง์คํฐ๋ ธ๋ ๋ชจ๋ ์คํํด์ฃผ์ด์ผํจ
nfs ์๋ฒ ํ๋๊ฐ ์คํ๋๊ณ ์๋ worker-2์ hostPath์ nfs-client๊ฐ ์์ฑํ ํ์ผ์ด ๋ณผ๋ฅจ ๋ง์ดํธ๋์ ์์ฑ๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํ๋ค.