云服务器内容精选

  • 通过kubectl使用本地临时卷 请参见通过kubectl连接集群配置kubectl命令。 创建并编辑nginx-emptydir.yaml文件。 vi nginx-emptydir.yaml YAML文件内容如下: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-emptydir namespace: default spec: replicas: 2 selector: matchLabels: app: nginx-emptydir template: metadata: labels: app: nginx-emptydir spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: vol-emptydir # 卷名称,需与volumes字段中的卷名称对应 mountPath: /tmp # emptyDir挂载路径 imagePullSecrets: - name: default-secret volumes: - name: vol-emptydir # 卷名称,可自定义 emptyDir: medium: LocalVolume # emptyDir磁盘介质设置为LocalVolume,表示使用本地临时卷 sizeLimit: 1Gi # 卷容量大小 创建工作负载。 kubectl apply -f nginx-emptydir.yaml
  • 创建方式 创建方式是指动态创建或静态绑定 参数名 取值范围 默认值 是否允许修改 作用范围 Creation Method 三种方式:动态创建、绑定已有存储卷PV、绑定新建存储卷PV 动态创建 支持初始化时配置,不支持后续修改 - 创建方式非PVC原生字段,是CCE服务前端用于展示PVC绑定方式为动态还是静态的区分入口 配置建议: 如果用户提前在IaaS服务侧创建了存储资源,则可选择“已有存储卷PV”或“新建存储卷PV”这两种方式,否则选择“动态创建”方式
  • 访问模式 访问模式包含了PV可以被挂载的方式 参数名 取值范围 默认值 是否允许修改 作用范围 accessModes 两种模式:ReadWriteMany, ReadWriteOnce 无 支持初始化时配置,不支持后续修改 - 访问模式包含了卷可以被挂载的方式。CCE当前支持ReadWriteMany, ReadWriteOnce两种。ReadWriteMany指以读写方式挂载到多个节点,ReadWriteOnce指以读写方式挂载到单个节点。 配置建议: 根据存储卷类型进行配置。如块存储及本地持久卷存储配置ReadWriteOnce,文件存储及对象存储配置ReadWriteMany
  • 回收策略 当与此PV绑定的PVC被删除以后,PV如何被处理的策略 参数名 取值范围 默认值 是否允许修改 作用范围 persistentVolumeReclaimPolicy 两种策略:Retain, Delete Retain 支持初始化时配置,不支持后续修改 - 回收策略配置为Retain时,当删除与之绑定的PVC,这个PV被标记为Released,且底层卷保留。回收策略为Delete时,当删除与之绑定的PVC,底层卷及PV也会被删除。 配置建议: 建议配置为Retain,避免误删与此PV绑定的PVC时导致底层卷被删除
  • 操作步骤 请参见通过kubectl连接集群,使用kubectl连接集群。 执行如下命令,配置名为“sfsturbo-deployment-example.yaml”的创建deployment的yaml文件。 touch sfsturbo-deployment-example.yaml vi sfsturbo-deployment-example.yaml 在无状态工作负载中基于pvc共享式使用极速文件存储示例: apiVersion: apps/v1 kind: Deployment metadata: name: sfsturbo-deployment-example # 工作负载名称 namespace: default spec: replicas: 1 selector: matchLabels: app: sfsturbo-deployment-example template: metadata: labels: app: sfsturbo-deployment-example spec: containers: - image: nginx name: container-0 volumeMounts: - mountPath: /tmp # 挂载路径 name: pvc-sfsturbo-example restartPolicy: Always imagePullSecrets: - name: default-secret volumes: - name: pvc-sfsturbo-example persistentVolumeClaim: claimName: pvc-sfsturbo-example # 挂载PVC 表1 关键参数说明 参数 描述 name 为创建的无状态工作负载名称。 app 为无状态工作负载名称。 mountPath 为容器内挂载路径,此处示例中为“/tmp”。 “spec.template.spec.containers.volumeMounts.name” 和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。 执行如下命令创建工作负载。 kubectl create -f sfsturbo-deployment-example.yaml
  • 操作步骤 请参见通过kubectl连接集群,使用kubectl连接集群。 执行如下命令,配置名为“obs-deployment-example.yaml”的创建Pod的yaml文件。 touch obs-deployment-example.yaml vi obs-deployment-example.yaml 在无状态工作负载中基于pvc共享式使用对象存储示例: apiVersion: apps/v1 kind: Deployment metadata: name: obs-deployment-example # 工作负载名称 namespace: default spec: replicas: 1 selector: matchLabels: app: obs-deployment-example template: metadata: labels: app: obs-deployment-example spec: containers: - image: nginx name: container-0 volumeMounts: - mountPath: /tmp # 挂载路径 name: pvc-obs-example restartPolicy: Always imagePullSecrets: - name: default-secret volumes: - name: pvc-obs-example persistentVolumeClaim: claimName: pvc-obs-auto-example # PVC名称 “spec.template.spec.containers.volumeMounts.name”和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。 执行如下命令创建工作负载。 kubectl create -f obs-deployment-example.yaml
  • 约束与限制 CCE默认创建计费模式为“按需计费”的云硬盘。如需使用包周期的云硬盘,请参考云硬盘包周期。 云硬盘不支持跨可用区挂载,且暂时不支持被多个工作负载、同一个工作负载的多个实例或多个任务使用。 由于CCE集群各节点之间暂不支持共享盘的数据共享功能,多个节点挂载使用同一个云硬盘可能会出现读写冲突、数据缓存冲突等问题,所以创建无状态工作负载时,若使用了EVS云硬盘,建议工作负载只选择一个实例。 1.19.10以下版本的集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,当新Pod被调度到另一个节点时,会导致之前Pod不能正常读写。 1.19.10及以上版本集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,新Pod会因为无法挂载云硬盘导致无法成功启动。 创建有状态工作负载并添加云存储时,云硬盘暂不支持使用已有存储。 不支持导入分区过或者具有非ext4文件系统的云硬盘。 CCE集群中的容器存储目前已支持加密(Kubernetes 1.13版本及以上),当前仅在部分区域(Region)提供端到端支持。 存储不支持选择企业项目,新创建的存储卷默认创建到default企业项目下。
  • 添加云硬盘存储卷 参照创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建普通任务(Job)创建工作负载或普通任务,在添加容器后,展开“数据存储”。在“云存储”页签,单击“添加云存储”。 选择存储类型为“云硬盘”。 表2 挂载云硬盘参数配置 参数 参数说明 云存储类型 云硬盘:云硬盘的使用方式与传统服务器硬盘完全一致。同时,云硬盘具有更高的数据可靠性,更高的I/O吞吐能力和更加简单易用等特点,适用于文件系统、数据库或者其他需要块存储设备的系统软件或工作负载。 注意: 如需挂载云硬盘,创建工作负载时的实例数量必须选择为1个实例,即单实例,选择多实例后挂载云硬盘的选项将置灰,无法挂载。 创建有状态工作负载并添加云存储时,云硬盘暂不支持使用已有存储。 云硬盘不支持跨可用区挂载,且暂时不支持被多个工作负载、同一个工作负载的多个实例或多个任务使用。 分配方式 使用已有存储 选择已创建的存储,您需要提前创建好存储。 针对同一集群和命名空间,创建无状态工作负载时可以选择“使用已有存储”。 创建有状态工作负载时暂不支持选择“使用已有存储”,只能使用“自动分配存储”。 自动分配存储 选择自动分配存储后,需要配置如下选项: 访问模式:是用来对PV进行访问模式的设置,用于描述用户应用对存储资源的访问权限。 ReadWriteOnce (RWO):基于EVS非共享卷提供容器负载单Pod单读单写块存储的功能,但是该卷只能被单个节点挂载。v1.13.10-r1开始支持RWO模式的EVS卷。 可用区:存储所在的可用区,自动分配存储仅支持Node节点所在可用区。 子类型:选择存储的子类型。 高I/O:是指由SAS存储提供资源的磁盘类型。 超高I/O:是指由SSD存储提供资源的磁盘类型。 存储容量:输入存储容量,单位为GB。请不要超过存储容量配额,否则会创建失败。 存储格式:默认选择CSI。 CSI,即Container Storage Interface,容器存储接口机制,用于在Kubernetes和外部存储系统之间建立一套标准的存储管理接口,通过该接口为容器提供存储服务。 加密:勾选“KMS加密”后,将为云硬盘提供易用、高安全性的密钥管理服务(Key Management Service,KMS),该功能仅在部分Region的1.13.10及以上版本的集群中支持。若未创建委托请单击“创建委托”,并配置如下参数: 委托名称:委托表示委托方通过创建信任关系,给被委托方授予访问其资源的权限。当“委托名称”为“EVSAccessKMS”时,表示已经成功授权EVS访问KMS,授权成功后,EVS可以获取KMS密钥用来加解密云硬盘系统。 密钥名称:密钥资源创建完成后,可在容器应用中加载使用。如何创建密钥请参见创建密钥。 密钥ID:默认生成。 添加容器挂载 单击“添加容器挂载”。 挂载路径:输入数据卷挂载到容器上的路径。 须知: 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。 挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。 设置权限。 只读:只能读容器路径中的数据卷。 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。 图1 添加云存储 单击“确定”。
  • 操作步骤 请参见通过kubectl连接集群,使用kubectl连接集群。 执行如下命令,配置名为“sfs-deployment-example.yaml”的创建Pod的yaml文件。 touch sfs-deployment-example.yaml vi sfs-deployment-example.yaml 在无状态工作负载中基于pvc共享式使用文件存储示例: apiVersion: apps/v1 kind: Deployment metadata: name: sfs-deployment-example # 工作负载名称 namespace: default spec: replicas: 1 selector: matchLabels: app: sfs-deployment-example template: metadata: labels: app: sfs-deployment-example spec: containers: - image: nginx name: container-0 volumeMounts: - mountPath: /tmp # 挂载路径 name: pvc-sfs-example imagePullSecrets: - name: default-secret restartPolicy: Always volumes: - name: pvc-sfs-example persistentVolumeClaim: claimName: pvc-sfs-auto-example # 挂载PVC “spec.template.spec.containers.volumeMounts.name” 和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。 执行如下命令创建工作负载。 kubectl create -f sfs-deployment-example.yaml
  • 使用说明 使用便捷:您可以像使用传统服务器硬盘一样,对挂载到服务器上的块存储(硬盘)做格式化、创建文件系统等操作。 数据不共享:每台服务器使用独立的块存储(硬盘),多服务器之间数据隔离。 私有网络:数据访问必须在数据中心内部网络中。 容量性能:单卷容量有限(TB级),但性能极佳(IO读写时延ms级)。 使用限制:不支持导入分区过或者具有非ext4文件系统的云硬盘。 应用场景:主要面向HPC高性能计算、企业核心集群应用、企业应用系统和开发测试等。适用于供单实例部署的无状态负载(Deployment)和普通任务(Job),以及有状态工作负载(StatefulSet)的每个实例独占式使用。因为云硬盘属于非共享存储,不能同时被多个节点挂载,若两个Pod配置了使用同一个云硬盘,当这两个Pod被调度到不同的节点时,必然有一个Pod会因为无法挂载云硬盘导致无法成功启动。
  • 操作步骤 参照使用kubectl自动创建文件存储中操作创建文件存储卷,记录文件存储卷名称。 请参见通过kubectl连接集群,使用kubectl连接集群。 新建一个YAML文件,用于创建工作负载。假设文件名为sfs-statefulset-example.yaml。 touch sfs-statefulset-example.yaml vi sfs-statefulset-example.yaml yaml示例如下: apiVersion: apps/v1kind: StatefulSetmetadata: name: sfs-statefulset-example namespace: defaultspec: replicas: 2 selector: matchLabels: app: sfs-statefulset-example serviceName: qwqq template: metadata: annotations: metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]' pod.alpha.kubernetes.io/initialized: "true" labels: app: sfs-statefulset-example spec: affinity: {} containers: - image: nginx:latest name: container-0 volumeMounts: - mountPath: /tmp name: pvc-sfs-example imagePullSecrets: - name: default-secret volumes: - name: pvc-sfs-example persistentVolumeClaim: claimName: cce-sfs-demo 表1 关键参数说明 前置路径 参数 描述 spec replicas 实例数。 metadata name 新建工作负载的名称。 spec.template.spec.containers image 新建工作负载使用的镜像。 spec.template.spec.containers.volumeMounts mountPath 容器内挂载路径。 spec serviceName 工作负载对应的服务,服务创建过程请参见创建有状态负载(StatefulSet)。 spec.template.spec.volumes.persistentVolumeClaim claimName 已有PVC名称。 spec.template.spec.containers.volumeMounts.name和spec.template.spec.volumes.name有映射关系,必须保持一致。 创建有状态工作负载。 kubectl create -f sfs-statefulset-example .yaml
  • 操作步骤 登录OBS控制台,创建对象存储桶,记录桶名称和存储类型。 请参见通过kubectl连接集群,使用kubectl连接集群。 新建两个yaml文件,用于创建PersistentVolume(PV)、PersistentVolumeClaim(PVC),假设文件名为pv-obs-example.yaml、pvc-obs-example.yaml。 touch pv-obs-example.yaml pvc-obs-example.yaml K8s集群版本(K8s version) 说明 yaml示例 1.11 ≤ K8s version ≤ 1.13 1.11以上及1.13版本集群 请参见1.11~1.13 yaml文件配置示例 K8s version = 1.9 1.9版本集群 请参见1.9 yaml文件配置示例 1.11 ≤ K8s version ≤ 1.13(1.11以上及1.13版本集群) PV yaml文件配置示例: apiVersion: v1 kind: PersistentVolume metadata: name: pv-obs-example annotations: pv.kubernetes.io/provisioned-by: flexvolume-huawei.com/fuxiobsspec: accessModes: - ReadWriteMany capacity: storage: 1Gi claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: pvc-obs-example namespace: default flexVolume: driver: huawei.com/fuxiobs fsType: obs options: fsType: obs region: cn-north-4 storage_class: STANDARD volumeID: test-obs persistentVolumeReclaimPolicy: Delete storageClassName: obs-standard 表1 关键参数说明 参数 描述 driver 挂载依赖的存储驱动,对象存储配置为“huawei.com/fuxiobs”。 storage_class 存储类型,包括STANDARD(标准桶)、STANDARD_IA(低频访问桶)。 region 集群所在的region。 volumeID 对象存储的桶名称。 获取方法:在CCE控制台,单击左侧栏目树中的“资源管理-存储管理”,在“对象存储卷”页签下单击PVC的名称,在PVC详情页的“PV详情”页签下复制“PV名称”后的内容即可。 storage 存储容量,单位为Gi。此处配置为固定值1Gi。 storageClassName 对象存储支持的存储类型,包括obs-standard(标准)、obs-standard-ia(低频)。 spec.claimRef.apiVersion 固定值"v1"。 spec.claimRef.kind 固定值"PersistentVolumeClaim"。 spec.claimRef.name 与下一步创建的pvc的name一致。 spec.claimRef.namespace 与下一步创建的pvc的namespace一致。 PVC yaml文件配置示例: apiVersion: v1kind: PersistentVolumeClaimmetadata: annotations: volume.beta.kubernetes.io/storage-class: obs-standard volume.beta.kubernetes.io/storage-provisioner: flexvolume-huawei.com/fuxiobs name: pvc-obs-example namespace: defaultspec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi volumeName: pv-obs-example 表2 关键参数说明 参数 描述 volume.beta.kubernetes.io/storage-class 对象存储支持的存储类型,包括obs-standard、obs-standard-ia。 volume.beta.kubernetes.io/storage-provisioner 必须使用flexvolume-huawei.com/fuxiobs。 volumeName PV的名称。 storage 存储容量,单位为Gi。此处配置为固定值1Gi。 K8s version = 1.9(1.9版本集群) PV yaml文件配置示例: apiVersion: v1 kind: PersistentVolume metadata: name: pv-obs-example namespace: default spec: accessModes: - ReadWriteMany capacity: storage: 1Gi flexVolume: driver: huawei.com/fuxiobs fsType: obs options: fsType: obs kubernetes.io/namespace: default region: cn-north-4 storage_class: STANDARD volumeID: test-obs persistentVolumeReclaimPolicy: Delete storageClassName: obs-standard 表3 关键参数说明 参数 描述 driver 挂载依赖的存储驱动,对象存储配置为“huawei.com/fuxiobs”。 storage_class 存储类型,包括STANDARD(标准桶)、STANDARD_IA(低频访问桶)。 region 集群所在的region。 volumeID 对象存储的桶名称。 获取方法:在CCE控制台,单击左侧栏目树中的“资源管理-存储管理”,在“对象存储卷”页签下单击PVC的名称,在PVC详情页的“PV详情”页签下复制“PV名称”后的内容即可。 storage 存储容量,单位为Gi。此处配置为固定值1Gi。 storageClassName 对象存储支持的存储类型,包括obs-standard(标准)、obs-standard-ia(低频)。 PVC yaml文件配置示例: apiVersion: v1kind: PersistentVolumeClaimmetadata: annotations: volume.beta.kubernetes.io/storage-class: obs-standard volume.beta.kubernetes.io/storage-provisioner: flexvolume-huawei.com/fuxiobs name: pvc-obs-example namespace: defaultspec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi volumeName: pv-obs-example volumeNamespace: default 表4 关键参数说明 参数 描述 volume.beta.kubernetes.io/storage-class 对象存储支持的存储类型,包括obs-standard、obs-standard-ia。 volume.beta.kubernetes.io/storage-provisioner 必须使用flexvolume-huawei.com/fuxiobs。 volumeName PV的名称。 storage 存储容量,单位为Gi。此处配置为固定值1Gi。 创建PV。 kubectl create -f pv-obs-example.yaml 创建PVC。 kubectl create -f pvc-obs-example.yaml
  • 操作步骤 参照创建文件存储卷中操作创建极速文件存储卷,记录极速文件存储卷名称。 请参见通过kubectl连接集群,使用kubectl连接集群。 新建一个文件,用于创建工作负载。假设文件名为efs-statefulset-example.yaml。 touch efs-statefulset-example.yaml vi efs-statefulset-example.yaml yaml示例如下: apiVersion: apps/v1kind: StatefulSetmetadata: name: efs-statefulset-example namespace: defaultspec: replicas: 1 selector: matchLabels: app: efs-statefulset-example template: metadata: annotations: metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]' pod.alpha.kubernetes.io/initialized: 'true' labels: app: efs-statefulset-example spec: containers: - image: 'nginx:1.0.0' name: container-0 resources: requests: {} limits: {} env: - name: PAAS_APP_NAME value: efs-statefulset-example - name: PAAS_NAMESPACE value: default - name: PAAS_PROJECT_ID value: b18296881cc34f929baa8b9e95abf88b volumeMounts: - name: efs-statefulset-example mountPath: /tmp readOnly: false subPath: '' imagePullSecrets: - name: default-secret terminationGracePeriodSeconds: 30 volumes: - persistentVolumeClaim: claimName: cce-efs-import-jnr481gm-3y5o name: efs-statefulset-example affinity: {} tolerations: - key: node.kubernetes.io/not-ready operator: Exists effect: NoExecute tolerationSeconds: 300 - key: node.kubernetes.io/unreachable operator: Exists effect: NoExecute tolerationSeconds: 300 podManagementPolicy: OrderedReady serviceName: test updateStrategy: type: RollingUpdate 表1 关键参数说明 参数 描述 replicas 实例数。 name 新建工作负载的名称。 image 新建工作负载使用的镜像。 mountPath 容器内挂载路径。 serviceName 工作负载对应的服务,服务创建过程请参见创建有状态负载(StatefulSet)。 claimName 已有PVC名称。 spec.template.spec.containers.volumeMounts.name和spec.template.spec.volumes.name有映射关系,必须保持一致。 创建有状态工作负载。 kubectl create -f efs-statefulset-example.yaml
  • 临时卷介绍 当有些应用程序需要额外的存储,但并不关心数据在重启后是否仍然可用。 例如,缓存服务经常受限于内存大小,而且可以将不常用的数据转移到比内存慢的存储中,对总体性能的影响并不大。另有些应用程序需要以文件形式注入的只读数据,比如配置数据或密钥。 Kubernetes中的临时卷(Ephemeral Volume),就是为此类场景设计的。临时卷会遵从Pod的生命周期,与 Pod一起创建和删除。 Kubernetes中常用的临时卷: EmptyDir:Pod启动时为空,存储空间来自本地的kubelet根目录(通常是根磁盘)或内存。EmptyDir是从节点临时存储中分配的,如果来自其他来源(如日志文件或镜像分层数据)的数据占满了临时存储,可能会发生存储容量不足的问题。 ConfigMap:将ConfigMap类型的Kubernetes数据以数据卷的形式挂载到Pod中。 Secret:将Secret类型的Kubernetes数据以数据卷的形式挂载到Pod中。
  • EmptyDir的类型 CCE提供了如下两种EmptyDir类型: 临时路径:Kubernetes原生的EmptyDir类型,生命周期与容器实例相同,并支持指定内存作为存储介质。容器实例消亡时,EmptyDir会被删除,数据会永久丢失。 本地临时卷:本地临时存储卷将节点的本地数据盘通过LVM组成存储池(VolumeGroup),然后划分LV作为EmptyDir的存储介质给容器挂载使用,相比原生EmptyDir默认的存储介质类型性能更好。