간략한 소개
이 문서하는 방법에 대해 설명 PersistentVolumeClaim
포드 저장, 다음 단계를 구성합니다
- 클러스터 관리자는 PersistentVolume에서 지원하는 물리적 스토리지를 만들 수 있습니다. 볼륨은 어떤 포드와 연결되어 있지 않습니다.
- 개발자 / 클러스터 사용자로 PersistentVolumeClaim 만들기, 자동으로 적절한 PersistentVolume에 바인딩
- PersistentVolumeClaim의 저장을 사용하여 포드를 만듭니다.
참고 :이 문서는 공식 문서를 참조하여 이해되어야합니다. 오해의 소지가있는 경우, 비판을하시기 바랍니다.
시작 전 준비
생성, 쉘을 입력 클러스터의 노드 노드를 선택 /mnt/data
디렉토리를
# mkdir /mnt/data
입력 /mnt/data
디렉토리를하는 생성 index.html
파일을
# sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"
파일이 성공적으로 생성되어 있는지 확인
cat /mnt/data/index.html
출력은 다음과
Hello from Kubernetes storage
PersistentVolume 만들기
크리에이트 hostPath
타입 创建PersistentVolume
. 는 Kubernetes는 클러스터 노드에서 노드의 사용을 지원하는 hostPath
개발 및 테스트를. hostPath
유형 PersistentVolume
시뮬레이션 네트워크 연결 스토리지에 사용되는 노드 노드에서 파일이나 디렉토리.
프로덕션 환경에서는 사용하지 마십시오 hostPath
. 클러스터 관리자는 사용할 수 있습니다 Google Compute Engine persistent disk
, NFS
, Amazon Elastic Block Store volume
대신 네트워크 스토리지 제공 업체. 클러스터 관리자가 사용할 수있는 StorageClasses
세트 dynamic provisioning
.
만들기 hostPath
의 유형 PersistentVolume
객체, 문서를 물었다 :pv-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
프로필 정의 volumes
클러스터 노드의 노드 /mnt/data
. 구성 저장소 크기 지정 10 gibibytes
, ReadWriteOnce
판독 및 기록 가능 수단은 하나의 노드에 탑재 모드. 구성은 정의 된 StorageClass name
바와 같이 manual
결합 PersistentVolumeClaim
을 요청 PersistentVolume
.
# kubectl apply -f /root/k8s-example/volume/pv-volume.yaml
보기 PersistentVolume
자원 정보
# kubectl get pv task-pv-volume -o wide
결과는 것으로 나타났다 로 . 설명은 아직 바인딩되지 않은PersistentVolume
STATUS
Available
PersistentVolume
PersistentVolumeClaim
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
task-pv-volume 10Gi RWO Retain Available manual 9s Filesystem
만들기 PersistentVolumeClaim
사용자가 만든 다음 PersistentVolumeClaim
. 포드의 사용은 PersistentVolumeClaim
물리적 스토리지를 요청합니다.
만들기 PersistentVolumeClaim
, 요청 된 볼륨은 적어도입니다 3 gibibytes
읽고 적어도 하나 개의 노드에 대한 쓰기 액세스를 제공 할 수있다. 파일 이름 :pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
# kubectl apply -f /root/k8s-example/volume/pv-claim.yaml
보기 PersistentVolume
자원 정보,
# kubectl get pv task-pv-volume
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim manual 28m
보기 PersistentVolumeClaim
자원 상태
# kubectl get pvc task-pv-claim
결과는 출력이 보여 PersistentVolumeClaim
바인딩 PersistentVolume
, 즉task-pv-volume
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
task-pv-claim Bound task-pv-volume 10Gi RWO manual
포드 만들기
포드를 생성, 사용 PersistentVolumeClaim
으로 volume
. 파일 이름 :pv-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
# kubectl apply -f /root/k8s-example/volume/pv-pod.yaml
# kubectl get pod task-pv-pod
NAME READY STATUS RESTARTS AGE
task-pv-pod 1/1 Running 0 14s
입력 task-pv-pod
에 쉘을
kubectl exec -it task-pv-pod -- /bin/bash
쉘에서, 당신은의 nginx 출신 여부를 확인 hostPath
볼륨 제공 index.html
파일을
apt update
apt install curl
curl http://localhost/
출력 :
Hello from Kubernetes storage
이 메시지가 표시되면 당신은 성공적으로의 PersistentVolumeClaim에서 포드 저장소를 사용하도록 구성했습니다.
정리 자료
kubectl delete pod task-pv-pod
kubectl delete pvc task-pv-claim
kubectl delete pv task-pv-volume
생성 /mnt/data
디렉토리 노드 노드 것은 디렉토리를 삭제
sudo rm /mnt/data/index.html
sudo rmdir /mnt/data