首页 > 其他分享 >每天一点基础K8S--K8S中的存储类storage Class

每天一点基础K8S--K8S中的存储类storage Class

时间:2022-12-24 00:22:16浏览次数:50  
标签:node -- worker storage nfs provisioner K8S root

存储类storageClass

1、官网链接

https://kubernetes.io/zh-cn/docs/concepts/storage/storage-classes/

2、storageClass资源

# 在前面持久卷的实验中看到,对于静态绑定的pv,完成流程是1、创建PV;2、创建PVC;3、POD进行volumeMounts。

# 如果每次手动创建PV有点麻烦,那么可以利用storageClass实现动态PV创建,就不用每次都手动创建PV了。

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

# StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数,一旦创建了对象就不能再对其更新。
provisioner: AzureFile、AzureDisk、CephFS、Cinder、FC、NFS、GlusterFS、iSCSI、RBD、Local等等

parameters:对接不同存储时,使用到的参数不一样,可以根据官网查看示例。

3、使用storageClass的大致步骤

pod通过volume Mounts挂载一个数据库volume,该volume类型为PVC。但是PV并没有提前创建,而是通过storageClass完成PV的动态创建。storageClass中指定了提供者provisioner,provisioner可以关联相应类型的存储资源,如NFS。

4、利用storageClass动态创建存储卷

4.1、创建serviceaccount nfs-provisioner
[root@master-worker-node-1 storage]# kubectl create serviceaccount nfs-provisioner
serviceaccount/nfs-provisioner created
4.2、为sa nfs-provisioner授权
[root@master-worker-node-1 storage]# kubectl create clusterrolebinding nfs-provisioner-cluster-role-binding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner
clusterrolebinding.rbac.authorization.k8s.io/nfs-provisioner-cluster-role-binding created
4.3、安装provisioner程序
# 此处以POD运行一个provisioner
[root@master-worker-node-1 storage]# cat nfs-provisioner.yaml 
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      func: nfs-provisioner
  template:
    metadata:
      labels:
        func: nfs-provisioner
    spec:    
      serviceAccount: nfs-provisioner
      containers:
      - name: nfs-provisioner
        image: groundhog2k/nfs-subdir-external-provisioner:v3.2.0
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: nfs
          mountPath: /persistentvolumes
        env:
        - name: PROVISIONER_NAME
          value: test.com/nfs
        - name: NFS_SERVER
          value: 192.168.122.106
        - name: NFS_PATH
          value: /mnt/dir-6
      volumes:
      - name: nfs
        nfs: 
          server: 192.168.122.106
          path: /mnt/dir-6


[root@master-worker-node-1 storage]# kubectl apply -f nfs-provisioner.yaml 
deployment.apps/nfs-provisioner created

[root@master-worker-node-1 storage]# kubectl get pods -o wide 
NAME                              READY   STATUS    RESTARTS   AGE   IP             NODE                 NOMINATED NODE   READINESS GATES
nfs-provisioner-9f679b579-mxjrl   1/1     Running   0          86s   10.244.31.19   only-worker-node-3   <none>           <none>


[root@master-worker-node-1 storage]# kubectl exec -it nfs-provisioner-9f679b579-mxjrl  -- bash 
[root@nfs-provisioner-9f679b579-mxjrl /]# 
[root@nfs-provisioner-9f679b579-mxjrl /]# df -Th
Filesystem                 Type     Size  Used Avail Use% Mounted on
overlay                    overlay   20G  6.5G   14G  33% /
tmpfs                      tmpfs     64M     0   64M   0% /dev
tmpfs                      tmpfs    3.8G     0  3.8G   0% /sys/fs/cgroup
192.168.122.106:/mnt/dir-6 nfs4      20G  6.1G   14G  31% /persistentvolumes

4.4 创建storageClass以实现动态创建PV
# 创建storageClass
[root@master-worker-node-1 storage]# cat storageclass-1.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: from-nfs
volumeBindingMode: Immediate    # 默认immediate,表示创建PVC立即进行绑定。只有azuredisk和AWSelasticblockstore支持其他值,具体可以查看官网。
provisioner: test.com/nfs       # 此处与nfs-provisioner环境变量中的PROVISIONER_NAME保持一致。
#parameters:        # 在nfs-provisioner中指定了,这里就不写了。
#  server: 192.168.122.106
#  path: /mnt/dir-6
#  readOnly: "true"
# 查看创建的storageclass
[root@master-worker-node-1 storage]# kubectl apply -f storageClass-1.yaml 
storageclass.storage.k8s.io/from-nfs created

