StorageClass作為對存儲資源的抽象定義, 對用戶設置的NFS申請屏蔽后端存儲的細節, 一方面減少了用戶對於存儲資源細節的關注, 另一方面減輕了管理員手工管理pv的工作, 由系統自動完成pv的創建和綁定
StorageClass本身是一種資源對象, 不提供pv的創建, 這里以NFS共享存儲為例, 使用nfs-client-provisioner組件連接nfs服務器以及pv的創建
案例
1.安裝nfs服務:省略
2.克隆nfs-client-provisioner組件代碼
git clone https://github.com/kubernetes-incubator/external-storage.git
cd external-storage/nfs-client/deploy
3.修改deployment文件, 主要修改nfs服務器地址和nfs提供的目錄
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-client-provisioner
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/wangfang-dev/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 192.168.1.48
- name: NFS_PATH
value: /data/nfs
volumes:
- name: nfs-client-root
nfs:
server: 192.168.1.48
path: /data/nfs
4.StorageClass
此處可以不修改,或者修改provisioner的名字,需要與上面的deployment的PROVISIONER_NAME名字一致。
cat class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: default
provisioner: fuseim.pri/ifs
5.應用創建
kubectl apply -f deployment.yaml
kubectl apply -f class.yaml
kubectl apply -f rbac.yaml
7.創建pvc和deployment資源
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-deployment-pvc
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.12
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
persistentVolumeClaim:
claimName: nginx-deployment-pvc
8.驗證
自動創建pv
PV以 ${namespace}-${pvcName}-${pvName}的命名格式提供(在NFS服務器上)
PV回收的時候以 archieved-${namespace}-${pvcName}-${pvName} 的命名格式(在NFS服務器上)