k8s + nfs 动态存储模式
Kubernetes使用NFS共享存储有两种方式:手动方式静态创建所需要的PV和PVC;通过创建PVC动态地创建对应PV,无需手动创建PV。动态创建PV,是指在现有PV不满足PVC的请求时,可以使用存储分类(StorageClass),描述具体过程为:PV先创建分类,PVC请求已创建的某个类(StorageClass)的资源,这样就达到动态配置的效果。即通过一个叫 Storage Class的对象
Kubernetes使用NFS共享存储有两种方式:
- 手动方式静态创建所需要的PV和PVC;
- 通过创建PVC动态地创建对应PV,无需手动创建PV。
动态创建PV,是指在现有PV不满足PVC的请求时,可以使用存储分类(StorageClass),描述具体过程为:PV先创建分类,PVC请求已创建的某个类(StorageClass)的资源,这样就达到动态配置的效果。即通过一个叫 Storage Class的对象由存储系统根据PVC的要求自动创建。
其中动态方式是通过StorageClass来完成的,这是一种新的存储供应方式。动态卷供给能力让管理员不必进行预先创建存储卷,而是随用户需求进行创建。
使用StorageClass有什么好处呢?除了由存储系统动态创建,节省了管理员的时间,还有一个好处是可以封装不同类型的存储供PVC选用。
在StorageClass出现以前,PVC绑定一个PV只能根据两个条件,一个是存储的大小,另一个是访问模式。在StorageClass出现后,等于增加了一个绑定维度。
1、下载动态PV配置yaml文件
https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy
[root@master1 pv-d]# ls
class.yaml deployment.yaml rbac.yaml
更改deployment.yaml,将nfs地址和路径修改为自己的本地地址
2、依次应用yaml文件
[root@master1 pv-d]# kubectl apply -f rbac.yaml
serviceaccount/nfs-client-provisioner created
clusterrole.rbac.authorization.k8s.io/nfs-client-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/run-nfs-client-provisioner created
role.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
rolebinding.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
[root@master1 pv-d]# kubectl apply -f class.yaml
storageclass.storage.k8s.io/managed-nfs-storage created
[root@master1 pv-d]# kubectl apply -f deployment.yaml
deployment.apps/nfs-client-provisioner created
3、创建nginx-svc.yaml文件
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: nginx
selector:
app: nginx
clusterIP: None
创建pod nginx-stfset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
imagePullSecrets:
- name: huoban-harbor
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "managed-nfs-storage"
resources:
requests:
storage: 1Gi
应用两个yaml文件
[root@master1 pv-d]# kubectl apply -f nginx-svc.yaml
service/nginx created
[root@master1 pv-d]# kubectl apply -f nginx-stfset.yaml
statefulset.apps/web created
如果pod一直处于pending状态,
#在/etc/kubernetes/manifests/kube-apiserver.yaml配置文件中加入如下代码:
- --feature-gates=RemoveSelfLink=false
#重新应用apiserver yaml文件,同时重新创建所有NFS yaml文件即可。
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
更多推荐
所有评论(0)