zoukankan      html  css  js  c++  java
  • k8s-StorageClass动态创建pvc/pv

    1、配置 Deployment,将里面的对应的参数替换成我们自己的 nfs 配置(nfs-client.yaml)

    kind: Deployment
    apiVersion: extensions/v1beta1
    metadata:
      name: nfs-client-provisioner
    spec:
      replicas: 1
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: nfs-client-provisioner
        spec:
          serviceAccountName: nfs-client-provisioner
          containers:
            - name: nfs-client-provisioner
              image: quay.io/external_storage/nfs-client-provisioner:latest
              volumeMounts:
                - name: nfs-client-root
                  mountPath: /persistentvolumes
              env:
                - name: PROVISIONER_NAME
                  value: fuseim.pri/ifs
                - name: NFS_SERVER
                  value: 10.151.30.57
                - name: NFS_PATH
                  value: /data/k8s
          volumes:
            - name: nfs-client-root
              nfs:
                server: 10.151.30.57
                path: /data/k8s
    

    2、nfs-client-sa.yaml 创建rbac

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nfs-client-provisioner
    
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: nfs-client-provisioner-runner
    rules:
      - apiGroups: [""]
        resources: ["persistentvolumes"]
        verbs: ["get", "list", "watch", "create", "delete"]
      - apiGroups: [""]
        resources: ["persistentvolumeclaims"]
        verbs: ["get", "list", "watch", "update"]
      - apiGroups: ["storage.k8s.io"]
        resources: ["storageclasses"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["events"]
        verbs: ["list", "watch", "create", "update", "patch"]
      - apiGroups: [""]
        resources: ["endpoints"]
        verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
    
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: run-nfs-client-provisioner
    subjects:
      - kind: ServiceAccount
        name: nfs-client-provisioner
        namespace: default
    roleRef:
      kind: ClusterRole
      name: nfs-client-provisioner-runner
      apiGroup: rbac.authorization.k8s.io
    

    3、StorageClass对象了

    nfs-client-class.yaml

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: course-nfs-storage
    provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'
    

    4、创建资源对象

    kubectl create -f nfs-client.yaml
    kubectl create -f nfs-client-sa.yaml
    kubectl create -f nfs-client-class.yaml
    

    5、查看

    kubectl get pods
    NAME                                             READY     STATUS             RESTARTS   AGE
    ...
    nfs-client-provisioner-7648b664bc-7f9pk          1/1       Running            0          7h
    ...
    kubectl get storageclass
    NAME                 PROVISIONER      AGE
    course-nfs-storage   fuseim.pri/ifs   11s
    

    6、测试

    在这个 PVC 对象中添加一个声明 StorageClass 对象的标识,这里我们可以利用一个 annotations 属性来标识 

    test-pvc.yaml(volumes方式)

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pvc
      annotations:
        volume.beta.kubernetes.io/storage-class: "course-nfs-storage"
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Mi

    使用

    test-pod.yaml

    kind: Pod
    apiVersion: v1
    metadata:
      name: test-pod
    spec:
      containers:
      - name: test-pod
        image: busybox
        imagePullPolicy: IfNotPresent
        command:
        - "/bin/sh"
        args:
        - "-c"
        - "touch /mnt/SUCCESS && exit 0 || exit 1"
        volumeMounts:
        - name: nfs-pvc
          mountPath: "/mnt"
      restartPolicy: "Never"
      volumes:
      - name: nfs-pvc
        persistentVolumeClaim:
          claimName: test-pvc
    

     7、测试volumeClaimTemplates 属性来直接使用 StorageClass

    test-statefulset-nfs.yaml

    apiVersion: apps/v1beta1
    kind: StatefulSet
    metadata:
      name: nfs-web
    spec:
      serviceName: "nginx"
      replicas: 3
      template:
        metadata:
          labels:
            app: nfs-web
        spec:
          terminationGracePeriodSeconds: 10
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
      volumeClaimTemplates:
      - metadata:
          name: www
          annotations:
            volume.beta.kubernetes.io/storage-class: course-nfs-storage
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 1Gi
    

    8、检查

     

    kubectl create -f test-statefulset-nfs.yaml
    statefulset.apps "nfs-web" created
    kubectl get pods
    NAME                                             READY     STATUS              RESTARTS   AGE
    ...
    nfs-web-0                                        1/1       Running             0          1m
    nfs-web-1                                        1/1       Running             0          1m
    nfs-web-2                                        1/1       Running             0          33s
    
    kubectl get pvc
    NAME            STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
    ...
    www-nfs-web-0   Bound     pvc-cc36b3ce-8b50-11e8-b585-525400db4df7   1Gi        RWO            course-nfs-storage    2m
    www-nfs-web-1   Bound     pvc-d38285f9-8b50-11e8-b585-525400db4df7   1Gi        RWO            course-nfs-storage    2m
    www-nfs-web-2   Bound     pvc-e348250b-8b50-11e8-b585-525400db4df7   1Gi        RWO            course-nfs-storage    1m
    ...
    
    kubectl get pv
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                   STORAGECLASS          REASON    AGE
    ...                                                        1d
    pvc-cc36b3ce-8b50-11e8-b585-525400db4df7   1Gi        RWO            Delete           Bound       default/www-nfs-web-0   course-nfs-storage              4m
    pvc-d38285f9-8b50-11e8-b585-525400db4df7   1Gi        RWO            Delete           Bound       default/www-nfs-web-1   course-nfs-storage              4m
    pvc-e348250b-8b50-11e8-b585-525400db4df7   1Gi        RWO            Delete           Boun
    
    
    ls /data/k8s/
    ...
    default-www-nfs-web-0-pvc-cc36b3ce-8b50-11e8-b585-525400db4df7
    default-www-nfs-web-1-pvc-d38285f9-8b50-11e8-b585-525400db4df7
    default-www-nfs-web-2-pvc-e348250b-8b50-11e8-b585-525400db4df7
    
  • 相关阅读:
    workerman需要的php模块posix、pcntl、sysvshm、sysvmsg缺少,怎么办
    Linux操作:
    推荐!手把手教你使用Git
    Ninject简介(转)
    新年奉献MVC+EF(CODEFIRST)+EASYUI医药MIS系统(转)
    微软开源代码
    .NET分布式事务处理(转)
    IIS负载均衡(转)
    借助LVS+Keepalived实现负载均衡(转)
    WCF和ASP.NET Web API在应用上的选择(转)
  • 原文地址:https://www.cnblogs.com/zhaojingyu/p/12201298.html
Copyright © 2011-2022 走看看