k8s-StorageClass的动态存储

环境:ubuntu16.04 + k8s-1.15 + nfs存储节点

为了满足用户动态存储供应需求,使用StorageClass

首先,在ip为192.168.69.132的机器上部署nfs服务

/etc/exports 配置文件如下:

/data/v6 *(rw,sync,no_subtree_check)
/data/v5 *(rw,sync,no_subtree_check)
/data/v4 *(rw,sync,no_subtree_check)
/data/v3 *(rw,sync,no_subtree_check)
/data/v2 *(rw,sync,no_subtree_check)
/data/v1 *(rw,sync,no_subtree_check)

创建pv, pv-storageclass-demo.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
    path: /data/v1
    server: 192.168.69.132
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  storageClassName: stateful-storage
  capacity:
    storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv002
  labels:
    name: pv002
spec:
  nfs:
    path: /data/v2
    server: 192.168.69.132
  accessModes: ["ReadWriteMany"]
  storageClassName: stateful-storage
  capacity:
    storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv003
  labels:
    name: pv003
spec:
  nfs:
    path: /data/v3
    server: 192.168.69.132
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  storageClassName: stateful-storage
  capacity:
    storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv004
  labels:
    name: pv004
spec:
  nfs:
    path: /data/v4
    server: 192.168.69.132
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  storageClassName: stateful-storage
  capacity:
    storage: 10Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv005
  labels:
    name: pv005
spec:
  nfs:
    path: /data/v5
    server: 192.168.69.132
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  storageClassName: stateful-storage
  capacity:
    storage: 10Gi
---

kubectl apply -f pv-storageclass-demo.yaml

创建StorageClass, storage-class-demo.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: stateful-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

kubectl apply -f storage-class-demo.yaml

创建Service和Statefulet, stateful-demo.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc-stateful
  labels:
    app: myapp-svc-stateful
spec: 
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: myapp
spec: 
  serviceName: myapp-svc-stateful
  replicas: 3
  selector:
    matchLabels:
      app: myapp-pod
  template:
    metadata:
      labels:
        app: myapp-pod
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: myappdata
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: myappdata
    spec:
      accessModes: [ "ReadWriteOnce" ]
#      storageClassName: "gluster-dynamic"
      storageClassName: "stateful-storage"
      resources:
        requests:
          storage: 2Gi

kubectl apply -f stateful-demo.yaml

从上图可以看到 myapp-0 对应绑定了pv003,而pv003对应nfs服务器上的目录为/data/v3, 此时可以在此目录下创建一个 index.html文件,内容为: "this is pv003, index!!!"

访问:

curl 10.244.1.174

得到pv003内index.html对应的内容

注意: 定义pv的资源 storageClassName: stateful-storage 与对应定义StorageClass资源的名称一致。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Kubernetes中,StorageClass可以定义以下存储类别: 1. Provisioner(供应商):StorageClass中定义了用于提供存储的供应商或插件。不同的供应商可能有不同的实现和特性,例如:kubernetes.io/aws-ebs、kubernetes.io/azure-disk、kubernetes.io/gce-pd等。 2. Reclaim Policy(回收策略):StorageClass中定义了PV(Persistent Volume)的回收策略,即在PV被释放后,如何处理其底层存储资源。常见的回收策略包括: - Delete(删除):在PV被释放后,自动删除底层存储资源。 - Retain(保留):在PV被释放后,保留底层存储资源,需要手动处理。 - Recycle(回收):在PV被释放后,通过执行清除操作来准备PV供其他PVC使用。 3. Parameters(参数配置):StorageClass中可以定义特定供应商的参数配置,如存储类型、性能要求、存储容量等。这些参数配置取决于具体的存储提供商和插件。 4. Provisioning(供应方式):StorageClass可以定义静态供应或者动态供应。静态供应需要手动创建PV,并将其绑定到PVC。而动态供应则会根据PVC的要求自动创建和绑定匹配的PV。动态供应需要StorageClass与支持动态供应的存储插件结合使用。 通过定义不同的StorageClass,管理员可以为不同的应用程序和需求提供不同类型和配置的存储资源。这样可以灵活地满足应用程序对存储的要求,并实现存储的抽象和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值