One - One Code All

Blog Content

k8s 挂载阿里云OSS

容器化 运维   2020-11-12 20:27:48

基础知识

  • 为了实现Pod内数据的存储管理,Kubernetes引入了两个API资源:Persistent Volume(持久卷,以下简称PV)和Persistent Volume Claim(持久卷申请,以下简称PVC)。

    • PV是Kubernetes集群中的一种网络存储实现,跟Node一样,也是属于集群的资源。PV跟Docker里的Volume(卷)类似,不过会有独立于Pod的生命周期。

    • PVC是用户的一个请求,跟Pod类似。Pod消费Node的资源,PVC消费PV的资源。

  • 总结

    1. pv 实现k8s网络存储,PVC(persistent volume claim)消费PV的资源。

    2. 创建pv, 创建pvc,创建pod再消费pvc.

  • 查看命令

    #### 部署
    kubectl apply -f pv.yaml
    kubectl apply -f pod-pvc.yaml

    #### 查看pv
    kubectl get pv

    ####查看pvc
    kubectl get pvc


k8s 挂载OSS

创建pv

  • pv-oss:  配置storageClassName: oss,标识此PV为oss存储类型,只会与oss类型的PVC绑定;

    apiVersion: v1
    kind: PersistentVolume
    metadata:
     name: pv-oss
     labels:
       alicloud-pvname: pv-oss
    spec:
     capacity:
       storage: 5Gi
     accessModes:
       - ReadWriteMany
     storageClassName: oss
     flexVolume:
       driver: "alicloud/oss"
       options:
         bucket: "docker"
         url: "oss-cn-hangzhou.aliyuncs.com"
         akId: "***"
         akSecret: "***"
         otherOpts: "-o max_stat_cache_size=0 -o allow_other"
  • options支持的参数:

    bucket:目前只支持挂载 Bucket,不支持挂载 Bucket 下面的子目录或文件。

    url: OSS Bucket的endpoint,挂载 OSS 的接入域名。

    akId: 用户的 access id 值。

    akSecret:用户的 access secret 值。

    otherOpts: 挂载 OSS 时支持定制化参数输入,格式为: -o

  • 执行创建命令:

    kubectl apply -f pv-oss.yaml


创建PVC

  • PVC通过配置selector,指定与创建的oss PV进行绑定;

  • pvc-oss.yaml

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
     name: pvc-oss
    spec:
     accessModes:
       - ReadWriteMany
     storageClassName: oss
     resources:
       requests:
         storage: 5Gi
     selector:
       matchLabels:
         alicloud-pvname: pv-oss
  • 执行创建命令

    kubectl apply -f pvc-oss.yaml


创建pod

  • yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: oss-static
     labels:
       app: nginx
    spec:
     replicas: 1
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx
           ports:
           - containerPort: 80
           volumeMounts:
             - name: pvc-oss
               mountPath: "/data-oss"
             - name: pvc-oss
               mountPath: "/data1"
           livenessProbe:
             exec:
               command:
               - sh
               - -c
               - cd /data
             initialDelaySeconds: 30
             periodSeconds: 30
         volumes:
           - name: pvc-oss
             persistentVolumeClaim:
               claimName: pvc-oss
  • 挂载说明

    OSSFS通过s3fs进行bucket挂载,是在用户态挂载的文件系统(FUSE);OSSFS在kubelet重置的时候会重新启动,这时容器内部的bind目录已经不可用,需要重启容器;配置健康检查能保证容器内oss目录不可用时重启容器,进而重新bind oss目录;(升级最近版本flexvolume可解决此问题)

  • 执行创建命令

    kubectl apply -f pod-pvc.yaml




上一篇:Kubernetes动态扩缩容,只需告诉deployment一个新的 pod 副本总数即可
下一篇:bit exchange help docs

The minute you think of giving up, think of the reason why you held on so long.