华为云用户手册

  • 文件存储性能 CCE支持使用SFS容量型、SFS 3.0容量型文件存储。更多关于文件存储类型的详细介绍,请参见文件系统类型。 SFS容量型文件存储当前正处于售罄状态,CCE控制台已经屏蔽创建,存量SFS容量型仍可以通过kubectl命令行方式创建PV。 SFS 3.0容量型当前正在各region逐步上线中,部分区域(Region)可能还未支持,请您耐心等待。若您的应用所在区域已经支持SFS 3.0容量型,建议新应用使用SFS 3.0容量型,并尽快将已有的SFS容量型文件存储迁移到SFS 3.0容量型中,以免容量不足影响业务。 表1 文件存储性能 参数 SFS容量型 SFS 3.0容量型 最大带宽 2GB/s 1.25TB/s 最高IOPS 2K 百万 时延 3~20ms 10ms 最大容量 4PB EB
  • 文件存储介绍 CCE支持将弹性文件存储(SFS)创建的存储卷挂载到容器的某一路径下,以满足数据持久化需求,SFS存储卷适用于多读多写的持久化存储,适用大容量扩展以及成本敏感型的业务场景,包括媒体处理、内容管理、大数据分析和分析工作负载程序等。SFS容量型文件系统不适合海量小文件业务,推荐使用SFS Turbo文件系统。 SFS为用户提供一个完全托管的共享文件存储,能够弹性伸缩至PB规模,具备高可用性和持久性,为海量数据、高带宽型应用提供有力支持。 符合标准文件协议:用户可以将文件系统挂载给服务器,像使用本地文件目录一样。 数据共享:多台服务器可挂载相同的文件系统,数据可以共享操作和访问。 私有网络:数据访问必须在数据中心内部网络中。 容量与性能:单文件系统容量较高(PB级),性能极佳(IO读写时延ms级)。 应用场景:适用于多读多写(ReadWriteMany)场景下的各种工作负载(Deployment/StatefulSet)和普通任务(Job)使用,主要面向高性能计算、媒体处理、内容管理和Web服务、大数据和分析应用程序等场景。
  • 约束与限制 文件存储必须与集群在同一个VPC内。 支持多个PV挂载同一个SFS或SFS Turbo,但有如下限制: 多个不同的PVC/PV使用同一个底层SFS或SFS Turbo卷时,且被同一Pod使用会出现问题,需要避免这么使用。 PV中persistentVolumeReclaimPolicy参数需设置为Retain,否则可能存在一个PV删除时,级联删除底层卷,其他关联这个底层卷的PV会由于底层存储被删除导致使用出现异常。 重复用底层存储时,建议在应用层做好多读多写的隔离保护,防止产生的数据覆盖和丢失。
  • 使用kubectl命令登录容器 使用kubectl连接集群,详情请参见通过kubectl连接集群。 执行以下命令,查看已创建的Pod。 kubectl get pod 示例输出如下: NAME READY STATUS RESTARTS AGEnginx-59d89cb66f-mhljr 1/1 Running 0 11m 查询该Pod中的容器名称。 kubectl get po nginx-59d89cb66f-mhljr -o jsonpath='{range .spec.containers[*]}{.name}{end}{"\n"}' 示例输出如下: container-1 执行以下命令,登录到nginx-59d89cb66f-mhljrPod中名为container-1的容器。 kubectl exec -it nginx-59d89cb66f-mhljr -c container-1 -- /bin/sh 如需退出容器,可执行exit命令。
  • CCE事件列表 事件类告警是根据CCE上报到AOM的事件来决定是否告警,CCE上报了一系列事件到AOM,您可以在配置事件告警的处查看具体事件,根据自身需求添加事件类告警。 图2 CCE上报的事件 CCE当前支持如下事件: 扩容节点超时 数据卷扩容失败 主机卸载块存储失败 节点池资源充足 卷回收策略未知 太多活跃Pod 挂载数据卷失败 节点kubelet故障 标签选择器冲突 缩容节点 节点内存空间不足 卷PVC丢失 节点上发现未注册的网络设备 数据卷回收失败 未触发节点扩容 删除未注册节点成功 状态异常 删除失败 网卡未发现 太多成功Pod 缩容空闲节点成功 未拉取镜像异常 节点重启 节点kube-proxy故障 扩容失败 节点磁盘空间已满 节点任务夯住 等待主机挂载块存储失败 启动失败 拉取镜像失败 废弃节点清理 副本集创建异常 CIDR不可用 节点的连接跟踪表已满 节点磁盘空间不足 待机失败 缩容节点失败 节点不可调度 节点池扩容节点失败 更新配置失败 节点池扩容节点成功 节点纳管失败 创建负载均衡失败 查询失败 数据卷删除失败 节点操作系统内核故障 扩容节点失败 挂载盘符失败 删除负载均衡失败 修复节点池节点个数成功 卸载数据卷失败 激活失败 节点内存不足强杀进程 卸载盘符失败 节点docker故障 回滚失败 CIDR分配失败 节点docker夯住 标签选择器异常 节点状态异常 创建卷失败 创建卷清理失败 节点池退避重试中 启动重试失败 部署回滚版本未发现 调度失败 修复节点池节点个数失败 节点文件系统只读 更新失败 节点ntp服务故障 节点创建失败 拉取镜像重试失败 节点卸载失败 卷误绑定 查询Pod列表失败 节点池资源售罄 节点磁盘卸载夯住 创建失败 更新负载均衡失败 未知Job 缩容失败 触发节点扩容 主机挂载块存储失败 重启失败 节点cni插件故障 节点池扩容节点启动 缩容空闲节点启动 删除未注册节点失败 内部故障 外部依赖异常 初始化执行线程失败 更新数据库失败 节点池触发创建节点失败 节点池触发删除节点失败 创建包周期节点失败 解除资源租户访问控制节点镜像的授权失败 创建虚拟IP失败 删除节点虚拟机失败 删除节点安全组失败 删除控制节点安全组失败 删除控制节点网卡安全组失败 删除集群ENI/SubENI安全组失败 解绑控制节点网卡失败 删除控制节点网卡失败 删除控制节点虚拟机失败 删除控制节点密钥对失败 删除控制节点subnet失败 删除控制节点VPC失败 删除集群证书失败 删除控制节点云服务器组失败 删除虚拟IP失败 获取控制节点浮动IP失败 获取集群规格信息失败 获取集群endpoint失败 获取kubernetes集群连接失败 更新集群Secret失败 处理用户操作超时 连接kubernetes集群超时 检查组件状态失败或组件状态异常 无法在kubernetes集群中找到该节点 节点在kubernetes集群中状态异常 无法在ECS服务中找到该节点对应的虚拟机 升级控制节点失败 升级节点失败 变更控制节点规格失败 变更控制节点规格超时 创建包周期节点校验不通过 安装节点失败 清理VPC中集群容器网络路由表条目失败 集群状态不可用 集群状态故障 集群状态长时间不更新 集群升级超时后更新控制节点状态失败 集群升级超时后更新运行中的任务失败 更新集群状态失败 更新节点状态失败 纳管节点超时后移除数据库中的节点记录失败 节点处理超时后更新节点状态为异常失败 更新集群访问地址失败 删除不可用的Kubernetes连接失败 同步集群证书失败
  • 在SMN创建主题 SMN(Simple Message Notification,消息通知服务)是向订阅者主动推送消息的服务,订阅者可以是电子邮件、短信、HTTP和HTTPS等。 主题是消息发布或客户端订阅通知的特定事件类型。它作为发送消息和订阅通知的信道,为发布者和订阅者提供一个可以相互交流的通道。 您需要创建一个主题,并订阅。具体方法请参见创建主题和订阅主题。 订阅主题后,请前往您的订阅终端(邮件或短信)手动确认添加订阅,消息通知才可生效。
  • 存储卷访问模式 PV只能以底层存储资源所支持的方式挂载到宿主系统上。例如,文件存储可以支持多个节点读写,云硬盘只能被一个节点读写。 ReadWriteOnce:卷可以被一个节点以读写方式挂载,云硬盘存储卷支持此类型。 ReadWriteMany:卷可以被多个节点以读写方式挂载,文件存储、对象存储、极速文件存储支持此类型。 表1 云存储支持访问模式 存储类型 ReadWriteOnce ReadWriteMany 云硬盘EVS √ × 文件存储SFS × √ 对象存储OBS × √ 极速文件存储SFS Turbo × √
  • 约束与限制 在新版控制台(需要将集群升级到1.19.10及以上并且Everest存储插件升级到1.2.10及以上)PV资源已经正式开放给用户管理;旧版控制台仍保持导入使用或者是通过动态创建方式进行创建,用户无法通过控制台对PV资源进行生命周期管理。 支持多个PV挂载同一个SFS或SFS Turbo,但有如下限制: 多个不同的PVC/PV使用同一个底层SFS或SFS Turbo卷时,且被同一Pod使用会出现问题,需要避免这么使用。 PV中persistentVolumeReclaimPolicy参数需设置为Retain,否则可能存在一个PV删除时,级联删除底层卷,其他关联这个底层卷的PV会由于底层存储不在了,使用出现异常。 重复用底层存储时,建议在应用层做好多读多写的隔离保护,防止产生的数据覆盖和丢失。
  • PV回收策略 PV回收策略用于指定删除PVC时,底层卷的回收策略,支持设定Delete、Retain回收策略。 Delete:删除PVC,PV资源与底层存储资源均被删除。 Retain:删除PVC,PV资源与底层存储资源均不会被删除,需要手动删除回收。PVC删除后PV资源状态为“已释放(Released)”,不能直接再次被PVC绑定使用。 Everest还支持一种删除PVC时不删除底层存储资源的使用方法,当前仅支持使用YAML创建。PV回收策略设置为Delete,添加annotations“everest.io/reclaim-policy: retain-volume-only”,这样删除PVC,PV会被删除,但底层存储资源会保留。
  • 添加/删除节点标签 登录CCE控制台。 单击集群名称进入集群,在左侧选择“节点管理”,勾选节点,单击左上方“标签与污点管理”。 在弹出的窗口中,在“批量操作”下方单击“新增批量操作”,然后选择“添加/更新”或“删除”。 填写需要增加/删除标签的“键”和“值”,单击“确定”。 例如,填写的键为“deploy_qa”,值为“true”,就可以从逻辑概念表示该节点是用来部署QA(测试)环境使用。 图1 添加节点标签 标签添加成功后,再次进入该界面,在节点数据下可查看到已经添加的标签。
  • Pod Security Admission标签 Kubernetes为Pod Security Admission定义了三种标签,如表2,您可以在某个命名空间中设置这些标签来定义需要使用的Pod安全性标准级别,但请勿在kube-system等系统命名空间修改Pod安全性标准级别,否则可能导致系统命名空间下Pod故障。 表2 Pod Security Admission标签 隔离模式(mode) 生效对象 描述 enforce Pod 违反指定策略会导致Pod无法创建。 audit 工作负载(例如Deployment、Job等) 违反指定策略会在审计日志(audit log)中添加新的审计事件,Pod可以被创建。 warn 工作负载(例如Deployment、Job等) 违反指定策略会返回用户可见的告警信息,Pod可以被创建。 Pod通常是通过创建Deployment或Job这类工作负载对象来间接创建的。在使用Pod Security Admission时,audit或warn模式的隔离都将在工作负载级别生效,而enforce模式并不会应用到工作负载,仅在Pod上生效。
  • 从PodSecurityPolicy迁移到Pod Security Admission 如您在1.25之前版本的集群中使用了PodSecurityPolicy,且需要在1.25及以后版本集群中继续使用Pod Security Admission来替代PodSecurityPolicy的用户,请参见从PodSecurityPolicy迁移到内置的Pod Security Admission。 由于Pod Security Admission仅支持三种隔离模式,因此灵活性相比于PodSecurityPolicy较差,部分场景下需要用户自行定义验证准入Webhook来实施更精准的策略。 由于PodSecurityPolicy具有变更能力,而Pod Security Admission并不具备该能力,因此之前依赖该能力的用户需要自行定义变更准入Webhook或修改Pod中的securityContext字段。 PodSecurityPolicy允许为不同的服务帐号(Service Account)绑定不同策略(Kubernetes社区不建议使用该能力)。如果您有使用该能力的诉求,在迁移至Pod Security Admission后,需要自行定义第三方Webhook。 请勿将Pod Security Admission能力应用于kube-system、kube-public和kube-node-lease等一些CCE组件部署的Namespace中,否则会导致CCE组件、插件功能异常。
  • 操作场景 应用服务网格(Application Service Mesh,简称ASM)是华为云基于开源Istio推出的服务网格平台,它深度、无缝对接了华为云的企业级Kubernetes集群服务云容器引擎(Cloud Container Engine,简称CCE),在易用性、可靠性、可视化等方面进行了一系列增强,可为客户提供开箱即用的上手体验。 应用服务网格提供非侵入式的微服务治理解决方案,支持完整的生命周期管理和流量治理,兼容Kubernetes和Istio生态,其功能包括负载均衡、熔断、限流等多种治理能力。应用服务网格内置金丝雀、蓝绿、A/B Test等多种灰度发布流程,提供一站式自动化的发布管理。应用服务网格基于无侵入的监控数据采集,提供实时流量拓扑、调用链等服务性能监控和运行诊断,构建全景的服务运行视图。
  • 排查方案 CCE提供以下排查方式供用户参考(CCE 1.21及以上版本的集群均涉及): 排查集群中使用的插件版本。 若用户集群中有使用2.23.34及以下版本Prometheus 插件,则需升级至2.23.34以上版本。 若用户集群中有使用1.15.0及以下版本npd插件,则需升级至最新版本。 通过kubectl连接集群,并通过kubectl get --raw "/metrics" | grep stale查询,可以看到一个名为serviceaccount_stale_tokens_total的指标。 如果该值大于0,则表示当前集群可能存在某些负载正在使用过低的client-go版本情况,此时请您排查自己部署的应用中是否有该情况出现。如果存在,则尽快将client-go版本升级至社区指定的版本之上(至少不低于CCE集群的两个大版本,如部署在1.23集群上的应用需要使用1.19版本以上的Kubernetes依赖库)。
  • 错误处理建议 超卖节点kubelet重启后,由于volcano调度器和kubelet的资源视图不同步,部分新调度的作业会出现OutOfCPU的情况,属于正常现象,一段时间后会恢复正常,volcano调度器能够正常调度在/离线作业。 在/离线作业提交后,因当前内核不支持离线作业修改为在线作业,因此不建议动态修改作业类型(添加或者删除Pod的annotation volcano.sh/qos-level: "-1")。 CCE通过cgroups系统中的状态信息收集节点上所有运行的Pod占用的资源量(CPU/内存),可能与用户监控到的资源使用率有所不同,例如使用top命令看到的资源统计。 对于增加超卖资源类型,如超卖资源由cpu变为cpu、memory,此时可以随时添加。 对于减少超卖资源类型,如由cpu、memory变为仅超卖cpu,此时需要在合适的时间进行更改,即分配率不超过100%时才可进行安全更改。
  • kubelet超卖 规格约束 集群版本: v1.19集群:v1.19.16-r4及以上版本 v1.21集群:v1.21.7-r0及以上版本 v1.23集群:v1.23.5-r0及以上版本 v1.25及以上版本 集群类型:CCE集群或CCE Turbo集群。 节点OS:EulerOS 2.9 (内核kernel-4.18.0-147.5.1.6.h729.6.eulerosv2r9.x86_64)或者Huawei Cloud EulerOS 2.0 节点类型:弹性虚拟机。 volcano插件版本:1.7.0及以上版本。 使用限制 使用超卖特性时,需保证Volcano未启用overcommit插件。 修改超卖节点标签不会影响已经运行的pod。 运行中的pod无法进行在线和离线业务转换,如需转换需要重建pod。 集群中有节点配置超卖标签volcano.sh/oversubscription=true时,volcano插件必须要增加oversubscription配置,否则会导致超卖节点调度异常。标签配置需要由用户保证,调度器不会对插件和节点配置进行检查。详细标签说明请参见表1。 超卖特性开关目前不支持统一配置,若要关闭超卖特性,需要同时进行以下操作: 去掉超卖节点的volcano.sh/oversubscription标签。 设置节点池的超卖开关over-subscription-resource为false。 修改volcano调度器的名字为volcano-scheduler-configmap的configmap,并去掉oversubscription插件。 当节点设置cpu-manager-policy为静态绑核时,不允许将离线Pod设置为Guaranteed的Pod,若需要绑核则需要调整Pod为在线Pod,否则可能会发生离线Pod占用在线Pod的CPU导致在线Pod启动失败,以及离线Pod虽然调度成功但仍然启动失败的情况。 当节点设置cpu-manager-policy为静态绑核时,不应对所有在线Pod进行绑核,否则会出现在线Pod占用了所有的CPU或者memory资源导致上报的超卖资源很少的情况。
  • 使用存储类创建PVC 使用存储类创建的底层云硬盘、文件存储和对象存储均为按需计费模式。 当前SFS文件存储处于售罄状态,暂时无法使用存储类csi-nas自动创建。 存储类(StorageClass)描述了集群中的存储类型“分类”,在创建PVC需要可以指定StorageClass,动态创建PV及底层存储资源。 使用控制台创建 登录CCE控制台。 进入集群,在左侧选择“容器存储”,在右侧选择“存储卷声明”页签。 单击右上角“创建存储声明”,在弹出的窗口中填写存储卷“声明”参数。 创建方式:选择“使用存储类”。 PVC名称:指定PVC的名称。 存储类:选择需要的存储类型。当前支持如下几类存储动态创建。 csi-disk:云硬盘。 csi-local-topology:本地持久卷。 csi-obs:对象存储。 可用区(仅云硬盘支持):选择云硬盘所在可用区。 云硬盘类型:选择云硬盘的类型。云硬盘类型在不同区域会有所不同。 高I/O 超高I/O 通用型SSD 极速型SSD 具体请参见这里了解如何选择磁盘类型。 访问模式:ReadWriteOnce和ReadWriteMany,具体请参见存储卷访问模式。 存储池(仅本地持久卷支持):显示支持本地持久卷的节点,具体请参见本地持久存储卷和临时存储卷。 容量(仅云硬盘和文件存储支持):存储的容量大小。仅云硬盘和文件存储需要配置,对象存储无需配置。 加密(仅云硬盘和文件存储支持):勾选底层存储是否加密,勾选后需要选择使用的加密密钥。仅云硬盘和文件存储支持加密。 密钥(仅对象存储支持):对象存储需要选择访问密钥,具体使用请参见对象存储卷挂载设置自定义访问密钥(AK/SK)。 企业项目(仅云硬盘和对象存储支持):集群所属的企业项目或default企业项目。 单击“创建”。 使用YAML创建 云硬盘YAML示例。 failure-domain.beta.kubernetes.io/region:集群所在的region。 Region对应的值请参见地区和终端节点。 failure-domain.beta.kubernetes.io/zone:创建云硬盘所在的可用区,必须和工作负载规划的可用区保持一致。 zone对应的值请参见地区和终端节点。 everest.io/enterprise-project-id:企业项目ID。仅支持集群所属企业项目和default企业项目,"0"表示default企业项目。 获取方法:在CCE控制台,单击左侧栏目树中的“集群管理”,选择集群,并进入指定的集群详情页,在“基本信息”页签下找到企业项目,单击并进入对应的企业项目控制台,复制对应的ID值即可获取集群所属的企业项目的ID。 apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-evs-auto-example namespace: default annotations: everest.io/disk-volume-type: SSD # 云硬盘的类型 everest.io/crypt-key-id: 0992dbda-6340-470e-a74e-4f0db288ed82 # 可选字段,密钥的id,使用该密钥加密云硬盘 everest.io/enterprise-project-id: 86bfc701-9d9e-4871-a318-6385aa368183 # 可选字段,企业项目id,Everest需升级到1.2.33及以上版本,仅支持集群所属企业项目和default企业项目,"0"表示default企业项目。 labels: failure-domain.beta.kubernetes.io/region: cn-north-4 failure-domain.beta.kubernetes.io/zone: cn-north-4bspec: accessModes: - ReadWriteOnce # 云硬盘必须为ReadWriteOnce resources: requests: storage: 10Gi # 云硬盘大小,取值范围 1-32768 storageClassName: csi-disk # StorageClass类型为云硬盘 本地持久卷YAML示例,本地持久卷使用要求在节点上导入了本地持久卷,具体请参见本地持久存储卷和临时存储卷。 apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-local-example namespace: defaultspec: accessModes: - ReadWriteOnce # 必须为ReadWriteOnce resources: requests: storage: 10Gi # 本地持久存储卷大小 storageClassName: csi-local-topology # StorageClass类型为csi-local-topology 对象存储YAML示例: apiVersion: v1kind: PersistentVolumeClaimmetadata: name: obs-warm-provision-pvc namespace: default annotations: everest.io/obs-volume-type: STANDARD # 桶类型,当前支持标准(STANDARD)和低频(WARM)两种桶。 csi.storage.k8s.io/fstype: obsfs # 文件类型,obsfs表示创建并行文件系统,推荐使用;s3fs表示创建对象桶 everest.io/enterprise-project-id: 86bfc701-9d9e-4871-a318-6385aa368183 # 可选字段,企业项目id,Everest需升级到1.2.33及以上版本,仅支持集群所属企业项目和default企业项目,"0"表示default企业项目。spec: accessModes: - ReadWriteMany # 对象存储必须为ReadWriteMany resources: requests: storage: 1Gi # 此处仅为校验需要(不能为空和0),设置的大小不起作用,此处设定为固定值1Gi storageClassName: csi-obs # StorageClass类型为对象存储
  • 使用存储卷PV创建PVC 如果已经创建了PV,则可以创建PVC申请PV的资源。 使用控制台创建 登录CCE控制台。 进入集群,在左侧选择“容器存储”,在右侧选择“存储卷声明”页签。 单击右上角“创建存储声明”,在弹出的窗口中填写存储卷“声明”参数。 创建方式:选择“使用已有存储卷”。 PVC名称:指定PVC的名称。 存储卷类型类:选择需要的存储卷类型。 云硬盘 文件存储 对象存储 极速文件存储 关联存储卷:选择要关联的存储卷,即PV。 单击“创建”。 使用YAML创建 云硬盘YAML示例。 failure-domain.beta.kubernetes.io/region:集群所在的region。 Region对应的值请参见地区和终端节点。 failure-domain.beta.kubernetes.io/zone:创建云硬盘所在的可用区,必须和工作负载规划的可用区保持一致。 zone对应的值请参见地区和终端节点。 apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-test namespace: default annotations: everest.io/disk-volume-type: SAS # 云硬盘的类型 everest.io/crypt-key-id: fe0757de-104c-4b32-99c5-ee832b3bcaa3 # 可选字段,密钥的id,使用该密钥加密云硬盘 volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner everest.io/enterprise-project-id: 86bfc701-9d9e-4871-a318-6385aa368183 # 可选字段,如果指定企业项目,需保证与PV中指定的everest.io/enterprise-project-id一致,否则无法绑定 labels: failure-domain.beta.kubernetes.io/region: cn-north-4 failure-domain.beta.kubernetes.io/zone: cn-north-4bspec: accessModes: - ReadWriteOnce # 云硬盘必须为ReadWriteOnce resources: requests: storage: 10Gi storageClassName: csi-disk # StorageClass的名称,云硬盘为csi-disk volumeName: cce-evs-test # PV的名称 文件存储示例: apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-sfs-test namespace: default annotations: volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisionerspec: accessModes: - ReadWriteMany # 文件存储必须为ReadWriteMany resources: requests: storage: 100Gi # PVC申请容量大小 storageClassName: csi-nas # StorageClass的名称,文件存储为csi-nas volumeName: cce-sfs-test # PV的名称 对象存储示例: apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-obs-test namespace: default annotations: everest.io/obs-volume-type: STANDARD # 桶类型,当前支持标准(STANDARD)和低频(WARM)两种桶。 csi.storage.k8s.io/fstype: obsfs # 文件类型,obsfs表示创建并行文件系统,推荐使用;s3fs表示创建对象桶 csi.storage.k8s.io/node-publish-secret-name: test-user csi.storage.k8s.io/node-publish-secret-namespace: default volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner everest.io/enterprise-project-id: 86bfc701-9d9e-4871-a318-6385aa368183 # 可选字段,如果指定企业项目,需保证与PV中指定的everest.io/enterprise-project-id一致,否则无法绑定spec: accessModes: - ReadWriteMany # 对象存储必须为ReadWriteMany resources: requests: storage: 1Gi # PVC申请容量大小,此处仅为校验需要(不能为空和0),设置的大小不起作用,此处设定为固定值1Gi storageClassName: csi-obs # StorageClass的名称,对象存储为csi-obs volumeName: cce-obs-test # PV的名称 极速文件存储示例: apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-test namespace: default annotations: volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisionerspec: accessModes: - ReadWriteMany # 极速文件存储必须为ReadWriteMany resources: requests: storage: 100Gi # PVC申请容量大小 storageClassName: csi-sfsturbo # StorageClass的名称,极速文件存储为csi-sfsturbo volumeName: pv-sfsturbo-test # PV的名称
  • 使用快照创建PVC 通过快照创建云硬盘PVC时,磁盘类型、磁盘模式、加密属性需和快照源云硬盘保持一致。 使用控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“容器存储”,在右侧选择“快照与备份”页签。 找到需要创建PVC的快照,单击“创建存储卷声明”,并在弹出窗口中指定PVC的名称。 单击“创建”。 使用YAML创建 apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-test namespace: default annotations: everest.io/disk-volume-type: SSD # 云硬盘类型,需要与快照源云硬盘保持一致 labels: failure-domain.beta.kubernetes.io/region: cn-north-4 failure-domain.beta.kubernetes.io/zone: cn-north-4bspec: accessModes: - ReadWriteOnce resources: requests: storage: '10' storageClassName: csi-disk dataSource: name: cce-disksnap-test # 快照的名称 kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
  • 约束与限制 创建PVC会先匹配集群中是否有配置相同、且状态为可用状态的PV,如果存在,PVC将首先选择可匹配的,且为可用状态的PV进行绑定,在集群中无满足匹配条件的PV时,动态创建新的存储。 字段含义 pvc字段 pv字段 匹配逻辑 region pvc.metadata.labels(failure-domain.beta.kubernetes.io/region或者topology.kubernetes.io/region) pv.metadata.labels(failure-domain.beta.kubernetes.io/region或者topology.kubernetes.io/region) 同时定义/不被定义,若定义需要内容一致 zone pvc.metadata.labels(failure-domain.beta.kubernetes.io/zone或者topology.kubernetes.io/zone) pv.metadata.labels(failure-domain.beta.kubernetes.io/zone或者topology.kubernetes.io/zone) 同时定义/不被定义,若定义需要内容一致 云硬盘类型 pvc.metadata.annotations(everest.io/disk-volume-type) pv.spec.csi.volumeAttributes(everest.io/disk-volume-type) 同时定义/不被定义,若定义需要内容一致 密钥id pvc.metadata.annotations(everest.io/crypt-key-id) pv.spec.csi.volumeAttributes(everest.io/crypt-key-id) 同时定义/不被定义,若定义需要内容一致 企业项目id pvc.metadata.annotations(everest.io/enterprise-project-id) pv.spec.csi.volumeAttributes(everest.io/enterprise-project-id) 同时定义/不被定义,若定义需要内容一致 accessMode accessMode accessMode 内容一致 存储类 storageclass storageclass 内容一致
  • 存储卷访问模式 PV只能以底层存储资源所支持的方式挂载到宿主系统上。例如,文件存储可以支持多个节点读写,云硬盘只能被一个节点读写。 ReadWriteOnce:卷可以被一个节点以读写方式挂载,云硬盘存储卷支持此类型。 ReadWriteMany:卷可以被多个节点以读写方式挂载,文件存储、对象存储、极速文件存储支持此类型。 表1 支持访问模式 存储类型 ReadWriteOnce ReadWriteMany 云硬盘EVS √ × 文件存储SFS × √ 对象存储OBS × √ 极速文件存储SFS Turbo × √ 本地持久卷LocalPV √ ×
  • 企业项目支持说明 该功能需要Everest插件升级到1.2.33及以上版本。 使用存储类创建PVC: CCE支持使用存储类创建云硬盘和对象存储类型PVC时指定企业项目,将创建的存储资源(云硬盘和对象存储)归属于指定的企业项目下,企业项目可选为集群所属的企业项目或default企业项目。 若不指定企业项目,则创建的存储资源默认使用存储类StorageClass中指定的企业项目。 对于自定义的StorageClass,可以在StorageClass中指定企业项目,详见指定StorageClass的企业项目。StorageClass中如不指定的企业项目,则默认为default企业项目。 对于CCE提供的 csi-disk 和 csi-obs 存储类,所创建的存储资源属于default企业项目。 使用存储卷PV创建PVC: 使用PV创建PVC时,因为存储资源在创建时已经指定了企业项目,如果PVC中指定企业项目,则务必确保在PVC和PV中指定的everest.io/enterprise-project-id保持一致,否则两者无法正常绑定。
  • 前提条件 Ingress为后端工作负载提供网络访问,因此集群中需提前部署可用的工作负载。若您无可用工作负载,可参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。 为上述工作负载配置Service,支持的Service类型如表1,可参考集群内访问(ClusterIP)或节点访问(NodePort)配置示例Service。 添加NginxIngress时,需在集群中提前安装nginx-ingress插件,具体操作可参考安装插件。 表1 支持Service类型 Ingress类型 访问类型 集群内访问(ClusterIP) 节点访问(NodePort) ELBIngress 负载均衡路由 不支持 支持 ENI负载均衡路由 支持 不支持 NginxIngress 负载均衡路由 支持 支持 ENI负载均衡路由 支持 不支持
  • AOM弹性伸缩切换至HPA/CustomedHPA说明 CCE在1.15及以下版本集群支持根据AOM监控数据做工作负载弹性伸缩,该方法在1.17及以上版本集群不再支持。 如果您使用了AOM弹性伸缩方法,当集群升级到1.17后,可以切换至HPA/CustomedHPA弹性伸缩方法,在切换时需要注意如下差异: AOM弹性伸缩的利用率计算基于工作负载的limit,利用率区间为0%~100% HPA/CustomedHPA的利用率基于request计算,其区间能够大于100% 例如某个工作负载的内存request是2G, limit是16G,AOM的弹性伸缩策略是利用率达到limit的50%就扩容(即8G);使用HPA/CustomedHPA按照request计算,同样控制内存使用到8G,需要把利用率调整为16×50%/2=400%。 父主题: 工作负载弹性伸缩
  • 约束与限制 移除节点、删除节点、重置节点和缩容节点会导致与节点关联的本地持久存储卷类型的PVC/PV数据丢失,无法恢复,且PVC/PV无法再正常使用。移除节点、删除节点、重置节点和缩容节点时使用了本地持久存储卷的Pod会从待删除、重置的节点上驱逐,并重新创建Pod,Pod会一直处于pending状态,因为Pod使用的PVC带有节点标签,由于冲突无法调度成功。节点重置完成后,Pod可能调度到重置好的节点上,此时Pod会一直处于creating状态,因为PVC对应的底层逻辑卷已经不存在了。 持久存储卷或临时存储卷创建后,请勿在节点上手动删除对应的存储池或卸载数据盘,否则会导致数据丢失等异常情况。 如果要使用临时存储卷,请确保节点上Pod不要挂载/var/lib/kubelet/pods/目录,否则可能会导致使用了临时存储卷的Pod无法正常删除。
  • 使用持久存储卷 本地持久存储卷支持使用StorageClass动态创建PVC,StorageClass名称为csi-local-topology。csi-local-topology的行为相比csi-disk等他类型StorageClass有较大差异,使用csi-local-topology行为如下。 添加了本地持久存储卷的节点会自动加上node.kubernetes.io/local-storage-persistent的标签。如果Pod使用csi-local-topology类型的PVC,调度器会将Pod调度到拥有node.kubernetes.io/local-storage-persistent标签的节点上,也就是拥有本地持久存储卷的节点上。 单独创建PVC,PVC创建后,状态会一直为Pending,不会立即创建PV。等有Pod使用PVC,调度器将Pod调度到节点后,everest再创建localpv所需的逻辑卷,并返回PV,PVC完成与PV的绑定。待挂载成功后,Pod启动。 创建应用时选择动态创建PVC,此时动态创建PVC后,调度器将Pod调度到节点,everest再创建逻辑卷,并返回PV,PVC完成与PV的绑定。待挂载成功后,Pod启动。 删除应用时,可选择不删除使用的PVC。这样在下一次创建应用时可以使用使用过的PVC,这样Pod会被调度到PVC关联的节点上。 apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-local-example namespace: defaultspec: accessModes: - ReadWriteOnce # 必须为ReadWriteOnce resources: requests: storage: 10Gi # 本地持久存储卷大小 storageClassName: csi-local-topology # StorageClass类型为csi-local-topology
  • 使用临时存储卷 创建工作负载时,EmptyDir的磁盘介质选择为LocalVolume,表示使用临时存储卷。 apiVersion: apps/v1kind: Deploymentmetadata: name: nginx namespace: defaultspec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: container-1 image: nginx:alpine resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: - name: vol-164284390917275733 mountPath: /tmp imagePullSecrets: - name: default-secret volumes: - name: vol-164284390917275733 emptyDir: medium: LocalVolume # emptyDir磁盘介质选择LocalVolume,表示使用临时存储卷 sizeLimit: 1Gi
  • 持久存储卷和临时存储卷 CCE支持将节点上数据盘设置为持久存储卷和临时存储卷。 持久存储卷通过LVM组成存储池(VolumeGroup),然后划分LV给容器挂载使用。使用持久存储卷作为存储介质的PV的类型可称之为Local PV。 临时存储卷可以作为EmptyDir的存储介质。临时存储卷通过LVM组成存储池(VolumeGroup),然后划分LV给容器挂载使用,相比原生EmptyDir默认的存储介质类型性能更好。 持久存储卷和临时存储卷支持如下两种写入模式。 线性:线性逻辑卷是将一个或多个物理卷整合为一个逻辑卷,实际写入数据时会先往一个基本物理卷上写入,当存储空间占满时再往另一个基本物理卷写入。 条带化:创建逻辑卷时指定条带化,当实际写入数据时会将连续数据分成大小相同的块,然后依次存储在多个物理卷上,实现数据的并发读写从而提高读写性能。多块卷才能选择条带化。
  • 添加持久存储卷或临时存储卷 有两种方法可以添加持久存储卷或临时存储卷。 在创建节点时,可以为节点添加数据盘作为持久存储卷或临时存储卷,如下所示。 如果创建节点时没有添加持久存储卷或临时存储卷,或当前存储卷容量不够,可以去ECS中为节点添加磁盘,然后在CCE的存储池中导入。 条带化模式的存储池不支持扩容,条带化扩容后可能造成碎片空间,无法使用。 存储池不支持缩容和删除。 如果删除节点上存储池的磁盘,会导致存储池异常。 导入时可以选择写入模式。
  • default-secret default-secret的类型为kubernetes.io/dockerconfigjson,其data内容是登录SWR镜像仓库的凭据,用于从SWR拉取镜像。在CCE中创建工作负载时如果需要从SWR拉取镜像,需要配置imagePullSecrets的取值为default-secret,如下所示。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:alpine name: container-0 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret default-secret的data数据会定期更新,且当前的data内容会在一定时间后会过期失效。您可以使用describe命令在default-secret的中查看到具体的过期时间,如下所示。 在使用时请直接使用default-secret,而不要拷贝secret内容重新创建,因为secret里面的凭据会过期,从而导致无法拉取镜像。 $ kubectl describe secret default-secretName: default-secretNamespace: defaultLabels: secret-generated-by=cceAnnotations: temporary-ak-sk-expires-at: 2021-11-26 20:55:31.380909 +0000 UTCType: kubernetes.io/dockerconfigjsonData====.dockerconfigjson: 347 bytes
共100000条