zoukankan      html  css  js  c++  java
  • k8s创建使用nfs的StorageClass

    在k8s中pod需要持久化数据就需要挂卷,一般会使用pvc,这样就需要先有StorageClass,记录一下如何创建使用NFS共享存储的StorageClass

            之前已经搭建了一个NFS共享存储了,参考 搭建NFS共享存储

      用下面命令在k8s节点上安装NFS组件,可以用 showmount -e 查看共享存储,可以看到在10.110.30.216的主机上共享了/nfs-data 目录

    yum -y install nfs-utils;
    systemctl enable rpcbind;
    systemctl start rpcbind;

    1、手动创建一个pv和pvc测试一下nfs是否可用,将下面代码保存到文件后执行create安装命令 kubectl create -f pv-pvc.yaml

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-test
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle
      nfs:
        path: /nfs-data
        server: 10.110.30.216
    
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-test
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Mi

     创建之后查看绑定信息,可以看到已经成功绑定了,说明k8s中可以使用这个NFS,可以继续下一步开始创建StorageClass了。

    2、创建StorageClass参考github上的文档,nfs-client是一个自动预配置程序,它使用已有的NFS服务器来支持Kubernetes卷的动态预设置,官方的方法是通过安装一个nfs-client-provisioner,参考【nfs-client配置说明】,安装所用的yaml文件在deploy文件夹中 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy 但是还是需要根据自己情况对文件做一些修改,默认使用的镜像是quay.io/external_storage/nfs-client-provisioner:latest,这个地址有可能无法访问,如果遇到无法访问的的情况可以试试其他的镜像仓库,例如去阿里云的仓库找找。

    另外还提供了一个heml的chart包,地址 【nfs-client-provisioner的HELM包】,我这里集群已经安装helm了,先尝试用用这个方法。

    3、修改chart包,将values.yaml中的部分参数值修改成实际值

    nfs:
      server: 10.110.30.216
      path: /nfs-data
      mountOptions:
    
      reclaimPolicy: Retain

    4、安装

    helm install --name nfs-client-provisioner nfs-client-provisioner/

     可以看到StorageClass已经创建出来了,下面测试一下是否可用,安装下面的nginx测试,注意storageClassName就是我们上面创建的StorageClass的名称

    # nginx.yaml
    
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: my-nginx-demo
      labels:
        app.kubernetes.io/name: my-nginx-demo
        app.kubernetes.io/version: "1.0"
    spec:
      replicas: 1
      serviceName: my-nginx-demo-svc
      selector:
        matchLabels:
          app.kubernetes.io/name: my-nginx-demo
      template:
        metadata:
          labels:
            app.kubernetes.io/name: my-nginx-demo
        spec:
          restartPolicy: Always
          containers:
            - name: my-nginx-demo
              image: "nginx:1.17.9"
              imagePullPolicy: IfNotPresent
              ports:
                - name: http
                  containerPort: 80
                  protocol: TCP
              livenessProbe:
                httpGet:
                  path: /
                  port: http
              readinessProbe:
                httpGet:
                  path: /
                  port: http
              volumeMounts:
              - mountPath: "/usr/share/nginx/html"
                name: html
                
      volumeClaimTemplates:
        - metadata:
            name: html
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 1Gi
            storageClassName: nfs-client
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: my-nginx-demo-svc
      labels:
        app.kubernetes.io/name: my-nginx-demo
        app.kubernetes.io/version: "1.0"
    spec:
      # type: ClusterIP
      # type: LoadBalancer
      type: NodePort
      ports:
        - port: 80
          targetPort: http
          protocol: TCP
          name: http
      selector:
        app.kubernetes.io/name: my-nginx-demo

    kubectl create -f nginx.yaml 安装,然后查看pv、pvc以及pod可以看到都创建成功了,(pod的状态先忽略吧,现在是因为挂载目录为是nginx的文件目录,应该是现在目录为空导致启动异常,暂时先不处理这个了),然后我们看NFS服务端的工项目录,下面也创建了一个文件夹,对应着上面的pv

     我们在nfs共享目录的文件夹里创建个测试文件,看看容器内是否生效

    vi index.html
    然后输入下面内容后保存
    <html><body><h1>Test Page!</h1></body></html>

     创建了文件之后,等一会pod的状态也正常了,通过service访问一下服务,也显示正常了

     通过上面页面也可以看出来,pod挂的卷确实映射到了NFS服务共享出来的目录中了

    5、上面是通过helm模板的方式安装的,如果没有helm,可以手动执行,直接参考 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client 页面中的描述,按照实际情况修改 deploy 文件夹中的yaml文件,然后执行安装就可以,修改的内容主要就是namespace

  • 相关阅读:
    教你在Access数据库中如何使用SQL
    供电计费管理系统(直管户版)南昌市科技进步奖[有软件截图]
    博主制作的DevExpress For D7 的自动汉化安装包[软件截图]
    SVN的Local方式:个人源码管理的好办法
    教务管理系统标准的具有中国特色的软件系统[有软件截图]
    博主制作的DevExpress For D7 的自动汉化安装包[软件截图]
    供电计费管理系统(台区版)与直管户版同为南昌市科技进步奖[有软件截图]
    教务管理系统标准的具有中国特色的软件系统[有软件截图]
    敏捷软件开发
    hdu 1263 STL的嵌套使用
  • 原文地址:https://www.cnblogs.com/yanh0606/p/12658641.html
Copyright © 2011-2022 走看看