Volume 실습
실습을 하려고 하는데...
머선129..
- 호스트를 종료했다 다시 시작해서 그래요..
마스터 노드에서 다음 명령어 실행
nohup kubectl proxy --disable-filter=true --port=8001 --address=192.168.35.30 --accept-hosts='^\*$' >/dev/null 2>&1 &
--disable-filter=true
킬포
--disable-filter=true
1. emptyDir
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-1
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount1
- name: container2
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount2
volumes:
- name : empty-dir
emptyDir: {}
실습 과정
- 생성
- 상세 들어가서 EXEC 클릭
- container1 shell에
mount | grep mount1
명령어로 mount1이 마운트됐는지 확인 cd mount1 && echo "file content" >> file.txt
- ls로 파일 생성 확인
- container2 shell에
cd mount2 && ls
명령어로 file.txt 존재 확인 cat file.txt
로 내용도 확인- 당연히 pod 삭제하고 다시 만들면 내용 없어짐
- volume은 pod 내에 존재하기 때문
Container1
Container2
- emptyDir은 두 컨테이너가 파일을 공유해서 쓰되 언제 삭제되도 상관 없을 때 사용
2. HostPath
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: host-path
mountPath: /mount1
volumes:
- name : host-path
hostPath:
path: /node-v
type: DirectoryOrCreate
DirectoryOrCreate
: path가 없으면 생성하겠다.
실습 과정
- 위 내용 생성
- 위 내용에서
name: pod-volume-2
로 이름만 바꿔서 또 하나 더 생성 - pod-volume-2 shell 실행
- emptyDir이랑 똑같이 mount1에 file.txt 생성
- pod-volume-3 shell에서 내용 file.txt 확인 --> 파일 있네 우왕 싱기하당!
- 실제 노드에도 있는지 확인 --> node1에 접속
- node1에 접속 후
ls
로node-v
디렉토리 확인 - node-v에
cat file.txt
확인 - node1에 파일이 있으니 파드를 삭제하고 다시 만들어도 파일 내용이 그대로 있음
- 킹지만 파드가 node1이 아니라 node2에 만들어지면 파일 공유 불가
node1
3. PVC / PV
PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-01
spec:
capacity:
storage: 1G
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
- pv의 실체는
local
- pv에 연결되는 파드들은 node1에 만들어짐
capacity
와accessModes
를 설정해도 그대로 안 만들어짐 --> 지금은 알 거 없음
PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-01
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: ""
Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: pvc-pv
mountPath: /mount3
volumes:
- name : pvc-pv
persistentVolumeClaim:
claimName: pvc-01
- pvc-01 claim에 연결
실습 과정
- PV 생성
name: pv-02
,accessModes: ReadOnlyMany
로 바꾸고 생성name: pv-03
,accessModes: ReadWriteOnce
,storage: 2G
로 바꾸고 생성- PVC 생성 --> 속성때문에 pv-01과 연결됨 우왕
- 한 번 PV가 PVC와 바인딩되면 다른 PVC에서 PV 사용 불가능
name: pvc-02
,accessModes: ReadWriteOnce
로 생성name: pvc-03
,accessModes: ReadWriteOnce
,storage: 3G
로 생성 --> pending됨- 2G인데 3G를 요구하니 pending~
name: pvc-04
,accessModes: ReadWriteOnce
,storage: 1G
로 생성 --> 2G에 할당됨 싱기하다!- Pod 생성 기존 pod-volume-3는 삭제
- pod-volume-3 shell에서 mount3에 file.txt 확인 --> 기존 host-path에서 생성한게 그대로 있눼
- pod-volume-5 이름만 바꿔서 pod 생성
- pod-volume-5에도 파일 존재 확인
PV
PVC
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 9. ConfigMap, Secret - 실습 (0) | 2021.02.08 |
---|---|
[k8s] 8. ConfigMap, Secret - Env, Mount (0) | 2021.02.07 |
[k8s] 6. Volume - emptyDir, hostPath, PV/PVC (0) | 2021.02.04 |
[k8s] 5. Service - 실습 (0) | 2021.02.03 |
[k8s] 4. Service - ClusterIP, NodePort, LoadBalancer (0) | 2021.02.01 |