[root@master-worker-node-1 storage]# kubectl get storageclass
NAME       PROVISIONER    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
from-nfs   test.com/nfs   Delete          Immediate           false                  8s
4.5 创建PVC,并通过storageClass自动创建PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-auto
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 300Mi
  storageClassName: from-nfs
# PVC创建成功,并完成了关联。
[root@master-worker-node-1 storage]# kubectl get pvc 
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-auto   Bound    pvc-42142c11-20e7-44ac-b210-0a520f2fc766   300Mi      RWO            from-nfs       5s
[root@master-worker-node-1 storage]# 

# 自动创建了一个PV
[root@master-worker-node-1 storage]# kubectl get pv 
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   REASON   AGE
pvc-42142c11-20e7-44ac-b210-0a520f2fc766   300Mi      RWO            Delete           Bound    default/test-auto   from-nfs                37s
4.6 Pod卷挂载(略)

5、小结

1、可以利用storageClass进行动态创建PV,而不是手动创建;

2、使用StorageClass动态创建PV的步骤:1、先完成provisioner配置;2、完成storageclass配置;3、创建PVC;4、Pod挂载数据卷

标签:node,--,worker,storage,nfs,provisioner,K8S,root
From: https://www.cnblogs.com/woshinidaye123/p/17001872.html

相关文章

  • 航天技术导论2
    动量的深刻含义问题1:积分不对吧?我积分的结果:v+c1=-ue(lnm+c2)正常来说,应该是+C,而非-v0吧??还有-lnm0,为啥是“-”?所以这个积分作为解释很牵强啊!如果说是积分这个式子求......
  • 致20岁的自己:平淡却充满坎坷的一年
    长文警告,本文长达不知道多少字(本文同时发布于博客园:)【错峰跨年第一弹】马上要迎来人生的第二个十年,马上澡盆就要奔三了[doge]不得不说这可能是最糟糕的一个生日,马上期......
  • 【与达梦同行】【2022.12.20 终版,内置AutoParaAdj3.0_20221220版本,适配复杂密码】达梦
    0.脚本作者Lucifer([email protected])yuanzijian([email protected])1.达梦一键安装脚本完整版附件内容(附件在本文末尾)1.1.脚本文件夹soft1.DMShellInstall:数据库......
  • buuoj-pwn-pwnable_bf
    buuoj-pwn-pwnable_bf总结bss段上存储libc地址的地方有很多,最值得注意的就是stdin、stdoutbrainfuck的认识(虽然这题没用[、]),如下:题目分析简单一看就知道本......
  • Vuex
    简介​  在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。......
  • Abp框架上手实战二:添加新菜单
    1.打开PageNames.cs文件,添加如下代码publicconststringDepartments="Departments";2.打开PermissionNames文件,添加如下代码publicconststringPages_Depart......
  • 代码审计之PhpStorm环境调试
    前言不管是在学习php开发还是在学习代码审计,都离不开phpstorm的调试,这款工具的开发极大地便利了程序员以及安全人员的调用,因此学会如何去使用phpstorm调试是必备的一项技......
  • Abp框架上手实战一:项目搭建并初始化数据库
    1.创建项目模板地址:https://aspnetboilerplate.com/Templates    2.框架目录结构   3.替换数据库组件框架默认使用是SqlServer数据库,此次项目实战采用M......
  • 检查电脑中是否存在危险证书
    检查电脑中是否存在危险证书原文:https://kompost.cn/posts/check-and-remove-untrusted-cert/下载软件:https://learn.microsoft.com/zh-cn/sysinternals/downloads/si......
  • 力扣-303-区域和检索-数组不可变
    前缀和入门模板题我想着“前缀和”嘛,那就整一个“前缀和”出来,但是好像空间效率特别差感觉有点空间换时间的意思classNumArray{private: vector<int>prefixSum;pu......