kubernates PV和PVC
k8s中管理有状态pod得statefulset,关联Volume,会用到persistent vloume claim(PVC),和persistent vloume(PV)。可以把它们两个当作是接口和类的关系,PV实现PVC,PVC关联PV,开发人员定义PVC(把关心的程序参数植入,存储多大,可读写,是否共享等等),运维人员定义PV(具体的机器配置等等包括用户密码、网络地址之类的)声明...
k8s中管理有状态pod得statefulset,关联Volume,会用到persistent vloume claim(PVC),和persistent vloume(PV)。
可以把它们两个当作是接口和类的关系,PV实现PVC,PVC关联PV,开发人员定义PVC(把关心的程序参数植入,存储多大,可读写,是否共享等等),运维人员定义PV(具体的机器配置等等包括用户密码、网络地址之类的)
声明一个PVC
apiVersion: v1
kind: Pod
metadata:
name: pv-pod
spec:
containers:
- name: pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pv-storage
volumes:
- name: pv-storage
persistentVolumeClaim:
claimName: pv-claim
每个 PVC 包含一个 spec 以及 status,用以表达其规格和状态
然后声明一个PV
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-volume
labels:
type: local
spec:
capacity:
storage: 10Gi
rbd:
monitors:
- '10.16.154.78:6789'
- '10.16.154.82:6789'
- '10.16.154.83:6789'
pool: kube
image: foo
fsType: ext4
readOnly: true
user: admin
keyring: /etc/ceph/keyring
imageformat: "2"
imagefeatures: "layering"
观察发现PVC和PV两者之间,没有key进行关联。其实PVC是自动绑定符合条件的PV的,一般来说关键字段是spec:storage,满足申请空间的就绑定。
pv和pvc是一对一绑定的。不过多个pod可以挂载同一个pvc
通常使用的流程是,首先创建存储,在创建pv,接着创建pvc,pod挂载到相应的pvc。
Pod 能够借助 PVC 来访问存储。PVC 必须跟 Pod 处于同一个命名空间。集群找到 Pod 命名空间中的 PVC,然后利用 PVC 获取到背后的 PV。这个卷就会被加载到主机上,让 Pod 可以使用
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: dockerfile/nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: pv-claim
更多推荐
所有评论(0)