Google Cloud Platform

영구 저장소(persistent storage - gke)

컨텐츠 정보

본문

# 1. Create PVs and PVCs ## Connect to the lab GKE cluster ``` $export my_zone=us-central1-a $export my_cluster=standard-cluster-1 $source <(kubectl completion bash) $gcloud container clusters get-credentials $my_cluster --zone $my_zone Fetching cluster endpoint and auth data. kubeconfig entry generated for standard-cluster-1. ``` ## Create and apply a manifest with a PVC pvc-demo.yaml ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hello-web-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi ``` ``` $git clone https://github.com/GoogleCloudPlatform/training-data-analyst $ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s $cd ~/ak8s/Storage/ ``` ### 현재 PVC를 보여 준다 ``` $$kubectl get persistentvolumeclaim ``` 현재는 없ㅎ다. ``` No resources found in default namespace. ``` ### PVC만든다. ``` kubectl apply -f pvc-demo.yaml ``` ### 다시 조회 ``` NAME STATUS VOLUME CAP ACCESS MODES CLASS AGE hello-web-disk Bound pvc-8...34 30Gi RWO standard 5s ``` 생겼다. # 2. Mount and verify Google Cloud persistent disk PVCs in Pods ## Mount the PVC to a Pod **`pod-volume-demo.yaml`** ``` kind: Pod apiVersion: v1 metadata: name: pvc-demo-pod spec: containers: - name: frontend image: nginx volumeMounts: - mountPath: "/var/www/html" name: pvc-demo-volume volumes: - name: pvc-demo-volume persistentVolumeClaim: claimName: hello-web-disk ``` ### 만든다. ``` $kubectl apply -f pod-volume-demo.yaml ``` 만들어 졌다. ``` pod/pvc-demo-pod created ``` ### 확인 ``` $kubectl get pods NAME READY STATUS RESTARTS AGE pvc-demo-pod 1/1 Running 0 28s ``` ### 셀세션 시작 ``` kubectl exec -it pvc-demo-pod -- sh ``` ``` echo Test webpage in a persistent volume!>/var/www/html/index.html chmod +x /var/www/html/index.html exet ``` ## Test the persistence of the PV ### 1. 지운다. pvc-demo-pod. $`kubectl delete pod pvc-demo-pod` ``` pod "pvc-demo-pod" deleted ``` ### 2. 확인 한다. $`kubectl get pods` 지워졌다. ``` No resources found in default namespace. ``` ### 3. PVC를 확인 $`kubectl get persistentvolumeclaim` ``` NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE hello-web-disk Bound pvc- 30Gi RWO standard 7m43s ``` ### 4. pvc-demo-pod 재 패포 $`kubectl apply -f pod-volume-demo.yaml` Output ``` pod/pvc-demo-pod created ``` ### 5. pvc-demoe-pod 쉘 접속 $`kubectl exec -it pvc-demo-pod -- sh` 접속되면 #으로 바뀐다. #`cat /var/www/html/index.html` Output ``` Test webpage in a persistent volume! ``` 빠져 나온다. #`exit` ![image](https://user-images.githubusercontent.com/16316626/152635602-49876939-5ec1-43d7-ade9-5e5c0e8de593.png) # 3.Create StatefulSets with PVCs > 이 작업에서는 StatefulSet에서 PVC를 사용합니다. > StatefulSet은 포드에 고유 식별자가 제공된다는 점을 제외하고는 배포와 같습니다. ## Release the PVC ### pvc-demo-pod 삭제 $`kubectl delete pod pvc-demo-pod` 지워졌졌음. ``` pod "pvc-demo-pod" deleted ``` 확인 `kubectl get pods` 결과 ``` No resources found in default namespace. ``` ## Create a StatefulSet 스테이플셋 생성 **statefulset-demo.yaml** ``` kind: Service apiVersion: v1 metadata: name: statefulset-demo-service spec: ports: - protocol: TCP port: 80 targetPort: 9376 type: LoadBalancer --- apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-demo spec: selector: matchLabels: app: MyApp serviceName: statefulset-demo-service replicas: 3 updateStrategy: type: RollingUpdate template: metadata: labels: app: MyApp spec: containers: - name: stateful-set-container image: nginx ports: - containerPort: 80 name: http volumeMounts: - name: hello-web-disk mountPath: "/var/www/html" volumeClaimTemplates: - metadata: name: hello-web-disk spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 30Gi ``` ### 생성 $`kubectl apply -f statefulset-demo.yaml` 로드벨런싱 되는 서비스와, 30G 볼륨이 생성되었음. `hello-web-disk` `/var/www/html` 마운트 욈 ```sh service/statefulset-demo-service created statefulset.apps/statefulset-demo created ``` ## Verify the connection of Pods in StatefulSets StatefulSet에서 포드의 연결 확인 ### 세부 정보 확인 $`kubectl describe statefulset statefulset-demo` Output ``` Name: statefulset-demo Namespace: default CreationTimestamp: Sat, 05 Feb 2022 09:11:44 +0000 Selector: app=MyApp Labels: Annotations: Replicas: 3 desired | 3 total Update Strategy: RollingUpdate Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=MyApp Containers: stateful-set-container: Image: nginx Port: 80/TCP Host Port: 0/TCP Environment: Mounts: /var/www/html from hello-web-disk (rw) Volumes: Volume Claims: Name: hello-web-disk StorageClass: Labels: Annotations: Capacity: 30Gi Access Modes: [ReadWriteOnce] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 2m52s statefulset-controller create Claim hello-web-disk-statefulset-demo-0 Pod statefulset-demo-0 in StatefulSet statefulset-demo success Normal SuccessfulCreate 2m52s statefulset-controller create Pod statefulset-demo-0 in StatefulSet statefulset-demo successful Normal SuccessfulCreate 2m38s statefulset-controller create Claim hello-web-disk-statefulset-demo-1 Pod statefulset-demo-1 in StatefulSet statefulset-demo success Normal SuccessfulCreate 2m38s statefulset-controller create Pod statefulset-demo-1 in StatefulSet statefulset-demo successful Normal SuccessfulCreate 2m24s statefulset-controller create Claim hello-web-disk-statefulset-demo-2 Pod statefulset-demo-2 in StatefulSet statefulset-demo success Normal SuccessfulCreate 2m24s statefulset-controller create Pod statefulset-demo-2 in StatefulSet statefulset-demo successful ``` ### 포드 리스트 확인 $`keubectl get pods` ``` NAME READY STATUS RESTARTS AGE statefulset-demo-0 1/1 Running 0 4m14s statefulset-demo-1 1/1 Running 0 4m statefulset-demo-2 1/1 Running 0 3m46s ``` ### PVC 확인 $`kubectl get pvc` ``` NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE hello-web-disk Bound pvc-80 30Gi RWO standard 20m hello-web-disk-statefulset-demo-0 Bound pvc-3a 30Gi RWO standard 5m4s hello-web-disk-statefulset-demo-1 Bound pvc-42 30Gi RWO standard 4m50s hello-web-disk-statefulset-demo-2 Bound pvc-4c 30Gi RWO standard 4m36s ``` ### 스테이트풀 pvc 확인 $`kubectl describe pvc hello-web-disk-statefulset-demo-0` # 4. Verify the persistence of Persistent Volume connections to Pods managed by StatefulSets ## statefulset-demo-0 쉘 접속 $`kubectl exec -it statefulset-demo-0 -- sh` ``` # echo Test webpage in a persistent volume!>/var/www/html/index.html chmod +x /var/www/html/index.html# # # cat /var/www/html/index.html Test webpage in a persistent volume! # # exit ```

관련자료

댓글 0
등록된 댓글이 없습니다.
전체 24 / 1 페이지
RSS
번호
제목
이름