美文网首页
k8s使用OSS作为pod存储

k8s使用OSS作为pod存储

作者: 小李飞刀_lql | 来源:发表于2022-01-09 20:43 被阅读0次

    准备OSS

    1641608040158.png

    YAML

    rbac.yaml

    # This YAML file contains all RBAC objects that are necessary to run external
    # CSI provisioner.
    #
    # In production, each CSI driver deployment has to be customized:
    # - to avoid conflicts, use non-default namespace and different names
    #   for non-namespaced entities like the ClusterRole
    # - decide whether the deployment replicates the external CSI
    #   provisioner, in which case leadership election must be enabled;
    #   this influences the RBAC setup, see below
     
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin
      # replace with the same namespace name with plugin
      namespace: kube-system
     
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: alicloud-csi-plugin
    rules:
      - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["get", "list"]
      - apiGroups: [""]
        resources: ["persistentvolumes"]
        verbs: ["get", "list", "watch", "update", "create", "delete"]
      - apiGroups: [""]
        resources: ["persistentvolumeclaims"]
        verbs: ["get", "list", "watch", "update"]
      - apiGroups: ["storage.k8s.io"]
        resources: ["storageclasses"]
        verbs: ["get", "list", "watch"]
      - apiGroups: ["storage.k8s.io"]
        resources: ["csinodes"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["events"]
        verbs: ["get", "list", "watch", "create", "update", "patch"]
      - apiGroups: [""]
        resources: ["endpoints"]
        verbs: ["get", "watch", "list", "delete", "update", "create"]
      - apiGroups: [""]
        resources: ["configmaps"]
        verbs: ["get", "watch", "list", "delete", "update", "create"]
      - apiGroups: [""]
        resources: ["nodes"]
        verbs: ["get", "list", "watch"]
      - apiGroups: ["csi.storage.k8s.io"]
        resources: ["csinodeinfos"]
        verbs: ["get", "list", "watch"]
      - apiGroups: ["storage.k8s.io"]
        resources: ["volumeattachments"]
        verbs: ["get", "list", "watch", "update"]
      - apiGroups: ["snapshot.storage.k8s.io"]
        resources: ["volumesnapshotclasses"]
        verbs: ["get", "list", "watch"]
      - apiGroups: ["snapshot.storage.k8s.io"]
        resources: ["volumesnapshotcontents"]
        verbs: ["create", "get", "list", "watch", "update", "delete"]
      - apiGroups: ["snapshot.storage.k8s.io"]
        resources: ["volumesnapshots"]
        verbs: ["get", "list", "watch", "update"]
      - apiGroups: ["apiextensions.k8s.io"]
        resources: ["customresourcedefinitions"]
        verbs: ["create", "list", "watch", "delete"]
     
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: alicloud-csi-plugin
    subjects:
      - kind: ServiceAccount
        name: admin
        namespace: kube-system
    roleRef:
      kind: ClusterRole
      name: alicloud-csi-plugin
      apiGroup: rbac.authorization.k8s.io
    

    oss-plugin.yaml

    apiVersion: storage.k8s.io/v1beta1
    kind: CSIDriver
    metadata:
      name: ossplugin.csi.alibabacloud.com
    spec:
      attachRequired: false
    ---
    # This YAML defines all API objects to create RBAC roles for csi node plugin.
    kind: DaemonSet
    apiVersion: apps/v1
    metadata:
      name: csi-ossplugin
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: csi-ossplugin
      template:
        metadata:
          labels:
            app: csi-ossplugin
        spec:
          tolerations:
          - operator: Exists
          priorityClassName: system-node-critical
          serviceAccount: admin
          hostNetwork: true
          hostPID: true
          containers:
          - name: driver-registrar
            image: registry.cn-hangzhou.aliyuncs.com/acs/csi-node-driver-registrar:v1.1.0
            imagePullPolicy: Always
            lifecycle:
              preStop:
                exec:
                  command: ["/bin/sh", "-c", "rm -rf /registration/ossplugin.csi.alibabacloud.com /registration/ossplugin.csi.alibabacloud.com-reg.sock"]
            args:
            - "--v=5"
            - "--csi-address=/var/lib/kubelet/plugins/ossplugin.csi.alibabacloud.com/csi.sock"
            - "--kubelet-registration-path=/var/lib/kubelet/plugins/ossplugin.csi.alibabacloud.com/csi.sock"
            env:
            - name: KUBE_NODE_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: spec.nodeName
            volumeMounts:
            - name: kubelet-dir
              mountPath: /var/lib/kubelet/
            - name: registration-dir
              mountPath: /registration
     
          - name: csi-ossplugin
            securityContext:
              privileged: true
              capabilities:
                add: ["SYS_ADMIN"]
              allowPrivilegeEscalation: true
            image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.14.8.32-c77e277b-aliyun
            imagePullPolicy: "Always"
            args:
            - "--endpoint=$(CSI_ENDPOINT)"
            - "--v=5"
            - "--driver=ossplugin.csi.alibabacloud.com"
            - "--nodeid=$(KUBE_NODE_NAME)"
            env:
            - name: CSI_ENDPOINT
              value: unix://var/lib/kubelet/plugins/ossplugin.csi.alibabacloud.com/csi.sock
            - name: KUBE_NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            volumeMounts:
            - name: kubelet-dir
              mountPath: /var/lib/kubelet/
              mountPropagation: "Bidirectional"
            - name: etc
              mountPath: /host/etc
            - mountPath: /var/log/
              name: host-log
            - mountPath: /host/usr/
              name: flexvolumedir
          volumes:
          - name: kubelet-dir
            hostPath:
              path: /var/lib/kubelet/
              type: Directory
          - name: registration-dir
            hostPath:
              path: /var/lib/kubelet/plugins_registry
              type: DirectoryOrCreate
          - name: etc
            hostPath:
              path: /etc
          - name: flexvolumedir
            hostPath:
              path: /usr/
          - name: host-log
            hostPath:
              path: /var/log/
      updateStrategy:
        type: RollingUpdate
    

    pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-csi-pv
      labels:
        alicloud-pvname: oss-csi-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # set volumeHandle same value pv name
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "*****" #重要
          url: "******" #重要
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          akId: "****" #重要
          akSecret: "*******" #重要
          path: "/"
    

    pvc.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: oss-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: oss-csi-pv
    

    deploy.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-oss
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
            volumeMounts:
              - name: oss-pvc
                mountPath: "/data"
          volumes:
            - name: oss-pvc
              persistentVolumeClaim:
                claimName: oss-pvc
    

    测试验证

    #创建rbac权限
    $ kubectl create -f rbac.yaml 
    serviceaccount/admin created
    clusterrole.rbac.authorization.k8s.io/alicloud-csi-plugin created
    clusterrolebinding.rbac.authorization.k8s.io/alicloud-csi-plugin created
     
     
    #创建oss-plugin
    $ kubectl create -f oss-plugin.yaml
     
    #检查创建情况
    $ kubectl get pod -n kube-system | grep csi-oss
    kube-system             csi-ossplugin-9jdhw                                  2/2     Running             0          55m
    kube-system             csi-ossplugin-f7n5f                                  2/2     Running             0          55m
    kube-system             csi-ossplugin-vgkcp                                  2/2     Running             0          55m
     
    #查验CSIDriver安装情况
    $ kubectl get CSIDriver
    NAME                             CREATED AT
    ossplugin.csi.alibabacloud.com   2020-06-23T14:48:18Z
     
    #创建pv
    $ kubectl create -f pv.yaml
     
    #创建pvc
    $ kubectl create -f pvc.yaml
     
    #检验一下阿里云oss是否可以成功挂载到k8s集群中做pv使用
    $ kubectl create -f deploy.yaml
    
    [root@k8s-m1 k8s-oss]# kubectl exec -it deployment-oss-74b8b489ff-t6ml4 -- bash
    root@deployment-oss-74b8b489ff-t6ml4:/# cd data
    root@deployment-oss-74b8b489ff-t6ml4:/data# ls
    2021  user 1.txt
    
    1641608373577.png

    相关文章

      网友评论

          本文标题:k8s使用OSS作为pod存储

          本文链接:https://www.haomeiwen.com/subject/ubcpcrtx.html