K8S 持久化之静态PV (nfs)
K8S 持久化之 静态PV (NFS)K8S部署见上篇:https://blog.csdn.net/oToyix/article/details/117963839一、概念Persistent volumePersistent Volume (持久存储卷)简称PV,是一个K8S资源对象,所以我们可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim(
K8S 持久化之 静态PV (NFS)
K8S部署见上篇:
https://blog.csdn.net/oToyix/article/details/117963839
一、概念
Persistent volume
Persistent Volume (持久存储卷)简称PV,是一个K8S资源对象,所以我们可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim(PV索取),简称PVC来实现动态绑定。Pod定义里指定的是PVC,然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。
PV的访问模式有三种:
1、ReadWriteOnce:
是最基本的方式,可读可写,但只支持被单个Pod挂载。简称:RWO – ReadWriteOnce
2、ReadOnlyMany:
可以以只读的方式被多个Pod挂载。 简称:ROX – ReadOnlyMany
3、ReadWriteMany:
简称:RWX – ReadWriteMany。这种存储可以以读写的方式被多个Pod共享。不是每一种存储都支持
这三种方式,像共享方式,目前支持的还比较少,比较常用的是NFS。
PVC绑定PV时通常根据两个条件来绑定,“存储的大小” 及 “访问模式”。
创建PV有两种方式:
静态PV
管理员手动创建一堆PV,组成一个PV池,供PVC来绑定。
动态PV
在现有PV不满足PVC的请求时,可以使用存储分类(StorageClass),描述具体过程为:PV先创建分类,PVC请求已创建的某个类(StorageClass)的资源,这样就达到动态配置的效果。即通过一个叫 Storage Class的对象由存储系统根据PVC的要求自动创建。
PV创建完后状态会变成Available,等待被PVC绑定。一旦被PVC邦定,PV的状态会变成Bound,就可以被定义了相应PVC的Pod使用。Pod使用完后会释放PV,PV的状态变成Released。变成Released的PV会根据定义的回收策略做相应的回收工作。
PV有三种回收策略:
1、Retain
Retain就是保留现场,K8S什么也不做,等待用户手动去处理PV里的数据,处理完后,再手动删除PV。
2、Delete
Delete 策略,K8S会自动删除该PV及里面的数据。
3、Recycle。
Recycle方式,K8S会将PV里的数据删除,然后把PV的状态变成Available,又可以被新的PVC绑定使用。
在实际使用场景里,PV的创建和使用通常不是同一个人。一般为:管理员创建一个PV池,开发人员创建Pod和PVC,PVC里定义了Pod所需存储的大小和访问模式,然后PVC会到PV池里自动匹配最合适的PV给Pod使用。
二、K8S+NFS静态存储模式案例:
1、基于Linux平台构建NFS网络文件系统,配置指令如下:
#安装NFS文件服务;
yum install nfs-utils -y
#配置共享目录&权限;
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/html
vim /etc/exports
/data/ *(rw,sync,no_root_squash)
#启动NFS服务;
service nfs restart
写一个index.html文件进去,一会测试使用
echo "PV ReadWriteMany" >/data/nginx/html/index.html
2、PV存储卷创建
创建持久化PV存储卷,pv.yaml文件内容如下:
cat>pv-nginx-nfs.yaml<<-EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-nfs-pv
namespace: default
spec:
capacity:
storage: 20G
accessModes:
- ReadWriteMany
nfs:
# FIXME: use the right IP
server: 192.168.0.37
path: /data/nginx/html/
EOF
PV配置参数说明:
Capacity 指定 PV 的容量为 100M;
accessModes 指定访问模式为 ReadWriteOnce,支持的访问模式有:
ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。
ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。
ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。
persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle,支持的策略有:
Retain – 需要管理员手工回收。
Recycle – 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*;
Delete – 删除 Storage Provider 上的对应存储资源,例如 AWS EBS、GCE PD、Azure、Disk、OpenStack Cinder Volume 等。
storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV。
path:指定 PV 在 NFS 服务器上对应的目录。
3、PVC存储卷创建
创建持久化PVC存储卷索取,pvc.yaml文件内容如下:
cat>pvc-nginx-nfs.yaml<<-EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-nfs-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
storage: 10G
EOF
4、Nginx POD使用 PV存储卷
1)创建Nginx POD容器使用PVC存储卷索取,nginx.yaml文件内容如下:
cat>nginx-deployments.yaml<<-EOF
kind: Deployment
apiVersion: apps/v1
metadata:
name: nginx-v1
namespace: default
labels:
k8s-app: nginx-v1
spec:
replicas: 1
selector:
matchLabels:
k8s-app: nginx-v1
template:
metadata:
name: nginx-v1
labels:
k8s-app: nginx-v1
spec:
containers:
- name: nginx-v1
image: 'nginx:latest'
imagePullPolicy: Always
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nginx-data
ports:
- containerPort: 80
volumes:
- name: nginx-data
persistentVolumeClaim:
claimName: nginx-nfs-pvc
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext: {}
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
EOF
2)、创建Nginx-service.yaml,一会方便测试
kind: Service
apiVersion: v1
metadata:
name: nginx-v1
namespace: default
labels:
k8s-app: nginx-v1
spec:
type: LoadBalancer
ports:
- name: tcp-8888-80-rpxsl
protocol: TCP
port: 8888
targetPort: 80
nodePort: 30680
selector:
k8s-app: nginx-v1
clusterIP: 10.10.214.146
clusterIPs:
- 10.10.214.146
EOF
5、kubectl 应用4个yaml文件
创建nfs支持- 各节点
mkdir -p /data/k8s/pv
cd /data/k8s/pv
yum install -y nfs-utils
[root@master1 pv]# kubectl create -f pv-nginx-nfs.yaml
persistentvolume/nginx-nfs-pv created
[root@master1 pv]# kubectl create -f pvc-nginx-nfs.yaml
persistentvolumeclaim/nginx-nfs-pvc created
[root@master1 pv]# kubectl create -f nginx-deployments.yaml
replicationcontroller/nginx-v1 created
[root@master1 pv]# kubectl create -f nginx-service.yaml
service/nginx-v1 created
PV这里
注:所有节点都要安装nfs客户端
yum install nfs-utils -y
---------------------------------------------end
更多推荐
所有评论(0)