K8S学习之基础二十五:k8s存储类之storageclass
k8s存储类之StorageClass
k8s可以通过StorageClass,动态生成一个pv供k8s的pvc使用
每个StorageClass都包含字段provisioner,parameters和reclaimPolicy
具体来说,StorageClass定义一下两部分:
1、PV属性,比如大小、类型等
2、创建PV需要使用的存储插件,如Ceph、NFS等
以NFS为例,需要一个 nfs-client的自动装载程序,称之为provisioner,该程序会使用已经配置好的NFS服务器自动创建持久卷,也就是自动帮我们创建PV
raclimPolicy:回收策略,默认删除
安装nfs provisioner,用于配合存储类动态生成pv,这里以pod模式运行
将nfs-subdir-external-provisioner.tar.gz上传到harbor仓库
创建sa,使pod可以操作k8s
vi servieaccount.yaml
serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-provisioner
对sa授权
kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner
安装nfs-provisioner
# 创建目录
mkdir /data/nfs_pro -p
echo '/data/nfs_pro 172.16.80.131/24(rw,no_root_squash)' >> /etc/exports
exportfs -arv
创建storageclass,动态供给pv
vi nfs-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
provisioner: example.com/nfs
创建pvc,绑定动态生成的pv
vi claim.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim1
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 10Mi
storageClassName: nfs
创建pod客户端
vi nfs-deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-provisioner
spec:
selector:
matchLabels:
app: nfs-provisioner
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-provisioner
spec:
serviceAccount: nfs-provisioner
containers:
- name: nfs-provisioner
image: 172.16.80.140/nfs-subdir-external/nfs-subdir-external-provisioner:4.0.0
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: example.com/nfs
- name: NFS_SERVER
value: 172.16.80.131
- name: NFS_PATH
value: /data/nfs_pro/
volumes:
- name: nfs-client-root
nfs:
server: 172.16.80.131
path: /data/nfs_pro/