华为云用户手册

  • 默认容忍策略说明 Kubernetes会自动给Pod添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的容忍度,且配置容忍时间窗(tolerationSeconds)为300s。这些默认容忍度策略表示当Pod运行的节点被打上这两个污点之一时,可以在5分钟内依旧保持运行在该节点上。 DaemonSet中的Pod被创建时,针对以上污点自动添加的容忍度将不会指定容忍时间窗,即表示节点存在上述污点时,DaemonSet中的Pod一直不会被驱逐。 tolerations: - key: node.kubernetes.io/not-ready operator: Exists effect: NoExecute tolerationSeconds: 300 - key: node.kubernetes.io/unreachable operator: Exists effect: NoExecute tolerationSeconds: 300
  • 挂载方式 本地持久卷仅支持以下挂载方式: 通过动态存储卷使用本地持久卷:即动态创建的方式,在创建PVC时通过指定存储类(StorageClass),即可自动创建对象存储和对应的PV对象。 有状态负载动态挂载本地持久卷:仅有状态工作负载支持,可以为每一个Pod关联一个独有的PVC及PV,当Pod被重新调度后,仍然能够根据该PVC名称挂载原有的数据。适用于多实例的有状态工作负载。 本地持久卷不支持通过静态PV使用,即不支持先手动创建PV然后通过PVC在工作负载中挂载的方式使用。
  • 监控与日志 AOM 应用运维管理 (Application Operations Management,简称AOM)是云上应用的一站式立体化运维管理平台,实时监控您的应用及相关云资源,分析应用健康状态,提供灵活丰富的 数据可视化 功能,帮助您及时发现故障,全面掌握应用、资源及业务的实时运行状况。 LTS: 云日志 服务(Log Tank Service,简称LTS),用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、高效、安全的日志处理能力,帮助您快速高效地进行实时决策分析、设备运维管理、用户业务趋势分析等。
  • 云原生观测 CCE云原生观测相关的功能包括监控中心、日志中心、告警中心等。以下分别介绍CCE云原生观测的主要功能。 监控中心 监控中心提供容器洞察、健康诊断、仪表盘等功能。容器洞察功能提供容器视角的可视化视图,支持集群、节点、工作负载和Pod等多种维度的监控视图,支持多级下钻与关联分析。仪表盘功能内置常见的容器监控大盘,如Kubernetes APIServer组件监控、CoreDNS组件监控和PVC监控等。 日志中心 CCE日志中心集成了 云日志服务LTS 。启用日志采集与管理,您可以快速采集CCE控制面组件日志(kube-apiserver、kube-controller-manager、kube-scheduler)、kubernetes审计日志、Kubernetes事件和容器日志(容器的标准输出、容器内的文本文件、节点日志)。 告警中心 告警中心集成应用运维管理服务AOM2.0的告警功能,提供容器告警一键开启能力,覆盖集群和容器常见故障场景。
  • 集群控制面组件说明 当前CCE支持收集以下三种类型的控制面日志,每个日志流对应一个Kubernetes控制层面组件。关于这些组件的更多信息,请参见Kubernetes组件。 表1 集群控制面组件说明 类别 组件 日志流 说明 控制面组件日志 kube-apiserver kube-apiserver-{{clusterID}} kube-apiserver组件是暴露Kubernetes API接口的控制层面的组件。更多信息,请参见kube-apiserver。 kube-controller-manager kube-controller-manager-{{clusterID}} kube-controller-manager组件是Kubernetes集群内部的管理控制中心,内嵌了Kubernetes发布版本中核心的控制链路。更多信息,请参见kube-controller-manager。 kube-scheduler kube-scheduler-{{clusterID}} kube-scheduler组件是Kubernetes集群的默认调度器。更多信息,请参见kube-scheduler。
  • 查看集群控制面组件日志 通过CCE控制台查看目标集群控制面组件日志 登录CCE控制台,进入一个已有的集群,在左侧导航栏中选择“日志中心”。 选择“控制面组件日志”页签,在控制面日志中选中需要查看的日志主题,支持的控制面组件日志请参见集群控制面组件说明。关于该页面的操作详情,请参见LTS用户指南。 通过LTS控制台查看目标集群控制面组件日志 登录LTS控制台,选择“日志管理”页面。 通过集群ID查到对应的日志组,单击该日志组名称,查看日志流,详情请参见LTS用户指南。
  • 联邦用户支持说明 IAM 支持基于SAML、OIDC协议的单点登录,如果您已经有自己的企业管理系统,同时您的用户需要使用您账号内的云服务资源,您可以使用IAM的身份提供商功能,实现用户使用企业管理系统账号单点登录,这一过程称之为联邦身份认证。 通过联邦身份认证访问的用户称为联邦用户,联邦用户相当于IAM用户。 联邦用户使用CCE时需要注意如下两点。 用户创建CCE集群时,会在集群中默认为该用户创建一个cluster-admin权限(管理员权限),联邦用户由于每次登录注销都会改变用户ID,所以在CCE控制台权限管理处,权限用户会显示已删除,请勿删除该权限,否则会导致鉴权失败。此种情况下建议在CCE为某个用户组创建cluster-admin权限,将联邦用户加入此用户组。 联邦用户不支持创建永久访问密钥AK/SK,在需要使用AK/SK的场景(如创建OBS类型PV/PVC时),只能由账号或是实体IAM用户创建密钥,共享给联邦用户。由于密钥表示用户所拥有的权限,因此建议由与联邦用户同在一个用户组的实体IAM用户创建并分享密钥。
  • CCE支持的权限管理能力 CCE的权限管理包括“集群权限”和“命名空间权限”两种能力,能够从集群和命名空间层面对用户组或用户进行细粒度授权,具体解释如下: 集群权限:是基于IAM系统策略的授权,可以通过用户组功能实现IAM用户的授权。用户组是用户的集合,通过集群权限设置可以让某些用户组操作集群(如创建/删除集群、节点、节点池、模板、插件等),而让某些用户组仅能查看集群。 集群权限涉及CCE非Kubernetes API,支持IAM细粒度策略、企业项目管理相关能力。 命名空间权限:是基于Kubernetes RBAC(Role-Based Access Control,基于角色的访问控制)能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。同时CCE基于开源能力进行了增强,可以支持基于IAM用户或用户组粒度进行RBAC授权、IAM token直接访问API进行RBAC认证鉴权。 命名空间权限涉及CCE Kubernetes API,基于Kubernetes RBAC能力进行增强,支持对接IAM用户/用户组进行授权和认证鉴权,但与IAM细粒度策略独立。 CCE的权限可以从使用的阶段分为两个阶段来看,第一个阶段是创建和管理集群的权限,也就是拥有创建/删除集群、节点等资源的权限。第二个阶段是使用集群Kubernetes资源(如工作负载、Service等)的权限。 图1 权限示例图 清楚了集群权限和命名空间权限后,您就可以通过这两步授权,做到精细化的权限控制。
  • 集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系 拥有不同集群权限(IAM授权)的用户,其拥有的命名空间权限(Kubernetes RBAC授权)不同。表1给出了不同用户拥有的命名空间权限详情。 表1 不同用户拥有的命名空间权限 用户类型 1.13及以上版本的集群 拥有Tenant Administrator权限的用户(例如账号) 全部命名空间权限 拥有CCE Administrator权限的IAM用户 全部命名空间权限 拥有CCE FullAccess或者CCE ReadOnlyAccess权限的IAM用户 按Kubernetes RBAC授权 拥有Tenant Guest权限的IAM用户 按Kubernetes RBAC授权
  • IAM支持的授权项 策略包含系统策略和自定义策略,如果系统策略不满足授权要求,管理员可以创建自定义策略,并通过给用户组授予自定义策略来进行精细的访问控制。策略支持的操作与API相对应,授权项列表说明如下: 权限:允许或拒绝某项操作。 对应API接口:自定义策略实际调用的API接口。 授权项:自定义策略中支持的Action,在自定义策略中的Action中写入授权项,可以实现授权项对应的权限功能。 依赖的授权项:部分Action存在对其他Action的依赖,需要将依赖的Action同时写入授权项,才能实现对应的权限功能。 IAM项目(Project)/企业项目(Enterprise Project):自定义策略的授权范围,包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目,表示此授权项对应的自定义策略,可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目,不支持企业项目,表示仅能在IAM中给用户组授权并生效,如果在企业管理中授权,则该自定义策略不生效。关于IAM项目与企业项目的区别,详情请参见:IAM与企业管理的区别。 “√”表示支持,“x”表示暂不支持。 云容器引擎(CCE)支持的自定义策略授权项如下所示: 表2 Cluster 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目 (Enterprise Project) 获取指定项目下的集群 GET /api/v3/projects/{project_id}/clusters cce:cluster:list √ √ 获取指定的集群 GET /api/v3/projects/{project_id}/clusters/{cluster_id} cce:cluster:get √ √ 创建集群 POST /api/v3/projects/{project_id}/clusters cce:cluster:create √ √ 更新指定的集群 PUT /api/v3/projects/{project_id}/clusters/{cluster_id} cce:cluster:update √ √ 删除集群 DELETE /api/v3/projects/{project_id}/clusters/{cluster_id} cce:cluster:delete √ √ 升级集群 POST /api/v2/projects/:projectid/clusters/:clusterid/upgrade cce:cluster:upgrade √ √ 唤醒集群 POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/awake cce:cluster:start √ √ 休眠集群 POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/hibernate cce:cluster:stop √ √ 变更集群规格 POST /api/v2/projects/{project_id}/clusters/:clusterid/resize cce:cluster:resize √ √ 获取集群证书 POST /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert cce:cluster:get √ √ 表3 Node 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 获取集群下所有节点 GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes cce:node:list √ √ 获取指定的节点 GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} cce:node:get √ √ 创建节点 POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes cce:node:create √ √ 说明: 使用企业项目授权创建节点需额外添加evs:quota:get的全局权限。 更新指定的节点 PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} cce:node:update √ √ 删除节点 DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} cce:node:delete √ √ 表4 Job 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 获取任务信息 GET /api/v3/projects/{project_id}/jobs/{job_id} cce:job:get √ √ 列出所有任务 GET /api/v2/projects/{project_id}/jobs cce:job:list √ √ 删除所有任务或删除单个任务 DELETE /api/v2/projects/{project_id}/jobs DELETE /api/v2/projects/{project_id}/jobs/{job_id} cce:job:delete √ √ 表5 Nodepool 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 获取集群下所有节点池 GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools cce:nodepool:list √ √ 获取节点池 GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id} cce:nodepool:get √ √ 创建节点池 POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools cce:nodepool:create √ √ 更新节点池信息 PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id} cce:nodepool:update √ √ 删除节点池 DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id} cce:nodepool:delete √ √ 表6 Chart 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 更新模板 PUT /v2/charts/{id} cce:chart:update √ × 上传模板 POST /v2/charts cce:chart:upload √ × 列出所有模板 GET /v2/charts cce:chart:list √ × 获取模板信息 GET /v2/charts/{id} cce:chart:get √ × 删除模板 DELETE /v2/charts/{id} cce:chart:delete √ × 表7 Release 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 更新升级模板实例 PUT /v2/releases/{name} cce:release:update √ √ 列出所有模板实例 GET /v2/releases cce:release:list √ √ 创建模板实例 POST /v2/releases cce:release:create √ √ 获取模板实例信息 GET /v2/releases/{name} cce:release:get √ √ 删除模板实例 DELETE /v2/releases/{name} cce:release:delete √ √ 表8 Storage 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 创建PersistentVolumeClaim POST /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims cce:storage:create √ √ 删除PersistentVolumeClaim DELETE /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims/{name} cce:storage:delete √ √ 列出所有磁盘 GET /storage/api/v1/namespaces/{namespace}/listvolumes cce:storage:list √ √ 表9 Addon 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 创建插件实例 POST /api/v3/addons cce:addonInstance:create √ √ 获取插件实例 GET /api/v3/addons/{id}?cluster_id={cluster_id} cce:addonInstance:get √ √ 列出所有插件实例 GET /api/v3/addons?cluster_id={cluster_id} cce:addonInstance:list √ √ 删除插件实例 DELETE /api/v3/addons/{id}?cluster_id={cluster_id} cce:addonInstance:delete √ √ 更新升级插件实例 PUT /api/v3/addons/{id} cce:addonInstance:update √ √ 表10 Quota 权限 对应API接口 授权项 IAM项目(Project) 企业项目 (Enterprise Project) 查询配额详情 GET /api/v3/projects/{project_id}/quotas cce:quota:get √ √
  • kubectl权限说明 您可以通过kubectl访问集群的Kubernetes资源,那kubectl拥有哪些Kubernetes资源的权限呢? kubectl访问CCE集群是通过集群上生成的配置文件(kubeconfig.json)进行认证,kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。而用户拥有的权限就是表1所示的权限。
  • 操作步骤 下面介绍如何开启或关闭出口网络带宽保障。 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“节点管理”,选择“节点池”页签,创建或更新节点池时在“高级配置”中添加以下标签。 volcano.sh/oversubscription=true volcano.sh/colocation=true 图1 节点标签设置 在左侧导航栏中选择“插件中心”,单击Volcano插件下的“安装”,并在“参数配置”中开启“在离线业务混部”。具体安装步骤请参见Volcano调度器。 如已安装Volcano插件,可单击“编辑”查看或修改配置。 开启或调整出口网络带宽保障参数。 确认Volcano插件处于正常运行状态后,可执行以下命令,编辑kube-system命名空间下名称为volcano-agent-configuration的configmap参数,将enable参数设置为true即可开启出口网络带宽保障,同时可调整出口网络带宽保障参数。 kubectl edit configmap -nkube-system volcano-agent-configuration 示例如下: networkQosConfig: enable: true onlineBandwidthWatermarkPercent: 80 offlineLowBandwidthPercent: 10 offlineHighBandwidthPercent: 40 参数编辑后会对集群中所有Huawei Cloud EulerOS 2.0操作系统的节点生效。 表1 networkQosConfig参数说明 名称 说明 默认值 配置范围 enable 是否开启出口网络带宽保障特性。 false true或false onlineBandwidthWatermarkPercent 在线业务总带宽水线值与机型的基准带宽的比值,即: 在线业务总带宽水线值 = 节点机型基准带宽 * onlineBandwidthWatermarkPercent/100 80 配置有效值范围:1-1000 说明: 由于实际的网络环境可能优于基准带宽,处于在基准带宽和最大带宽之间,因此配置范围支持大于100。 offlineLowBandwidthPercent 在线业务带宽使用超过水线时,离线业务最高总带宽占用量在机型基准带宽中的占比。 如果同节点的在线业务总带宽的超过节点机型基准带宽 * onlineBandwidthWatermarkPercent/100 ,则同节点的离线业务总带宽的不超过节点机型基准带宽 * offlineLowBandwidthPercent/100 10 offlineHighBandwidthPercent 在线业务带宽使用未超过水线时,离线业务最高总带宽占用量在机型基准带宽中的占比。 如果同节点的在线业务总带宽的未超过节点机型基准带宽 * onlineBandwidthWatermarkPercent/100,则同节点的离线业务总带宽的不超过节点机型基准带宽 * offlineHighBandwidthPercent/100 40 图2 出口网络带宽保障示例图 上图中,当在线业务带宽低于在线业务水线时,离线业务的带宽阈值处于一个相对较高的水平,即表示允许离线业务占用一定的带宽;当在线业务带宽超过在线业务水线时,则会相应地调低离线业务带宽阈值,以降低离线业务占用的带宽,预留出更多的带宽供在线业务使用。 如需关闭出口网络带宽保障特性,请确认Volcano插件处于正常运行状态,然后编辑kube-system命名空间下名称为volcano-agent-configuration的configmap参数,将enable参数设置为false即可。 kubectl edit configmap -nkube-system volcano-agent-configuration 修改参数如下: networkQosConfig: enable: false onlineBandwidthWatermarkPercent: 80 offlineLowBandwidthPercent: 10 offlineHighBandwidthPercent: 40
  • 约束与限制 使用出口网络带宽保障特性需满足以下要求: 仅支持Huawei Cloud EulerOS 2.0操作系统的节点。 仅支持 CCE Turbo 集群,且集群版本为v1.23及以上。 集群中需要安装Volcano 1.9.0及以上版本的插件,且开启混合部署开关(即将插件高级配置中的colocation_enable设置为true)。 开启、修改或者关闭出口网络带宽保障特性,均需要保证Volcano插件处于正常运行状态。 对于安装Volcano插件之前节点上已运行的Pod,开启网络带宽保障后需要手动重启Pod才可生效。 卸载Volcano插件或关闭混合部署开关(即将插件高级配置中的colocation_enable设置为false)不会影响节点上已有的出口网络带宽保障设置。如需关闭该特性,请参见关闭出口网络带宽保障。 使用带宽限速有可能造成协议栈缓存积压。对于UDP等无反压机制的协议场景,可能出现有丢包、ENOBUFS等问题。 使用带宽限速会增加离线业务得不到带宽的风险,极端场景可能会出现业务因为带宽不足饿死、Pod健康检查失败等问题。 出口网络带宽保障的例外场景: 当混部的在线Pod或者是离线Pod使用了网络带宽限速功能时,网络带宽限速功能的优先级会高于当前功能。 当Pod使用节点网络(hostNetwork)时,使用出口网络保障功能无法生效。
  • 创建HPA策略 创建HPA策略,如下所示,该策略关联了名为hpa-example的负载,期望CPU使用率为50%。 另外有两条注解annotations,一条是CPU的阈值范围,最低30,最高70,表示CPU使用率在30%到70%之间时,不会扩缩容,防止小幅度波动造成影响。另一条是扩缩容时间窗,表示策略成功触发后,在缩容/扩容冷却时间内,不会再次触发缩容/扩容,以防止短期波动造成影响。 apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: hpa-policy annotations: extendedhpa.metrics: '[{"type":"Resource","name":"cpu","targetType":"Utilization","targetRange":{"low":"30","high":"70"}}]' extendedhpa.option: '{"downscaleWindow":"5m","upscaleWindow":"3m"}' spec: scaleTargetRef: kind: Deployment name: hpa-example apiVersion: apps/v1 minReplicas: 1 maxReplicas: 100 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 在控制台创建则参数填写如下所示。
  • 应用场景 企业应用的流量大小不是每时每刻都一样,有高峰,有低谷,如果每时每刻都要保持能够扛住高峰流量的机器数目,那么成本会很高。通常解决这个问题的办法就是根据流量大小或资源占用率自动调节机器的数量,也就是弹性伸缩。 当使用Pod/容器部署应用时,通常会设置容器的申请/限制值来确定可使用的资源上限,以避免在流量高峰期无限制地占用节点资源。然而,这种方法可能会存在资源瓶颈,达到资源使用上限后可能会导致应用出现异常。为了解决这个问题,可以通过伸缩Pod的数量来分摊每个应用实例的压力。如果增加Pod数量后,节点资源使用率上升到一定程度,继续扩容出来的Pod无法调度,则可以根据节点资源使用率继续伸缩节点数量。
  • 解决方案 CCE中弹性伸缩最主要的就是使用HPA(Horizontal Pod Autoscaling)和CA(Cluster AutoScaling)两种弹性伸缩策略,HPA负责工作负载弹性伸缩,也就是应用层面的弹性伸缩,CA负责节点弹性伸缩,也就是资源层面的弹性伸缩。 通常情况下,两者需要配合使用,因为HPA需要集群有足够的资源才能扩容成功,当集群资源不够时需要CA扩容节点,使得集群有足够资源;而当HPA缩容后集群会有大量空余资源,这时需要CA缩容节点释放资源,才不至于造成浪费。 如图1所示,HPA根据监控指标进行扩容,当集群资源不够时,新创建的Pod会处于Pending状态,CA会检查所有Pending状态的Pod,根据用户配置的扩缩容策略,选择出一个最合适的节点池,在这个节点池扩容。HPA和CA的工作原理详情请参见工作负载伸缩原理和节点伸缩原理。 图1 HPA + CA工作流程 使用HPA+CA可以很容易做到弹性伸缩,且节点和Pod的伸缩过程可以非常方便的观察到,使用HPA+CA做弹性伸缩能够满足大部分业务场景需求。 本文将通过一个示例介绍HPA+CA两种策略配合使用下弹性伸缩的过程,从而帮助您更好的理解和使用弹性伸缩。
  • 创建节点池和节点伸缩策略 登录CCE控制台,进入已创建的集群,在左侧单击“节点管理”,选择“节点池”页签并单击右上角“创建节点池”。 填写节点池配置。 节点数量:设置为1,表示创建节点池时默认创建的节点数为1。 节点规格:2核 | 4GiB 其余参数设置可使用默认值,详情请参见创建节点池。 节点池创建完成后,在目标节点池所在行右上角单击“弹性伸缩”,设置弹性伸缩配置。关于节点伸缩策略设置的详细说明,请参见创建节点伸缩策略。 若集群中未安装CCE集群弹性引擎插件,请先安装该插件。详情请参见CCE集群弹性引擎。 弹性扩容:开启,表示节点池将根据集群负载情况自动创建节点池内的节点。 自定义弹性策略:单击“添加策略”,在弹出的添加规则窗口中设置参数。例如CPU分配率大于70%时,关联的节点池都增加一个节点。CA策略需要关联节点池,可以关联多个节点池,当需要对节点扩缩容时,在节点池中根据最小浪费规则挑选合适规格的节点扩缩容。 弹性缩容:开启,表示节点池将根据集群负载情况自动删除节点池内的节点。例如节点资源使用率小于50%时进行缩容扫描,启动缩容。 伸缩配置:修改节点数范围,弹性伸缩时节点池下的节点数量会始终介于节点数范围内。 伸缩对象:对节点池中的节点规格单独设置开启弹性伸缩。 设置完成后,单击“确定”。
  • 创建工作负载 使用构建的hpa-example镜像创建无状态工作负载,副本数为1,镜像地址与上传到SWR仓库的组织有关,需要替换为实际取值。 kind: Deployment apiVersion: apps/v1 metadata: name: hpa-example spec: replicas: 1 selector: matchLabels: app: hpa-example template: metadata: labels: app: hpa-example spec: containers: - name: container-1 image: 'hpa-example:latest' # 替换为您上传到SWR的镜像地址 resources: limits: # limits与requests建议取值保持一致,避免扩缩容过程中出现震荡 cpu: 500m memory: 200Mi requests: cpu: 500m memory: 200Mi imagePullSecrets: - name: default-secret 然后再为这个负载创建一个Nodeport类型的Service,以便能从外部访问。 Nodeport类型的Service从外网访问需要为集群某个节点创建EIP,创建完后需要同步节点信息,具体请参见同步节点信息。如果节点已有EIP则无需再次创建。 或者您也可以创建带ELB的Service从外部访问,具体请参见通过kubectl命令行创建-自动创建ELB。 kind: Service apiVersion: v1 metadata: name: hpa-example spec: ports: - name: cce-service-0 protocol: TCP port: 80 targetPort: 80 nodePort: 31144 selector: app: hpa-example type: NodePort
  • 约束限制 如需要使用固定EIP或自动创建EIP功能,请提交工单申请EIP V3接口的创建和删除权限。 仅以下指定版本的CCE Turbo集群支持用户配置Pod固定EIP: v1.19集群:v1.19.16-r20及以上版本 v1.21集群:v1.21.10-r0及以上版本 v1.23集群:v1.23.8-r0及以上版本 v1.25集群:v1.25.3-r0及以上版本 v1.25以上版本集群 开启固定EIP功能需要和Pod自动创建EIP功能配合使用,详情请参见为Pod配置EIP。 目前只支持StatefulSet类型的Pod或直接创建的Pod固定EIP,暂不支持Deployment、DaemonSet等其他类型的工作负载配置Pod固定EIP。 固定EIP创建后,生命周期内(如过期时间未到/Pod还在使用中)不支持通过Pod修改EIP属性。 对Pod的EIP地址无明确要求的业务不建议配置固定EIP,因为配置了固定EIP的Pod,Pod重建的耗时会略微变长。
  • 约束限制 如需要使用固定EIP或自动创建EIP功能,请提交工单申请EIP V3接口的创建和删除权限。 仅以下指定版本的CCE Turbo集群支持用户为Pod配置EIP: v1.19集群:v1.19.16-r20及以上版本 v1.21集群:v1.21.10-r0及以上版本 v1.23集群:v1.23.8-r0及以上版本 v1.25集群:v1.25.3-r0及以上版本 v1.25以上版本集群 绑定EIP的Pod,如果要被公网成功访问,需要添加放通相应请求流量的安全组规则。 单个Pod只能绑定单个EIP。 创建Pod时,可指定相关的annotation配置EIP的属性,创建完成后,更新EIP相关的annotation均无效。 与Pod关联的EIP不要通过弹性公网IP的console或API直接操作(修改名称/删除/解绑/绑定/转包周期等操作),否则可能导致EIP功能异常。 自动创建的EIP被手动删除后,会导致网络异常,需要重建Pod。
  • 检查Pod的EIP就绪 容器网络控制器会在Pod IP分配后,为Pod绑定EIP并回写分配结果至Pod的annotation(yangtse.io/allocated-ipv4-eip),Pod业务容器的启动时间可能早于EIP分配结果回写成功时间。 您可以尝试为Pod配置init container并使用downwardAPI类型的存储卷把yangtse.io/allocated-ipv4-eip的annotation通过volume挂载到init container里,并在init container中检查EIP是否已经分配成功。您可以参考以下示例配置init container。 apiVersion: v1 kind: Pod metadata: name: example annotations: yangtse.io/pod-with-eip: "true" yangtse.io/eip-bandwidth-size: "5" yangtse.io/eip-network-type: 5_bgp yangtse.io/eip-charge-mode: bandwidth yangtse.io/eip-bandwidth-name: "xxx" spec: initContainers: - name: init image: busybox:latest command: ['timeout', '60', 'sh', '-c', "until grep -E '[0-9]+' /etc/eipinfo/allocated-ipv4-eip; do echo waiting for allocated-ipv4-eip; sleep 2; done"] volumeMounts: - name: eipinfo mountPath: /etc/eipinfo volumes: - name: eipinfo downwardAPI: items: - path: "allocated-ipv4-eip" fieldRef: fieldPath: metadata.annotations['yangtse.io/allocated-ipv4-eip'] ...
  • 依赖服务的权限设置 如果IAM用户需要在CCE Console控制台拥有相应功能的查看或使用权限,请确认已经对该用户所在的用户组设置了CCE Administrator、CCE FullAccess或CCE ReadOnlyAccess策略的集群权限,再按如下表1增加依赖服务的角色或策略。 企业项目能够实现企业不同项目间资源的分组和管理,重在资源隔离,而IAM可以实现细粒度授权,因此强烈推荐您使用IAM实现权限管理。 若您使用企业项目设置子用户权限,会有如下功能限制: 在CCE控制台,集群监控获取AOM监控的接口暂不支持企业项目,因此企业项目子用户将无法查看监控相关数据。 在CCE控制台,由于创建节点时的密钥对查询接口不支持企业项目,因此企业项目子用户将无法使用“密钥对”登录方式,您可以选择使用“密码”登录方式。 在CCE控制台,由于创建模板时不支持企业项目,因此企业项目子用户将无法使用模板管理。 在CCE控制台,由于云硬盘查询接口不支持企业项目,因此企业项目子用户将无法使用已有云硬盘创建PV。如需使用,需要为IAM用户添加evs:volumes:get的细粒度权限。 CCE支持细粒度的权限设置,但有如下限制说明: AOM不支持资源级别细粒度:当通过IAM集群资源细粒度设置特定资源操作权限之后,IAM用户在CCE控制台的总览界面查看集群监控时,将显示非细粒度关联集群的监控信息。 在IAM页面设置CCE FullAccess或者CCE ReadOnlyAccess权限后,需要配置sfsturbo:*:*权限才能使用极速文件存储卷,否则IAM用户在集群下查询极速文件存储卷将失败。 表1 CCE Console中依赖服务的角色或策略 Console控制台功能 依赖服务 需配置角色/策略 集群信息总览 应用运维管理 AOM IAM用户设置了CCE Administrator权限后,需要增加AOM FullAccess权限后才能访问总览中的数据图表。 支持设置了IAM ReadOnlyAccess和CCE FullAccess或CCE ReadOnlyAccess权限的IAM用户直接访问总览中的数据图表。 工作负载 弹性负载均衡 ELB 应用性能管理 APM 应用运维管理 AOM NAT网关 NAT 对象存储服务 OBS 弹性文件服务 SFS 正常创建工作负载时不依赖其他服务的权限。 如果需要创建ELB类型的服务,需要设置ELB FullAccess或者ELB Administrator权限,以及VPC Administrator权限。 如果需要使用Java探针,需要设置AOM FullAccess和 APM FullAccess权限。 如果需要NAT网关类型的服务,需要设置NAT Gateway Administrator权限。 如果使用对象存储,需要全局设置OBS Administrator权限。 说明: 由于缓存的存在,对用户、用户组以及企业项目授予OBS相关的RBAC策略后,大概需要等待13分钟RBAC策略才能生效;授予OBS相关的系统策略后,大概需要等待5分钟系统策略能生效。 如果使用文件存储,需要设置SFS FullAccess权限。 集群管理 应用运维管理 AOM 费用中心 BSS 如果需要弹性扩容权限,需要设置AOM FullAccess权限。 如果需要转包周期,需要设置BSS Administrator权限。 节点管理 弹性云服务器 E CS 当IAM用户权限为CCE Administrator时,如果创建和删除节点,需要配置ECS FullAccess或ECS Administrator权限,以及VPC Administrator权限。 服务 弹性负载均衡 ELB NAT网关 NAT 正常创建时不依赖其他服务的权限。 如果需要创建ELB类型的服务,需要设置ELB FullAccess或者ELB Administrator权限,以及VPC Administrator权限。 如果需要NAT网关类型的服务,需要设置NAT Administrator权限。 存储 对象存储服务 OBS 弹性文件服务 SFS 极速文件存储 SFS Turbo 如果使用对象存储,需要全局设置OBS Administrator权限。 说明: 由于缓存的存在,对用户、用户组以及企业项目授予OBS相关的RBAC策略后,大概需要等待13分钟RBAC策略才能生效;授予OBS相关的系统策略后,大概需要等待5分钟系统策略能生效。 如果使用文件存储,需要设置SFS FullAccess权限。 如果使用极速文件存储,需要设置SFS Turbo FullAccess权限 导入存储的功能需要设置CCE Administrator权限。 命名空间 / 无需其他依赖权限。 模板市场 / 当前仅支持账号、设置了CCE Administrator权限的IAM用户访问。 插件中心 / 支持账号、设置了CCE Administrator、CCE FullAccess或CCE ReadOnlyAccess等权限的IAM用户访问本功能。 权限管理 / 支持账号访问。 支持设置了CCE Administrator和Security Administrator(全局级策略)权限的IAM用户访问。 支持设置了CCE FullAccess或CCE ReadOnlyAccess权限的IAM用户访问,同时还需要拥有命名空间的管理员权限(cluster-admin)。 配置与密钥 / 配置项 ( ConfigMap )无需其他依赖权限。 密钥 ( Secret )需要在命名空间权限下设置cluster-admin、admin或者edit权限才能查看,依赖服务需要添加DEW KeypairFullAccess或者DEW KeypairReadOnlyAccess权限。 帮助中心 / 无需其他依赖权限。 其他服务跳转 容器镜像服务 SWR 应用服务网格 ASM 云日志服务 LTS 多云容器平台 MCP 为便于您快速进入CCE相关服务的控制台,在CCE控制台增加了其他服务的跳转链接,CCE默认没有这些服务的全部权限,如果IAM用户需要查看或使用其功能,请按照该服务的权限策略说明设置相应的权限策略。
  • 方案概述 SFS Turbo默认只能被云上同一个VPC内的ECS/CCE访问,用户可通过云专线/VPN/对等连接等方式打通网络,实现多种访问方式。 云下或其他云访问: 云专线/VPN 云上同区域同一账号不同VPC: VPC对等连接 云上同区域跨账号访问: VPC对等连接 不同区域访问: 云连接 迁移数据分为两种网络条件,通过可访问公网的ECS直接挂载迁移。 通过mount方式挂载访问SFS Turbo,将本地NAS存储中的数据迁移至SFS Turbo。 通过云专线迁移(rclone工具) 通过云专线迁移(rsync工具) 无法打通网络直接挂载,可以通过公网访问华为云ECS绑定的EIP,也可进行传输迁移。 跨服务器迁移(rclone工具) 父主题: 弹性文件服务数据迁移
  • 操作步骤 以root账号登录弹性云服务器。 使用以下命令在root账号下使用以下命令添加普通用户账号,下面以添加普通用户Tom为例。 adduser Tom passwd Tom 根据回显提示修改普通用户Tom的密码,创建成功后会自动创建用户Tom的主目录/home/Tom。 添加普通用户Tom成功后,再在root的本地目录下使用以下命令为普通用户Tom创建子目录。 由创建文件系统本地目录章节的步骤4可知root的本地目录为root001,使用以下命令为普通用户Tom创建子目录Tom。其中root001需替换为实际的本地目录。 mkdir /root/root001/Tom 使用以下命令将子目录Tom的读写权限赋予普通用户Tom。其中root001需替换为实际的本地目录。 chown Tom:Tom /root/root001/Tom 创建完毕后可以通过以下命令验证普通用户Tom是否已有子目录Tom的读写权限。如图1所示。 cd /home cd /root/root001 ll 图1 查询权限 可以看到用户Tom已经获取了子目录Tom的读写权限。 将root001/Tom子目录使用挂载命令mount挂载到 Tom 的主目录/home/Tom中。其中xx-xxxxx-xx需要替换为文件系统所在区域,share-xxxx需要修改为实际的文件系统,第一个Tom需要修改为实际的子目录名称。如图2所示。 mount -t nfs sfs-nas1.xx-xxxxx-xx.xxxxxxxxxx.com:/share-xxxx/Tom /home/Tom 图2 挂载目录 执行以下命令可以查看到该子目录已经成功挂载至Tom的主目录中。如图3所示。 df -h 图3 查询挂载结果
  • 返回结果说明 表2 返回结果列表 参数名称 参数类型 描述 output *BaseModel 参数解释: 接口返回信息,详情参考BaseModel。 err error 参数解释: 接口返回错误信息。 表3 BaseModel 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
  • 代码示例 1. 本示例用于删除名为examplebucket桶的标签配置 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 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 // securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint/*, obs.WithSecurityToken(securityToken)*/) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } // 指定存储桶名称 bucketname := "examplebucket" // 删除桶标签配置 output, err := obsClient.DeleteBucketTagging(bucketname) if err == nil { fmt.Printf("Delete bucket(%s)'s tagging configuration successful!\n", bucketname) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Delete bucket(%s)'s tagging configuration fail!\n", bucketname) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 bucketName string 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 extensions extensionOptions 可选 参数解释: 桶相关扩展信息。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。
  • 接口约束 您必须是桶拥有者或拥有删除桶标签的权限,才能删除桶标签。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:DeleteBucketTagging权限,如果使用桶策略则需授予DeleteBucketTagging权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。
  • 接口约束 您必须是桶拥有者或拥有获取桶存储类型的权限,才能获取桶存储类型。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetBucketStoragePolicy权限,如果使用桶策略则需授予GetBucketStoragePolicy权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。
  • 代码示例 本示例用于获取名为examplebucket桶的存储类别 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 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 // securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint/*, obs.WithSecurityToken(securityToken)*/) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } // 指定存储桶名称 bucketname := "examplebucket" // 获取桶的存储类别 output, err := obsClient.GetBucketStoragePolicy(bucketname) if err == nil { fmt.Printf("Get bucket(%s)'s storage-class successful!\n", bucketname) fmt.Printf("RequestId:%s\n", output.RequestId) fmt.Printf("StorageClass:%s\n", output.StorageClass) return } fmt.Printf("Get bucket(%s)'s storage-class fail!\n", bucketname) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
共100000条