前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >研发工程师玩转Kubernetes——PVC使用storageClassName选择PV

研发工程师玩转Kubernetes——PVC使用storageClassName选择PV

作者头像
方亮
发布2023-08-10 15:09:44
3950
发布2023-08-10 15:09:44
举报
文章被收录于专栏:方亮方亮

StorageClass的设计是用于描述如何动态创建PV。最开始时,管理员需要一次性申请好所有的PV,使用者只要设计PVC申请PV绑定即可。但是如果一旦PV不够用了,管理员又要手工去申请PV来满足需求。为了降低管理员的工作,StorageClass可以动态去创建PV,即PVC发现PV不够后,直接通过其指定的storageClassName来动态创建PV。 本文只介绍PVC如何使用storageClassName选择已经创建好的PV。

StorageClass清单

代码语言:javascript
复制
# local_storage_class_immediate.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage-class-immediate
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate

我们创建了一个名字叫local-storage-class,使用本地存储的StorageClass。它的绑定类型是Immediate(立即)。Immediate 模式表示一旦创建了 PersistentVolumeClaim 也就完成了卷绑定。

PV清单

这次我们创建的PV没有设置Label,而是设置了storageClassName字段为上述StorageClass的名字。

代码语言:javascript
复制
# local_storage_class_immediate_pv_512k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-storage-class-immediate-pv-512k
spec:
  capacity:
    storage:  512Ki
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage-class-immediate
  local:
    path: /tmp
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud
代码语言:javascript
复制
# local_storage_class_immediate_pv_1024k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-storage-class-immediate-pv-1024k
spec:
  capacity:
    storage:  1024Ki
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage-class-immediate
  local:
    path: /tmp
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud

PVC清单

这个清单也没使用spec.selector对PV的Label做选择,而是使用了storageClassName。

代码语言:javascript
复制
# local_storage_class_immediate_pvc_600k.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-storage-class-immediate-pvc-600k
spec:
  resources:
    requests:
      storage: 600Ki
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage-class-immediate

测试

为了验证测试,我们同时创建下面这个PV,它只是在storage上满足上述PVC申请。

代码语言:javascript
复制
# default_storage_class_pv_1024k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-storage-class-pv-1024k
  labels:
    volume: lb-default-storage-class-pv
spec:
  capacity:
    storage: 1Mi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /tmp
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud

使用下面指令创建上述资源

代码语言:javascript
复制
kubectl create -f local_storage_class_immediate.yaml -f default_storage_class_pv_1024k.yaml  -f local_storage_class_immediate_pv_1024k.yaml -f local_storage_class_immediate_pv_512k.yaml -f local_storage_class_immediate_pvc_600k.yaml 

查看PVC的状态,可以发现系统让storageClassName名相同的PV和PVC进行了绑定。

代码语言:javascript
复制
kubectl describe persistentvolumeclaims  local-storage-class-immediate-pvc-600k 
代码语言:javascript
复制
Name:          local-storage-class-immediate-pvc-600k
Namespace:     default
StorageClass:  local-storage-class-immediate
Status:        Bound
Volume:        local-storage-class-immediate-pv-1024k
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      1Mi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       <none>
Events:        <none>

为了进一步测试,我们再创建相同配置,但是名字不同的PVC,看它是否会选择没有设置相同storageClassName的PV。

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-storage-class-immediate-pvc-600k-1
spec:
  resources:
    requests:
      storage: 600Ki
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage-class-immediate
代码语言:javascript
复制
kubectl describe persistentvolumeclaims local-storage-class-immediate-pvc-600k-1
代码语言:javascript
复制
Name:          local-storage-class-immediate-pvc-600k-1
Namespace:     default
StorageClass:  local-storage-class-immediate
Status:        Pending
Volume:        
Labels:        <none>
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
VolumeMode:    Filesystem
Used By:       <none>
Events:
  Type     Reason              Age   From                         Message
  ----     ------              ----  ----                         -------
  Warning  ProvisioningFailed  6s    persistentvolume-controller  no volume plugin matched name: kubernetes.io/no-provisioner

可以看到即使storage满足PVC申请的大小,但是由于storageClassName不同,它还是没有选择default-storage-class-pv-1024k这个PV。

代码语言:javascript
复制
kubectl describe persistentvolume default-storage-class-pv-1024k 
代码语言:javascript
复制
Name:              default-storage-class-pv-1024k
Labels:            volume=lb-default-storage-class-pv
Annotations:       <none>
Finalizers:        [kubernetes.io/pv-protection]
StorageClass:      
Status:            Available
Claim:             
Reclaim Policy:    Retain
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          1Mi
Node Affinity:     
  Required Terms:  
    Term 0:        kubernetes.io/hostname in [ubuntud]
Message:           
Source:
    Type:  LocalVolume (a persistent volume backed by local storage on a node)
    Path:  /tmp
Events:    <none>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • StorageClass清单
  • PV清单
  • PVC清单
  • 测试
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档