K8s 引入了一组叫作 Persistent Volume Claim(PVC) 和 Persistent Volume(PV) 的 API 对象, 大大降低了用户声明和使用持久化 Volume 的门槛
在 Pod 的 Volumes 中, 只要声明类型是 persistentVolumeClaim, 指定 PVC 的名字, 当创建这个 PVC 对象, k8s 就自动为它绑定一个符合条件的 Volume, 这个 Volume, 从 PV 来
PVC 和 PV 的设计, 类似 "接口" 和 "实现" 的思想, 开发者只知道使用 "接口"PVC, 运维人员负责给 "接口" 绑定具体的实现 PV, 说白了 PVC 就是一种特殊的 Volume
一, PV 使用示例
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: cqh
- labels:
- cqh: chenqionghe
- spec:
- capacity:
- storage: 100Mi
- volumeMode: Filesystem
- accessModes: ["ReadWriteMany"]
- persistentVolumeReclaimPolicy: Delete
- storageClassName: local-storage
- local:
- path: /data/pv
- nodeAffinity:
- required:
- nodeSelectorTerms:
- - matchExpressions:
- - key: cqh
- operator: In
- values:
- - chenqionghe
创建后查看
- [email protected]:/home/Ubuntu/statefulset# kubectl get pv
- NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
- cqh 100Mi RWX Delete Bound default/cqh local-storage 4m
二, PVC 使用示例
- kind: PersistentVolumeClaim
- apiVersion: v1
- metadata:
- name: cqh
- spec:
- storageClassName: local-storage
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 100Mi
- selector:
- matchLabels:
- cqh: chenqionghe
AccessModes 为 ReadWriteMany, 表示这个 Volume 是可读写的, 并且能挂载在多个节点上 (官方支持的 AccessMode)
执行创建后查看
- [email protected]:/home/Ubuntu/statefulset# kubectl get pvc
- NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
- cqh Bound cqh 100Mi RWX local-storage 4m
三, Pod 使用 pvc 示例
- apiVersion: v1
- kind: Pod
- metadata:
- name: cqh
- spec:
- containers:
- - name: cqh-container
- image: nginx
- ports:
- - containerPort: 80
- name: "http-server"
- volumeMounts:
- - mountPath: "/usr/share/nginx/html"
- name: pv-storage
- volumes:
- - name: pv-storage
- persistentVolumeClaim:
- claimName: cqh
创建后查看
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
- cqh 1/1 Running 0 4m 10.244.0.46 vm-0-8-Ubuntu <none>
- [email protected]:/home/Ubuntu/statefulset# kubectl describe po cqh
- Name: cqh
- Namespace: default
- ...
- Volumes:
- pv-storage:
- Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
- ClaimName: cqh
- ReadOnly: false
- default-token-gqfrx:
- Type: Secret (a volume populated by a Secret)
- SecretName: default-token-gqfrx
- Optional: false
- ...
- Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal Scheduled 4m default-scheduler Successfully assigned default/cqh to vm-0-8-Ubuntu
- Normal Pulling 4m kubelet, vm-0-8-Ubuntu pulling image "nginx"
- Normal Pulled 4m kubelet, vm-0-8-Ubuntu Successfully pulled image "nginx"
- Normal Created 4m kubelet, vm-0-8-Ubuntu Created container
- Normal Started 4m kubelet, vm-0-8-Ubuntu Started container
来源: http://www.bubuko.com/infodetail-3218503.html