<6> 임시 파일시스템 사용 테스트 1 # 파드 배포 # date 명령어로 현재 시간을 10초 간격으로 /home/pod-out.txt 파일에 저장 k ns default curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/3/date-busybox-pod.yaml cat date-busybox-pod.yaml | yh kubectl apply -f date-busybox-pod.yaml 2 # 파일 확인 (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# more date-busybox-pod.yaml apiVersion: v1 kind: Pod metadata: name: busybox spec: terminationGracePeriodSeconds: 3 containers: - name: busybox image: busybox command: - "/bin/sh" - "-c" - "while true; do date >> /home/pod-out.txt; cd /home; sync; sync; sleep 10; done" (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# kubectl get pod kubectl exec busybox -- tail -f /home/pod-out.txt ----------- Wed May 10 10:41:37 UTC 2023 Wed May 10 10:41:47 UTC 2023 3 # 파드 삭제 후 다시 생성 후 파일 정보 확인 > 이전 기록이 보존되어 있는지? 아니다 모두 날아간다. 이전 날짜 기록은 모두 없어진다. 휘발성이다라는것을 확인한것이다. kubectl delete pod busybox 파드 재생성 휘발성이다. kubectl apply -f date-busybox-pod.yaml kubectl exec busybox -- tail -f /home/pod-out.txt ----------------------- Wed May 10 10:43:45 UTC 2023 Wed May 10 10:43:55 UTC 2023 Wed May 10 10:44:05 UTC 2023 5 # 실습 완료 후 삭제 kubectl delete pod busybox <7> 로컬 디스크 사용하는 호스트 path 사용 호스트의 로컬 디렉토리 사용해보자. 로컬 디스크를 사용하는 경우도 있다. 속도가 빠르다. 1 호스트 Path 를 사용하는 PV/PVC : local-path-provisioner 스트리지 클래스 배포 https://github.com/rancher/local-path-provisioner 2 # 배포 curl -s -O https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml kubectl apply -f local-path-storage.yaml 3 # 확인 - 로컬 패스를 사용하는 스토리지 확인 kubectl get-all -n local-path-storage kubectl get pod -n local-path-storage -owide kubectl describe cm -n local-path-storage local-path-config kubectl get sc kubectl get sc local-path NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE local-path rancher.io/local-path Delete WaitForFirstConsumer false 34s // local-path 라는 스토리지 클래스. <8> PV/PVC 를 사용하는 파드 생성 1 # PVC 생성 curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/3/localpath1.yaml cat localpath1.yaml | yh (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# cat localpath1.yaml | yh apiVersion: v1 kind: PersistentVolumeClaim metadata: name: localpath-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi kubectl apply -f localpath1.yaml (5분 걸린다) 2 # PVC 확인 kubectl get pvc (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE localpath-claim Pending local-path 94s kubectl describe pvc 3 # 파드 생성 curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/3/localpath2.yaml cat localpath2.yaml | yh kubectl apply -f localpath2.yaml 4 # 파드 확인 kubectl get pod,pv,pvc kubectl describe pv # Node Affinity 확인 배포된 파드 5 확인1 kubectl exec -it app -- tail -f /data/out.txt Wed May 10 10:55:34 UTC 2023 Wed May 10 10:55:39 UTC 2023 Wed May 10 10:55:44 UTC 2023 Wed May 10 10:55:49 UTC 2023 Wed May 10 10:55:54 UTC 2023 Wed May 10 10:55:59 UTC 2023 Wed May 10 10:56:04 UTC 2023 Wed May 10 10:56:09 UTC 2023 Wed May 10 10:56:14 UTC 2023 확인2 # 워커노드 중 현재 파드가 배포되어 있다만, 아래 경로에 out.txt 파일 존재 확인 ssh ec2-user@$N1 tree /opt/local-path-provisioner /opt/local-path-provisioner └── pvc-f1615862-e4cd-47d0-b89c-8d0e99270678_default_localpath-claim └── out.txt ssh ec2-user@$N2 tree /opt/local-path-provisioner 5 # 해당 워커노드 자체에서 out.txt 파일 확인 : 아래 부분은 각자 실습 환경에 따라 다름 ssh ec2-user@$N1 tail -f /opt/local-path-provisioner/pvc-f1615862-e4cd-47d0-b89c-8d0e99270678_default_localpath-claim/out.txt <9> 파드 삭제 후 파드 재생성해서 데이터 유지 되는지 확인 1 watch -d kubectl get pv,pvc,pods # 파드 삭제 후 PV/PVC 확인 kubectl delete pod app kubectl get pod,pv,pvc // pv와 pvc가 남아 있음. 2 # 파드 다시 실행 kubectl apply -f localpath2.yaml (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# more localpath2.yaml apiVersion: v1 kind: Pod metadata: name: app spec: terminationGracePeriodSeconds: 3 containers: - name: app image: centos command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"] volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: localpath-claim (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# 3 # 확인 kubectl exec -it app -- head /data/out.txt kubectl exec -it app -- tail -f /data/out.txt 데이터가 추가로 저장된 것을 확인하자~ 예전 데이터도 남아 있다. (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# kubectl exec -it app -- head /data/out.txt Wed May 10 10:54:59 UTC 2023 Wed May 10 10:55:04 UTC 2023 Wed May 10 10:55:09 UTC 2023 Wed May 10 10:55:14 UTC 2023 Wed May 10 10:55:19 UTC 2023 Wed May 10 10:55:24 UTC 2023 Wed May 10 10:55:29 UTC 2023 Wed May 10 10:55:34 UTC 2023 Wed May 10 10:55:39 UTC 2023 Wed May 10 10:55:44 UTC 2023 (masterseo@myeks:default) [root@myeks-bastion-EC2 ~]# kubectl exec -it app -- tail -f /data/out.txt Wed May 10 10:56:49 UTC 2023 Wed May 10 10:56:54 UTC 2023 Wed May 10 10:56:59 UTC 2023 Wed May 10 10:57:04 UTC 2023 Wed May 10 10:57:09 UTC 2023 Wed May 10 10:57:14 UTC 2023 Wed May 10 10:57:33 UTC 2023 Wed May 10 10:57:38 UTC 2023 Wed May 10 10:57:43 UTC 2023 Wed May 10 10:57:48 UTC 2023 Wed May 10 10:57:53 UTC 2023 4 # 파드와 PVC 삭제 kubectl delete pod app kubectl delete pvc localpath-claim // pvc삭제하면 pv도 삭제 된다. # 확인 kubectl get pv