语法

  1. apiVersion: v1 #必选,API 版本号
  2. kind: Deployment #必选,Pod 类型:
  3. metadata: #必选,元数据
  4. name: nginx-deployment #必选,符合 RFC1035 规范的 Pod 名称
  5. namespace: web #可选,不指定默认为 default,Pod 所在命名空间
  6. spec: #必选,用于定义详细信息
  7. selector: #标签选择器
  8. matchLabels:
  9. app: nginx
  10. replicas: 2 #必选,Pod 副本数量
  11. template:
  12. metadata: #必选,元数据
  13. labels: #可选,标签选择器,一般用于 Service Selector
  14. app: nginx
  15. spec: #必选,用于定义详细信息
  16. containers: #必选,定义容器
  17. - name: nginx
  18. image: nginx:1.14.2
  19. ports:
  20. - containerPort: 80

Pod

存储

使用 OSS 静态存储卷

https://help.aliyun.com/document_detail/86543.html

使用说明

配置OSS静态存储卷的说明如下:

  • OSS为共享存储,可以同时为多个Pod提供共享存储服务。
  • bucket:目前只支持挂载存储空间Bucket,不支持挂载Bucket下面的子目录或文件。
  • url:OSS的Endpoint,挂载OSS的接入域名,挂载节点和存储空间的地域相同时,可使用内网地址。
  • akId:您的AccessKey ID值。
  • akSecret:您的AccessKey Secret值。
  • otherOpts:挂载OSS时支持定制化参数输入,格式为:-o *** -o ***
  • 您在使用OSS数据卷时,不要使用subpath的配置。
  • 使用数据卷时,推荐每个应用使用独立的PV名字。

    注意事项

  • OSS数据卷是使用OSSFS文件进行挂载的FUSE文件系统,适合于读文件场景。例如:读配置文件、视频、图片文件等场景。

  • OSSFS不擅长于写文件的应用场景。如果您的业务是将文件写入存储的场景,推荐使用NAS存储卷服务。
  • 内核态文件系统相较于用户态模拟的文件系统,在稳定性、性能上更具有优势,生产环境中推荐您使用NAS文件存储,而不推荐OSS文件系统
  • OSSFS可以通过调整配置参数的方式,优化其在缓存、权限等方面的表现,请参见常见问题ossfs/README-CN.mdFAQ

    直接使用volumes挂载的方式

    创建并复制以下内容到oss-deploy.yaml中。
    1. apiVersion: extensions/v1beta1
    2. kind: Deployment
    3. metadata:
    4. name: nginx-oss-deploy
    5. spec:
    6. replicas: 1
    7. template:
    8. metadata:
    9. labels:
    10. app: nginx
    11. spec:
    12. containers:
    13. - name: nginx-flexvolume-oss
    14. image: nginx
    15. volumeMounts:
    16. - name: "oss1"
    17. mountPath: "/data"
    18. livenessProbe:
    19. exec:
    20. command:
    21. - sh
    22. - -c
    23. - cd /data
    24. initialDelaySeconds: 30
    25. periodSeconds: 30
    26. volumes:
    27. - name: "oss1"
    28. flexVolume:
    29. driver: "alicloud/oss"
    30. options:
    31. bucket: "docker"
    32. url: "oss-cn-hangzhou.aliyuncs.com"
    33. akId: ***
    34. akSecret: ***
    35. otherOpts: "-o max_stat_cache_size=0 -o allow_other"
    执行以下命令,创建Pod。
    1. kubectl apply -f oss-deploy.yaml

    使用创建PV和PVC的方式

    您可以使用YAML文件或者通过容器服务控制台界面创建PV。

    创建PV

    使用oss-pv.yaml文件创建PV。
    1. apiVersion: v1
    2. kind: PersistentVolume
    3. metadata:
    4. name: pv-oss
    5. spec:
    6. capacity:
    7. storage: 5Gi
    8. accessModes:
    9. - ReadWriteMany
    10. storageClassName: oss
    11. flexVolume:
    12. driver: "alicloud/oss"
    13. options:
    14. bucket: "docker"
    15. url: "oss-cn-hangzhou.aliyuncs.com"
    16. akId: ***
    17. akSecret: ***
    18. otherOpts: "-o max_stat_cache_size=0 -o allow_other"

    创建PVC

    使用oss-pvc.yaml文件创建PVC。
    1. kind: PersistentVolumeClaim
    2. apiVersion: v1
    3. metadata:
    4. name: pvc-oss
    5. spec:
    6. storageClassName: oss
    7. accessModes:
    8. - ReadWriteMany
    9. resources:
    10. requests:
    11. storage: 5Gi

    创建Pod

    使用oss-deploy.yaml创建Pod。
    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: oss-static
    5. labels:
    6. app: nginx
    7. spec:
    8. replicas: 1
    9. selector:
    10. matchLabels:
    11. app: nginx
    12. template:
    13. metadata:
    14. labels:
    15. app: nginx
    16. spec:
    17. containers:
    18. - name: nginx
    19. image: nginx
    20. ports:
    21. - containerPort: 80
    22. volumeMounts:
    23. - name: pvc-oss
    24. mountPath: "/data"
    25. livenessProbe:
    26. exec:
    27. command:
    28. - sh
    29. - -c
    30. - cd /data
    31. initialDelaySeconds: 30
    32. periodSeconds: 30
    33. volumes:
    34. - name: pvc-oss
    35. persistentVolumeClaim:
    36. claimName: pvc-oss
    https://help.aliyun.com/document_detail/130911.html

    使用 NAS 动态存储卷

    创建动态 NAS 卷

    配置 StorageClass。

    配置示例如下: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas mountOptions:
  • nolock,tcp,noresvport
  • vers=3 parameters: server: “23a9649583-iaq37.cn-shenzhen.nas.aliyuncs.com:/nasroot1/“ driver: flexvolume provisioner: alicloud/nas reclaimPolicy: Delete ``` 说明

  • mountOptions:表示生成的PV options配置,挂载NAS卷时使用这个options挂载。

  • server:表示生成目标PV所使用NAS挂载点列表。格式为 nfsurl1:/path1,nfsurl2:/path2;当配置多个server时,通过此StorageClass创建的PV会轮询使用上述server作为配置参数;极速NAS配置路径需要以/share开头。
  • driver:支持Flexvolume、NFS两种驱动,默认为NFS。
  • reclaimPolicy:PV的回收策略,建议配置为Retain。
    • 当配置为Delete时,删除PV后NAS文件系统中的对应目录会默认修改名字(例如,path-name会被修改为archived-path-name)。
    • 如果需要删除文件系统中对应的存储目录,可在StorageClass中配置archiveOnDelete为false。

      使用动态卷

      ```yaml apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports:
      • port: 80 name: web clusterIP: None selector: app: nginx

apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: “nginx” replicas: 5 volumeClaimTemplates:

  • metadata: name: html spec: accessModes:
    1. - ReadWriteOnce
    storageClassName: alicloud-nas resources:
    1. requests:
    2. storage: 2Gi
    template: metadata: labels:
    1. app: nginx
    spec: containers:
    • name: nginx image: nginx:alpine volumeMounts:
      • mountPath: “/data” name: html ```