在上一章《Kubernetes持久卷实战两部曲之一:极速体验》我们体验了K8S环境下基于NFS的持久卷读写,今天我们一起来了解整个体验环境背后的细节;
要完成上一章的体验,需要做以下事情:
现在就开始吧!
pv对应的配置文件pv1.yaml内容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /usr/local/work/nfs
server: 192.168.119.128
pvc对应的配置文件pvc1.yaml内容如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
可见,上述pvc没有用到selector,k8s系统会自动匹配到pv1,注意要pv和pvc的storage要一样;
您可以在GitHub下载web服务的源码,地址和链接信息如下表所示:
名称 | 链接 | 备注 |
---|---|---|
项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
这个git项目中有多个目录,本次所需的资源放在 k8spvdemo目录下,如下图红框所示:
这是个普通的springboot工程,有以下几处需要注意:
创建文件k8spvdemo.yaml,用于在k8s上创建web服务的pod:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8spvdemo
spec:
replicas: 1
template:
metadata:
labels:
name: k8spvdemo
spec:
containers:
- name: k8spvdemo
image: bolingcavalry/k8spvdemo:0.0.1-SNAPSHOT
volumeMounts:
- mountPath: "/usr/local/uploadfiles"
name: pv1
tty: true
ports:
- containerPort: 8080
volumes:
- name: pv1
persistentVolumeClaim:
claimName: pvc1
为了外部可以访问web服务,需要创建一个service来包裹pod,由于类型是NodePort,端口映射是30010,所以外部可以通过节点机器IP地址:30010来访问web服务:
apiVersion: v1
kind: Service
metadata:
name: k8spvdemo
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30010
selector:
name: k8spvdemo
以上就是全部的开发细节,用这些代码和脚本就可以完成上一章的体验了,这种静态持久卷有一点不太方便,就是每次要先通过PV来声明一个存储资源,然后才能使用,后续的文章中,我们还会尝试StorageClass提供的动态PV,不需要每次预先分配资源就能拥有持久卷;