k8s存储类:storageclass

2023-11-15 / 0 评论 / 175 阅读
温馨提示:
本文最后更新于 2023-11-14,已超过半年没有更新,若内容或图片失效,请留言反馈。

storageclass,存储类,是K8s工程师为了解决PV和PVC绑定的复杂繁琐问题,提供自动的PV策略机制,不同的存储类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。 存储类的作用就是创建PV的模板,而k8s集群管理员通过创建storageclass就可以动态生成一个存储卷pv供k8s pvc使用。

每个 StorageClass 都包含 provisioner、parameters 和 reclaimPolicy 字段, 这些字段会在 StorageClass 需要动态制备 PersistentVolume 时会使用到。

StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数。

StorageClass配置主要定义以下两部分:
1、PV的属性 ,比如存储的大小、类型等;
2、创建这种PV需要使用到的存储插件,比如Ceph、NFS等..

StorageClass的字段
[root@ctdmaster1 sfs]# kubectl explain storageclass
KIND: StorageClass
VERSION: storage.k8s.io/v1
DESCRIPTION:
StorageClass describes the parameters for a class of storage for which
PersistentVolumes can be dynamically provisioned.
StorageClasses are non-namespaced; the name of the storage class according
to etcd is in ObjectMeta.Name.
FIELDS:
allowVolumeExpansion
allowedTopologies <[]Object>
apiVersion
kind
metadata
mountOptions <[]string>
parameters <map[string]string>
provisioner -required-
reclaimPolicy
volumeBindingMode
provisioner:供应商,storageclass需要有一个供应者,用来确定我们使用什么样的存储来创建pv,常见的provisioner如下
https://kubernetes.io/zh/docs/concepts/storage/storage-classes/):
provisioner既可以由内部供应商提供,也可以由外部供应商提供,以NFS为例,要想使用NFS,我们需要一个nfs-client的自动装载程序,称之为provisioner,这个程序会使用我们已经配置好的NFS服务器自动创建持久卷,也就是自动帮我们创建PV。

安装nfs provisioner,用于配合存储类动态生成pv

把nfs-subdir-external-provisioner.tar.gz上传到node1和node2,手动解压。

ctr -n=k8s.io images import nfs-subdir-external-provisioner.tar.gz
k8s存储类:storageclass
1、创建SA账号
[root@ctdmaster1 storageclass]# vim serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-provisioner

2、对SA账号授权

3、安装配置provisioner程序
1)创建挂载目录: [root@ctdmaster1 storageclass]# mkdir /data/nfs_pro -pv
2)、修改nfs挂载目录
k8s存储类:storageclass
3)、创建配置文件
[root@ctdmaster1 storageclass]# vim 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: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0
    imagePullPolicy: IfNotPresent
    volumeMounts:
    • name: nfs-client-root
      mountPath: /persistentvolumes
      env:
    • name: PROVISIONER_NAME
      value: example.com/nfs
    • name: NFS_SERVER
      value: 192.168.40.160
    • name: NFS_PATH
      value: /data/nfs_pro
      volumes:
  • name: nfs-client-root
    nfs:
    server: 192.168.40.160
    path: /data/nfs_pro

    4)、执行更新provisioner配置
    [root@ctdmaster1 storageclass]# kubectl apply -f nfs-deployment.yaml
    deployment.apps/nfs-provisioner created
    5)、检查安装是否正常启动
    k8s存储类:storageclass

4、
4.1创建storageclass,动态供给PV
[root@ctdmaster1 storageclass]# vim nfs-storageclass.yaml

[root@ctdmaster1 storageclass]# kubectl apply -f nfs-storageclass.yaml
storageclass.storage.k8s.io/nfs created
4.2检查是否执行成功
[root@ctdmaster1 storageclass]# kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs example.com/nfs Delete Immediate false

5 创建pvc,通过storageclass动态生成pv

评论一下?

OωO
取消
载入天数...载入时分秒...
powered by 杂记本