kuberntes 中为了解决持久存储的问题,引入了新的对象:PV
因为我们docker上的临时存储都无法长久保存,pod重启就丢失了,而且pod会经常重启,所以我们就需要PV
1 2 3 4 5 6 7 8 9 10 11 12 |
pv-definition.yaml kind: PersistentVolume apiVersion: v1 metadata: name: pv-vol1 spec: accessModes: [ "ReadWriteOnce" ] capacity: storage: 1Gi hostPath: path: /tmp/data |
pv 的概念相当于 是一个 磁盘,我们只是准备好了一个磁盘,可以是NFS, 也可以是hostPath(生成环境中一般都不是hostpath,因为hostpath绑定了某个节点,如果pod更换了节点就出问题了),也可以是AWS 的EBS
PV是一个cluster 级别的对象,也就是说,admin创建好了一批PV等着你来用,那么具体到某个namespace 是如何申请这些pv的呢? 通过pvc
1 2 3 4 5 6 7 8 9 10 11 |
pvc-definition.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi |
我们创建了一个pvc以后,kubernete 会根据我们的需求,例如大小,读写等条件,给我们找到合适的pv并绑定给这个pvc (多个符合的就调一个最合适的)
然后我们在pod创建的时候就可以使用这个pvc了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pod-definition.yaml apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: myfrontend image: nginx volumeMounts: - mountPath: "/var/www/html" name: web volumes: - name: web persistentVolumeClaim: claimName: myclaim |
这样,我们的pod旧可以使用我们这个Pvc了,以aws 的EBS为例,也就是说,这个volume就绑定给这个pvc了,pod 重启会自动去寻找这个pvc然后挂载这个volume,所以数据就不会丢失
上边的问题虽然好,但是太麻烦了,管理员要不断 的申请pv,管理pv ,所以我们有新的解决方案:StorageClass
StorageClass的作用就是,我们不再需要手动管理pv了,当系统检测到有pvc创建的时候,会自动的根据pvc需求的大小去创建pv (删除pvc的时候可以选择同步删除或者保留pv)
1 2 3 4 5 6 7 |
sc-definition.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: google-storage provisioner: kubernetes.io/gce-pd |
定义好storageclass以后我们pvc中使用了
1 2 3 4 5 6 7 8 9 10 11 12 |
pvc-definition.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim spec: accessModes: [ "ReadWriteOnce" ] storageClassName: google-storage resources: requests: storage: 500Mi |
这个时候就不需要提前创建pv了,全自动一条龙,这个叫dynamic pv
然后在pod中使用也是同样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pod-definition.yaml apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: frontend image: nginx volumeMounts: - mountPath: "/var/www/html" name: web volumes: - name: web persistentVolumeClaim: claimName: myclaim |
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021