https://v1-8.docs.kubernetes.io/docs/concepts/storage/dynamic-provisioning/
前言
动态卷配置允许按需创建存储卷。如果没有动态配置,管理员必须手动配置创建新的存储, 然后创建PV对象。动态卷配置的功能能让管理员不必预先配置存储。
而是当用户需要的时候自动配置存储。它可以按用户需要的用量配置存储空间,不像静态那样可能出现超额分配用量。
背景
动态配置数据卷的实现是基于StorageClass
API对象。管理员可以配置很多StorageClass
对象,每一个都可以指定一个存储供应商。管理员可以给一个
集群定义和暴露多个存储,每一个都有不同的参数配置。这样能减轻配置存储的复杂度,使用户简单选择存储服务。
开启动态配置数据卷
- 首先需要创建StorageClass对象, 可以指定使用哪个供应商和那些参数,如下例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: slow provisioner: kubernetes.io/gce-pd parameters: type: pd-standard --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: kubernetes.io/gce-pd parameters: type: pd-ssd
|
如果使用aliyun的NAS作为provisioner, 需要先安装aliyun nas的插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas provisioner: alicloud/nas --- apiVersion: v1 kind: ServiceAccount metadata: name: alicloud-nas-controller namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: run-alicloud-nas-controller subjects: - kind: ServiceAccount name: alicloud-nas-controller namespace: kube-system roleRef: kind: ClusterRole name: alicloud-disk-controller-runner apiGroup: rbac.authorization.k8s.io --- kind: Deployment apiVersion: extensions/v1beta1 metadata: name: alicloud-nas-controller namespace: kube-system spec: replicas: 1 strategy: type: Recreate template: metadata: labels: app: alicloud-nas-controller spec: tolerations: - effect: NoSchedule operator: Exists key: node-role.kubernetes.io/master - effect: NoSchedule operator: Exists key: node.cloudprovider.kubernetes.io/uninitialized nodeSelector: node-role.kubernetes.io/master: "" serviceAccount: alicloud-nas-controller containers: - name: alicloud-nas-controller image: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.8.4 volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: alicloud/nas - name: NFS_SERVER value: 0cd8b4a576-mmi32.cn-hangzhou.nas.aliyuncs.com - name: NFS_PATH value: / volumes: - name: nfs-client-root nfs: server: 0cd8b4a576-mmi32.cn-hangzhou.nas.aliyuncs.com path: /
|
使用动态配置数据卷
用户需要在PVC指定StorageClassName
, 如下
1 2 3 4 5 6 7 8 9 10 11
| apiVersion: v1 kind: PersistentVolumeClaim metadata: name: claim1 spec: accessModes: - ReadWriteOnce storageClassName: fast resources: requests: storage: 30Gi
|
设置默认动态配置
如果有个用户在PersistentVolumeClaim
没有指定storageClassName
, 那么可以配置默认的storageClassName
使用。具体是在创建的storageClassName
中annotation
storageclass.kubernetes.io/is-default-class