华为云用户手册

  • 插件简介 Volcano是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性。 Volcano提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力,通过接入AI、大数据、基因、渲染等诸多行业计算框架服务终端用户。(目前Volcano项目已经在Github开源) Volcano针对计算型应用提供了作业调度、作业管理、队列管理等多项功能,主要特性包括: 丰富的计算框架支持:通过CRD提供了批量计算任务的通用API,通过提供丰富的插件及作业生命周期高级管理,支持TensorFlow,MPI,Spark等计算框架容器化运行在Kubernetes上。 高级调度:面向批量计算、高性能计算场景提供丰富的高级调度能力,包括成组调度,优先级抢占、装箱、资源预留、任务拓扑关系等。 队列管理:支持分队列调度,提供队列优先级、多级队列等复杂任务调度能力。 项目开源地址:https://github.com/volcano-sh/volcano
  • 升级插件 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击“Volcano”下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级“Volcano”插件时,会替换原先节点上的旧版本的“Volcano”插件,安装最新版本的“Volcano”插件以实现功能的快速升级。 在基本信息页面选择插件版本,单击“下一步”。 单击“升级”即可升级“Volcano”插件。
  • 依赖服务的权限设置 如果IAM用户需要在CCE Console控制台拥有相应功能的查看或使用权限,请确认已经对该用户所在的用户组设置了CCE Administrator、CCE FullAccess或CCE ReadOnlyAccess策略的集群权限,再按如下表1增加依赖服务的角色或策略。 企业项目能够实现企业不同项目间资源的分组和管理,重在资源隔离,而IAM可以实现细粒度授权,因此强烈推荐您使用IAM实现权限管理。 若您使用企业项目设置子用户权限,会有如下功能限制: 由于存储资源暂不支持企业项目,因此在CCE控制台,企业项目子用户查看非“Default”企业项目下集群的存储资源相关页面,存储页面中各按钮均置灰,且资源不显示。 在CCE控制台,集群监控获取AOM监控的接口暂不支持企业项目,因此企业项目子用户将无法查看监控相关数据。 在CCE控制台,由于创建节点时的密钥对查询接口不支持企业项目,因此企业项目子用户将无法使用“密钥对”登录方式,您可以选择使用“密码”登录方式。 为企业项目设置CCE FullAccess权限后 ,需要在IAM控制台界面中再配置ecs:availabilityZones:list权限,企业项目子用户创建节点才可以正常显示并创建,否则将提示没有ecs:availabilityZones:list权限。 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权限。 节点管理 弹性云服务器 ECS 当IAM用户权限为CCE Administrator时,如果创建和删除节点,需要配置ECS FullAccess或ECS Administrator权限,以及VPC Administrator权限。 网络管理 弹性负载均衡 ELB NAT网关 NAT 正常创建时不依赖其他服务的权限。 如果需要创建ELB类型的服务,需要设置ELB FullAccess或者ELB Administrator权限,以及VPC Administrator权限。 如果需要NAT网关类型的服务,需要设置NAT Administrator权限。 存储管理 对象存储服务 OBS 弹性文件服务 SFS 极速文件存储 EFS(SFS Turbo) 如果使用对象存储,需要全局设置OBS Administrator权限。 说明: 由于缓存的存在,对用户、用户组以及企业项目授予OBS相关的RBAC策略后,大概需要等待13分钟RBAC策略才能生效;授予OBS相关的系统策略后,大概需要等待5分钟系统策略能生效。 如果使用文件存储,需要设置SFS FullAccess权限。 如果使用极速文件存储,需要设置SFS Turbo Admin权限 导入存储的功能需要设置CCE Administrator权限。 命名空间 / 无需其他依赖权限。 模板市场 / 当前仅支持华为云帐号、设置了CCE Administrator权限的IAM用户访问。 插件管理 / 支持华为云帐号、设置了CCE Administrator、CCE FullAccess或CCE ReadOnlyAccess等权限的IAM用户访问本功能。 权限管理 / 支持华为云帐号访问。 支持设置了CCE Administrator和Security Administrator(全局级策略)权限的IAM用户访问。 支持设置了IAM ReadOnlyAccess和CCE FullAccess或CCE ReadOnlyAccess权限的IAM用户访问。 配置中心 / 配置项 ( ConfigMap )无需其他依赖权限。 密钥 ( Secret )需要在命名空间权限下设置cluster-admin、admin或者edit权限才能查看,依赖服务需要添加DEW KeypairFullAccess或者DEW KeypairReadOnlyAccess权限。 帮助中心 / 无需其他依赖权限。 其他服务跳转 容器镜像服务 SWR 应用服务网格 ASM 应用运维管理 AOM 多云容器平台 MCP 云监控服务 Cloud Eye(存储管理与节点管理的“监控”跳转) 为便于您快速进入CCE相关服务的控制台,在CCE控制台增加了其他服务的跳转链接,CCE默认没有这些服务的全部权限,如果IAM用户需要查看或使用其功能,请按照该服务的权限策略说明设置相应的权限策略。
  • 示例:授予命名空间只读权限(view) view权限拥有命名空间查看权限,您可以给某个或全部命名空间授权。 图6 授予default命名空间只读权限(view) 如果使用kubectl查看可以看到创建了一个RoleBinding,将view和cce-role-group这个用户组绑定了起来,且权限范围是default这个命名空间。 # kubectl get rolebindingNAME ROLE AGEclusterrole_view_group0c96fad22880f32a3f84c009862af6f7 ClusterRole/view 7s# kubectl get rolebinding clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 -oyamlapiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: annotations: CCE.com/IAM: "true" creationTimestamp: "2021-06-24T01:36:53Z" name: clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 namespace: default resourceVersion: "36965800" selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 uid: b86e2507-e735-494c-be55-c41a0c4ef0ddroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: viewsubjects:- apiGroup: rbac.authorization.k8s.io kind: Group name: 0c96fad22880f32a3f84c009862af6f7 使用被授予用户连接集群,您会发现可以查询default命名空间的资源,但无法创建资源。 # kubectl get podNAME READY STATUS RESTARTS AGEtest-568d96f4f8-brdrp 1/1 Running 0 40mtest-568d96f4f8-cgjqp 1/1 Running 0 40m# kubectl run -i --tty --image tutum/dnsutils dnsutils --restart=Never --rm /bin/shError from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot create resource "pods" in API group "" in the namespace "default"
  • 配置命名空间权限(控制台) CCE中的命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。 登录CCE控制台,在左侧导航栏中选择“权限管理”,进入权限管理页面。 单击“命名空间权限”页签,在命名空间权限列表右上方选择要添加授权的集群,单击“添加授权”按钮,进入添加授权页面。 在添加授权页面,确认集群名称,选择该集群下要授权使用的命名空间,例如选择“全部命名空间”,选择要授权的用户或用户组,再选择具体权限,如下图所示。 图2 配置命名空间权限 单击“创建”。
  • 示例:授予集群全部权限(cluster-admin) 集群全部权限可以使用cluster-admin权限,cluster-admin包含集群级别资源(PV、StorageClass等)的权限。 图4 授予集群全部权限(cluster-admin) 如果使用kubectl查看可以看到创建了一个ClusterRoleBinding,将cluster-admin和cce-role-group这个用户组绑定了起来。 # kubectl get clusterrolebindingNAME ROLE AGEclusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 ClusterRole/cluster-admin 61s# kubectl get clusterrolebinding clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 -oyamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: annotations: CCE.com/IAM: "true" creationTimestamp: "2021-06-23T09:15:22Z" name: clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 resourceVersion: "36659058" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 uid: d6cd43e9-b4ca-4b56-bc52-e36346fc1320roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects:- apiGroup: rbac.authorization.k8s.io kind: Group name: 0c96fad22880f32a3f84c009862af6f7 使用被授予用户连接集群,如果能正常查询PV、StorageClass的信息,则说明权限配置正常。 # kubectl get pvNo resources found# kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEcsi-disk everest-csi-provisioner Delete Immediate true 75dcsi-disk-topology everest-csi-provisioner Delete WaitForFirstConsumer true 75dcsi-nas everest-csi-provisioner Delete Immediate true 75dcsi-obs everest-csi-provisioner Delete Immediate false 75dcsi-sfsturbo everest-csi-provisioner Delete Immediate true 75d
  • 集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系 拥有不同集群权限(IAM授权)的用户,其拥有的命名空间权限(Kubernetes RBAC授权)不同。表1给出了不同用户拥有的命名空间权限详情。 表1 不同用户拥有的命名空间权限 用户类型 权限范围 拥有Tenant Administrator权限的用户(例如华为云帐号) 全部命名空间权限 拥有CCE Administrator权限的IAM用户 全部命名空间权限 拥有CCE FullAccess或者CCE ReadOnlyAccess权限的IAM用户 按Kubernetes RBAC授权 拥有Tenant Guest权限的IAM用户 按Kubernetes RBAC授权
  • 前提条件 Kubernetes RBAC的授权能力支持1.11.7-r2及以上版本集群。若需使用RBAC功能请将集群升级至1.11.7-r2或以上版本,升级方法请参见重置升级/滚动升级(1.13及以下版本)。 任何用户创建1.11.7-r2或以上版本集群后,CCE会自动为该用户添加该集群的所有命名空间的cluster-admin权限,也就是说该用户允许对集群以及所有命名空间中的全部资源进行完全控制。 拥有Security Administrator(IAM除切换角色外所有权限)权限的用户(如华为云帐号所在的admin用户组默认拥有此权限),才能在CCE控制台命名空间权限页面进行授权操作。
  • 自定义命名空间权限(kubectl) kubectl访问CCE集群是通过集群上生成的配置文件(kubeconfig.json)进行认证,kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。而用户拥有的权限就是集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系所示的权限。 除了使用cluster-admin、admin、edit、view这4个最常用的clusterrole外,您还可以通过定义Role和RoleBinding来进一步对命名空间中不同类别资源(如Pod、Deployment、Service等)的增删改查权限进行配置,从而做到更加精细化的权限控制。 Role的定义非常简单,指定namespace,然后就是rules规则。如下面示例中的规则就是允许对default命名空间下的Pod进行GET、LIST操作。 kind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata: namespace: default # 命名空间 name: role-examplerules:- apiGroups: [""] resources: ["pods"] # 可以访问pod verbs: ["get", "list"] # 可以执行GET、LIST操作 apiGroups表示资源所在的API分组。 resources表示可以操作哪些资源:pods表示可以操作pod,其他Kubernetes的资源如deployments、configmaps等都可以操作 verbs表示可以执行的操作:get表示查询一个Pod,list表示查询所有Pod。您还可以使用create(创建), update(更新), delete(删除)等操作词。 详细的类型和操作请参见使用 RBAC 鉴权。 有了Role之后,就可以将Role与具体的用户绑定起来,实现这个的就是RoleBinding了。如下所示。 kind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: RoleBinding-example namespace: default annotations: CCE.com/IAM: 'true'roleRef: kind: Role name: role-example apiGroup: rbac.authorization.k8s.iosubjects:- kind: User name: 0c97ac3cb280f4d91fa7c0096739e1f8 # user-example的用户ID apiGroup: rbac.authorization.k8s.io 这里的subjects就是将Role与IAM用户绑定起来,从而使得IAM用户获取role-example这个Role里面定义的权限,如下图所示。 图3 RoleBinding绑定Role和用户 subjects下用户的类型还可以是用户组,这样配置可以对用户组下所有用户生效。 subjects:- kind: Group name: 0c96fad22880f32a3f84c009862af6f7 # 用户组ID apiGroup: rbac.authorization.k8s.io 使用IAM用户user-example连接集群,获取Pod信息,发现可获取到Pod的信息。 # kubectl get podNAME READY STATUS RESTARTS AGEdeployment-389584-2-6f6bd4c574-2n9rk 1/1 Running 0 4d7hdeployment-389584-2-6f6bd4c574-7s5qw 1/1 Running 0 4d7hdeployment-3895841-746b97b455-86g77 1/1 Running 0 4d7hdeployment-3895841-746b97b455-twvpn 1/1 Running 0 4d7hnginx-658dff48ff-7rkph 1/1 Running 0 4d9hnginx-658dff48ff-njdhj 1/1 Running 0 4d9h# kubectl get pod nginx-658dff48ff-7rkphNAME READY STATUS RESTARTS AGEnginx-658dff48ff-7rkph 1/1 Running 0 4d9h 然后查看Deployment和Service,发现没有权限;再查询kube-system命名空间下的Pod信息,发现也没有权限。这就说明IAM用户user-example仅拥有defaul这个命名空间下GET和LIST Pod的权限,与前面定义的没有偏差。 # kubectl get deployError from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default"# kubectl get svcError from server (Forbidden): services is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "services" in API group "" in the namespace "default"# kubectl get pod --namespace=kube-systemError from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "pods" in API group "" in the namespace "kube-system"
  • 命名空间权限(kubernetes RBAC授权) 命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding,这四种类型之间的关系和简要说明如下: Role:角色,其实是定义一组对Kubernetes资源(命名空间级别)的访问规则。 RoleBinding:角色绑定,定义了用户和角色的关系。 ClusterRole:集群角色,其实是定义一组对Kubernetes资源(集群级别,包含全部命名空间)的访问规则。 ClusterRoleBinding:集群角色绑定,定义了用户和集群角色的关系。 Role和ClusterRole指定了可以对哪些资源做哪些动作,RoleBinding和ClusterRoleBinding将角色绑定到特定的用户、用户组或ServiceAccount上。如下图所示。 图1 角色绑定 在CCE控制台可以授予用户或用户组命名空间权限,可以对某一个命名空间或全部命名空间授权,CCE控制台默认提供如下ClusterRole。 view:对全部或所选命名空间下大多数资源的只读权限。 edit:对全部或所选命名空间下多数资源的读写权限。当配置在全部命名空间时能力与运维权限一致。 admin:对全部命名空间下大多数资源的读写权限,对节点、存储卷,命名空间和配额管理的只读权限。 cluster-admin:对全部命名空间下所有资源的读写权限。
  • 示例:授予命名空间全部权限(admin) admin权限拥有命名空间全部权限,您可以给某个或全部命名空间授权。 图5 授予default命名空间全部权限(admin) 如果使用kubectl查看可以看到创建了一个RoleBinding,将admin和cce-role-group这个用户组绑定了起来,且权限范围是default这个命名空间。 # kubectl get rolebindingNAME ROLE AGEclusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 ClusterRole/admin 18s# kubectl get rolebinding clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 -oyamlapiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: annotations: CCE.com/IAM: "true" creationTimestamp: "2021-06-24T01:30:08Z" name: clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 namespace: default resourceVersion: "36963685" selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 uid: 6c6f46a6-8584-47da-83f5-9eef1f7b75d6roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: adminsubjects:- apiGroup: rbac.authorization.k8s.io kind: Group name: 0c96fad22880f32a3f84c009862af6f7 使用被授予用户连接集群,您会发现可以查询和创建default命名空间的资源,但无法查询kube-system命名空间资源,也无法查询集群级别的资源。 # kubectl get podNAME READY STATUS RESTARTS AGEtest-568d96f4f8-brdrp 1/1 Running 0 33mtest-568d96f4f8-cgjqp 1/1 Running 0 33m# kubectl get pod -nkube-systemError from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "pods" in API group "" in the namespace "kube-system"# kubectl get pvError from server (Forbidden): persistentvolumes is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "persistentvolumes" in API group "" at the cluster scope
  • 升级插件 登录CCE控制台,单击左侧导航栏的“插件管理”,在“插件实例”页签下,选择对应的集群,单击autoscaler下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作; 若升级按钮可单击,则单击升级按钮即可升级autoscaler插件。 升级autoscaler插件时,会替换原先节点上的旧版本的autoscaler插件,安装最新版本的autoscaler插件以实现功能的快速升级。 在弹出的窗口中,配置参数后,升级该插件。配置参数可参考安装插件中的参数说明。
  • 插件简介 autoscaler是Kubernetes中非常重要的一个Controller,它提供了微服务的弹性能力,并且和Serverless密切相关。 弹性伸缩是很好理解的一个概念,当微服务负载高(CPU/内存使用率过高)时水平扩容,增加pod的数量以降低负载,当负载降低时减少pod的数量,减少资源的消耗,通过这种方式使得微服务始终稳定在一个理想的状态。 云容器引擎简化了Kubernetes集群的创建、升级和手动扩缩容,而集群中应用的负载本身是会随着时间动态变化的,为了更好的平衡资源使用率以及性能,kubernetes引入了autoscaler插件,它可以根据部署的应用所请求的资源量自动的动态的伸缩集群,详情请了解创建节点伸缩策略。 开源社区地址:https://github.com/kubernetes/autoscaler
  • 安装插件 登录CCE控制台,在左侧导航栏中选择“ 插件管理”,在“插件市场”页签下,单击autoscaler插件下的“安装插件”。 在安装插件页面,选择您要安装插件的集群和插件版本,单击“下一步:规格配置”。 参照表1配置插件安装参数。 表1 基本配置 参数 支持的插件版本 参数说明 插件规格 所有版本 插件部署可选择如下几种规格。 单实例:以单实例部署插件。 高可用50:50节点集群规模多实例部署,实例数为2,具有高可用能力。 高可用200:200节点集群规模多实例部署,实例数为2,具有高可用能力,每个实例使用资源比高可用50的实例更多。 自定义:根据需要自定义实例数量和实例规格。 实例数 所有版本 选择上方插件规格后,显示插件中的实例数,此处仅作显示。 容器 所有版本 选择插件规格后,显示插件容器的CPU和内存配额,此处仅作显示。 登录方式 部分版本无此参数 为自动扩容工作节点选择登录方式,当前支持“密码”和“密钥对”两种方式,您可根据需要进行选择。 选择“密码”方式: 密码:自动扩容工作节点密码。通过该密码登录工作节点执行相关操作,用户名为root。 确认密码:再次输入自动扩容工作节点密码。 选择“密钥对”方式: 密钥对:密钥对用于远程登录节点时的身份认证,请选择已有密钥对或创建密钥对。 自动缩容 所有版本 默认不开启:将不开启自动缩容,只进行自动扩容。 开启:开启自动缩容,缩容策略对开启弹性的伸缩的节点池有效。 空置时间(min):当集群节点处于一段时间的空闲状态时,会触发集群缩容操作,删除节点,默认10min。 百分比:当集群节点资源低于多少百分比时,进行集群缩容扫描(默认0.5,即50%,cpu和mem都要满足的条件下才会缩容)。 扩容后缩容冷却时间:扩容执行后能再次启动缩容评估的时间间隔,默认10min。 说明: 集群中如果同时存在自动扩容和自动缩容的场景,建议配置“扩容后缩容冷却时间”为0min,避免由于部分节点池持续扩容或者扩容失败重试而阻塞整体缩容节点行为,导致非预期的节点资源浪费。 节点删除后缩容冷却时间:删除节点后能再次启动缩容评估的时间间隔,默认10min。 缩容失败后缩容冷却时间:缩容失败后能再次启动缩容评估的时间间隔,默认3min。节点池中配置的缩容冷却时间和此处配置的缩容冷却时间之间的影响和关系请参见弹性缩容冷却时间。 空节点缩容最大并发数:默认10。 不可移除节点的重检查时间:节点被判定不可移除后能再次启动检查的时间间隔,默认5min。 预置节点池配置 部分版本无此参数 此为默认资源组。集群扩容时,若没有其他可用分组,将使用默认分组的资源规格进行扩容节点。 单击“添加预置节点池配置”进行参数设置: 可用区:选择一个可用区。可用区是指在同一区域下,电力、网络隔离的物理区域。 操作系统:选择节点对应的操作系统。 Taints:可选项,默认为空。 支持给该节点池扩容出来的节点加Taints来设置反亲和性,每个节点池最多配置10条Taints,每条Taints包含以下3个参数: Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀。 Value:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。 Effect:只可选NoSchedule,PreferNoSchedule或NoExecute。 须知: Taints配置时需要配合Pod的toleration使用,否则可能导致扩容失败或者Pod无法调度到扩容节点。 配置后无法修改,请您谨慎配置,错误的配置可能会导致扩容失败或pod无法调度。 标签管理:通过为资源添加标签,可以对资源进行自定义标记,实现资源的分类。 说明: 您可以在TMS中创建“预定义标签”,预定义标签对所有支持标签功能的服务资源可见,通过使用预定义标签可以提升标签创建和迁移效率。 节点规格:节点的CPU配置和内存配置。 单击下方的“高级设置”,可以配置更多插件参数: 表2 高级设置 参数 插件版本 参数说明 节点总数 所有版本 集群可管理的节点数目的最大值,扩容时不会让集群下节点数超过此值。 CPU总数(核) 所有版本 集群中所有节点 CPU 核数之和的最大值,扩容时不会让集群下节点CPU核数之和超过此值。 内存总数(GB) 所有版本 集群中所有节点内存之和的最大值,扩容时不会让集群下节点内存之和超过此值。 自动扩容 部分版本无此参数 未调度实例扩容:默认选中。 启用集群使用率扩容:可选,扩容能力增强。 cpu扩容使用率:当节点池CPU达到所设置的使用上限,将扩容当前预置节点池的节点数。 内存扩容使用率:当节点池内存达到所设置的使用上限,将扩容当前预置节点池的节点数。 磁盘 部分版本无此参数 系统盘和数据盘:设置节点磁盘空间。 系统盘:规格为[40,1024]GB,用户可以配置,缺省值为40GB。 数据盘:规格为[100,32768]GB,用户可以配置,缺省值为100GB。 勾选“资源分配自定义”后,您可以对数据盘中的Docker和Kubelet资源占比进行自定义设置。 须知: 磁盘使用direct-lvm模式,移除将使用loop-lvm模式,有影响系统稳定性的风险。 Docker资源包含Docker镜像数据以及镜像元数据,Kubelet资源包含Pod配置文件、密钥以及临时存储EmptyDir等挂载数据。 数据盘:单击“新增数据盘”,您可以增加一块数据盘。 系统盘和数据盘均可提供以下性能规格的云硬盘: 高IO:是指由SAS存储提供资源的磁盘类型。提供可达到3000的高IO和低至1 ms的读写延时,支持NoSQL/关系型数据库,数据仓库,文件系统等应用。 超高IO:是指由SSD存储提供资源的磁盘类型。提供可达到20000的超高IO和低至1 ms超低读写时延,支持NoSQL/关系型数据库,数据仓库等应用。 命令行注入 部分版本无此参数 请输入脚本命令。 说明: 脚本命令大小限制:0~1000字符。 命令行注入示例及使用方法,请参见用户数据注入。 配置完成后,单击“安装”。 待插件安装完成后,单击“返回”,在“插件实例”页签下,选择对应的集群,可查看到运行中的实例,这表明该插件已在当前集群的各节点中安装。
  • 插件说明 autoscaler可分成扩容和缩容两个方面: 自动扩容 当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在分组资源配额一致。详情请参见创建节点伸缩策略。 当前该插件使用的是最小浪费策略,即若pod创建需要3核,此时有4核、8核两种规格,优先创建规格为4核的节点。 自动扩容策略在满足如下条件时才会执行: 节点上的资源不足。 Pod的调度配置中不能包含节点亲和的策略(即Pod若已经设置亲和某个节点,则不会自动扩容节点),节点亲和策略设置方法请参见节点亲和性。 自动缩容 当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的pod时,不可缩容: pod有设置PodDisruptionBudget,当移除pod不满足对应条件时,节点不会缩容。 pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。 pod拥有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'这个annotations时,节点不缩容。 节点上存在kube-system namespace下的Pod(除kube-system daemonset创建的Pod),节点不缩容。 节点上如果有非controller(deployment/replica set/job/stateful set)创建的Pod,节点不缩容。
  • 登录方式概述 登录节点(弹性云服务器 ECS)的方式有如下两种: 管理控制台远程登录(VNC方式) 未绑定弹性公网IP的弹性云服务器可通过管理控制台提供的远程登录方式直接登录。 SSH方式登录 仅适用于Linux弹性云服务器。您可以使用远程登录工具(例如PuTTY、Xshell、SecureCRT等)登录弹性云服务器。如果普通远程连接软件无法使用,您可以使用云服务器ECS管理控制台的管理终端连接实例,查看云服务器操作界面当时的状态。 本地使用Windows操作系统登录Linux节点时,输入的镜像用户名(Auto-login username)为:root。 CCE控制台不提供针对节点的操作系统升级,也不建议您通过yum方式进行升级,如果您在节点上通过yum update升级了操作系统,会导致容器网络的组件不可用。
  • 操作场景 集群中的每一个节点对应一台弹性云服务器或物理机,集群节点创建成功后,您仍可以根据需求,修改云服务器的名称或变更规格。 CCE节点的部分信息是独立于弹性云服务器ECS维护的,当您在ECS控制台修改云服务的名称、弹性公网IP,以及变更计费方式或变更规格后,需要通过“同步节点信息”功能将信息同步到CCE控制台相应节点中,同步后信息将保持一致。 ECS常见信息修改如下: 修改节点名称请参见修改云服务器名称。 计费方式变更请参见按需转包周期、包周期转按需。 当您购买的节点规格无法满足业务需要时,可参考变更规格通用操作变更节点规格,升级vCPU、内存。
  • 资源监控指标 表1 资源监控指标 监控指标 指标含义 CPU分配率 分配给工作负载使用的CPU占比。 内存分配率 分配给工作负载使用的内存占比。 CPU使用率 CPU使用率。 内存使用率 内存使用率。 磁盘使用率 磁盘使用率。 下行速率 一般指从网络下载数据到节点的速度,单位KB/s。 上行速率 一般指从节点上传网络的速度,单位KB/s。 磁盘读取速率 每秒从磁盘读出的数据量,单位KB/s。 磁盘写入速率 每秒写入磁盘的数据量,单位KB/s。
  • 查看节点监控数据 除了在集群监控界面查看节点监控数据外,您还可以在节点控制台查看节点监控数据,在节点所在行单击“监控”即可查看。 节点控制台还展示了节点可分配资源的数据。可分配资源按照实例请求值(Request)计算,表示实例在该节点上可请求的资源上限,不代表节点实际可用资源。 计算公式为: 可分配CPU = CPU总量 - 所有实例的CPU请求值 - 其他资源CPU预留值 可分配内存 = 内存总量 - 所有实例的内存请求值 - 其他资源内存预留值
  • 使用示例 以集群包含一个资源为4Core 8GB的节点为例,已经部署一个包含两个实例的工作负载到该集群上,并设置两个实例(实例1,实例2)的资源为{CPU申请,CPU限制,内存申请,内存限制}={1Core,2Core,2GB,2GB}。 那么节点上CPU和内存的资源使用情况如下: 节点CPU可分配量=4Core-(实例1申请的1Core+实例2申请的1Core)=2Core 节点内存可分配量=8GB-(实例1申请的2GB+实例2申请的2GB)=4GB 因此节点还剩余2Core 4GB的资源可供下一个新增的实例使用。
  • 配置含义 在CPU配额和内存配额设置中,申请与限制的含义如下: 勾选“申请”表示启动该配置,系统根据申请值调度该实例到满足条件的节点去部署工作负载。 不勾选“申请”表示系统调度实例到随机的一个节点去部署工作负载。 勾选“限制”表示启动该配置,根据设定的值,限制工作负载使用的资源。 不勾选“限制”表示实例使用的资源不做限制,但若实例使用的内存资源超过节点可分配内存时,可能会导致工作负载不可用或者节点不可用。 创建工作负载时,建议设置CPU和内存的资源上下限。同一个节点上部署的工作负载,对于未设置资源上下限的工作负载,如果其异常资源泄露会导致其它工作负载分配不到资源而异常。未设置资源上下限的工作负载,工作负载监控信息也会不准确。
  • 约束与限制 创建节点过程中会使用域名方式从OBS下载软件包,需要能够使用云上内网DNS解析OBS域名,否则会导致创建不成功。为此,节点所在子网需要配置为内网DNS地址,从而使得节点使用内网DNS。在创建子网时DNS默认配置为内网DNS,如果您修改过子网的DNS,请务必确保子网下的DNS服务器可以解析OBS服务域名,否则需要将DNS改成内网DNS。 单Region下单用户可创建的集群总数限制为50个,如果配额不满足业务需求,请到“我的配额”提交申请。 目前鲲鹏集群暂时不支持obsfs,无法挂载并行文件系统。
  • 相关操作 通过命令行工具连接集群:请参见通过kubectl连接集群。 添加节点:集群创建完成后,若您需要为集群添加更多节点,请参见购买节点。 登录节点:请参见登录节点。 创建命名空间:同个集群内可创建多个命名空间,形成逻辑上的不同分组,便于不同的分组在共享使用集群资源时还能被分别管理。若您需要为集群创建命名空间,请参见命名空间。 创建工作负载:集群创建完成后,您可以使用镜像创建一个可公网访问的应用,请参见创建无状态负载(Deployment)或创建有状态负载(StatefulSet)。 单击已成功创建的集群名称,进入“集群详情”页可查看集群详情。 表2 已创建的集群详情 页签类别 说明 集群详情 可查看该集群的详情及运行状态等。 监控 可查看集群下全部节点的CPU和内存分配率(即分配量的最大值),以及控制节点的CPU和内存使用率、控制节点规格等信息。 事件 可以直接在“事件”页签下查看集群的事件。 可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 说明: 由于版本更新演进,旧版Console不再支持查看新集群的事件,请前往新版Console使用。 弹性扩容 您可以根据实际业务需要对集群的工作节点进行扩容和缩容,详情请参见集群弹性扩容。 v1.17版本的集群不再支持AOM提供的弹性伸缩机制,请使用节点池功能进行弹性伸缩,详情请参见节点池概述。 kubectl 若您需要从客户端计算机连接到kubernetes集群,请使用kubernetes命令行客户端kubectl,详情请参见通过kubectl连接集群。 资源标签 通过为资源添加标签,可以对资源进行自定义标记,实现资源的分类。 您可以在TMS中创建“预定义标签”,预定义标签对所有支持标签功能的服务资源可见,通过使用预定义标签可以提升标签创建和迁移效率。具体请参见创建预定义标签。 CCE服务会自动帮您创建CCE-Dynamic-Provisioning-Node=节点id的标签,允许增加5个标签。 Istioctl 在集群开启istio服务网格功能后,您使用Istio命令行工具Istioctl配置多种路由策略,从而管理服务流量,包括流量转移、故障注入、限流熔断等。详情请参见启用istio。
  • 操作场景 普通任务是一次性运行的短任务,部署完成后即可执行。正常退出(exit 0)后,任务即执行完成。 普通任务是用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、Statefulset)的主要区别是: 批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的spec.completions策略而不同,即: 单Pod型任务有一个Pod成功就标志完成。 定数成功型任务保证有N个任务全部成功。 工作队列型任务根据应用确认的全局成功而标志成功。
  • 使用kubectl创建Job Job的配置参数如下所示。 spec.template格式与Pod相同。 RestartPolicy仅支持Never或OnFailure。 单个Pod时,默认Pod成功运行后Job即结束。 .spec.completions表示Job结束需要成功运行的Pod个数,默认为1。 .spec.parallelism表示并行运行的Pod的个数,默认为1。 spec.backoffLimit表示失败Pod的重试最大次数,超过这个次数不会继续重试。 .spec.activeDeadlineSeconds表示Pod运行时间,一旦达到这个时间,Job即其所有的Pod都会停止。且activeDeadlineSeconds优先级高于backoffLimit,即到达activeDeadlineSeconds的Job会忽略backoffLimit的设置。 根据.spec.completions和.spec.Parallelism的设置,可以将Job划分为以下几种类型。 表4 任务类型 Job类型 说明 使用示例 一次性Job 创建一个Pod直至其成功结束 数据库迁移 固定结束次数的Job 依次创建一个Pod运行直至completions个成功结束 处理工作队列的Pod 固定结束次数的并行Job 依次创建多个Pod运行直至completions个成功结束 多个Pod同时处理工作队列 并行Job 创建一个或多个Pod直至有一个成功结束 多个Pod同时处理工作队列 以下是一个Job配置示例,保存在myjob.yaml中,其计算π到2000位并打印输出。 apiVersion: batch/v1kind: Jobmetadata: name: myjobspec: completions: 50 # Job结束需要运行50个Pod,这个示例中就是打印π 50次 parallelism: 5 # 并行5个Pod backoffLimit: 5 # 最多重试5次 template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never 说明: apiVersion: batch/v1 是当前job的Version kind: Job:指定当前资源的类型时Job restartPolicy: Never:是指当前的重启策略。对于Job,只能设置为Never或者OnFailure。对于其他controller(比如Deployment)可以设置为Always。 运行该任务,如下: 启动这个job。 [root@k8s-master k8s]# kubectl apply -f myjob.yamljob.batch/myjob created 查看这个job。 kubectl get job [root@k8s-master k8s]# kubectl get jobNAME COMPLETIONS DURATION AGEmyjob 50/50 23s 3m45s completions为 50/50 表示成功运行了这个job。 查看pod的状态。 kubectl get pod [root@k8s-master k8s]# kubectl get podNAME READY STATUS RESTARTS AGEmyjob-29qlw 0/1 Completed 0 4m5s... 状态为Completed表示这个job已经运行完成。 查看这个pod的日志。 kubectl logs # kubectl logs myjob-29qlw3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
  • 操作场景 配置项(ConfigMap)是一种用于存储工作负载所需配置信息的资源类型,内容由用户决定。配置项创建完成后,可在容器工作负载中作为文件或者环境变量使用。 配置项允许您将配置文件从容器镜像中解耦,从而增强容器工作负载的可移植性。 配置项价值如下: 使用配置项功能可以帮您管理不同环境、不同业务的配置。 方便您部署相同工作负载的不同环境,配置文件支持多版本,方便您进行更新和回滚工作负载。 方便您快速将您的配置以文件的形式导入到容器中。
  • 使用kubectl创建配置项 请参见通过kubectl连接集群配置kubectl命令。 创建并编辑cce-configmap.yaml文件。 vi cce-configmap.yaml apiVersion: v1kind: ConfigMapmetadata: name: cce-configmapdata: SPECIAL_LEVEL: Hello SPECIAL_TYPE: CCE 创建配置项。 kubectl create -f cce-configmap.yaml kubectl get cm NAME DATA AGEcce-configmap 3 3hcce-configmap1 3 7m
  • Secret资源文件配置说明 本章节主要介绍Secret类型的资源描述文件的配置示例。 例如现在有一个工作负载需要获取帐号密码,可以通过Secret来实现: yaml文件格式 定义的Secret文件secret.yaml内容如下。其中Value需要用Base64,Base64编码方法请参见如何进行Base64编码。 apiVersion: v1kind: Secretmetadata: name: mysecret # secret的名称 namespace: default #命名空间,默认为defaultdata: username: ****** #需要用Base64编码 password: ****** #需要用Base64编码type: Opaque # type建议不要做修改
  • 使用kubectl创建密钥 请参见通过kubectl连接集群配置kubectl命令。 通过Base64编码,创建并编辑cce-secret.yaml文件。 # echo -n "待编码内容" | base64****** vi cce-secret.yaml apiVersion: v1kind: Secretmetadata: name: mysecrettype: Opaquedata: username: ****** password: ****** 创建密钥。 kubectl create -f cce-secret.yaml 创建完成后可以查询到密钥。 kubectl get secret
  • 相关操作 密钥创建完成后,您还可以执行表2中的操作。 密钥列表中包含系统密钥资源,系统密钥资源不可更新,也不能删除,只能查看。 表2 其他操作 操作 说明 查看YAML 单击密钥名称后的“查看YAML”,可查看到当前密钥的YAML文件。 更新密钥 选择需要更新的密钥名称,单击“更新”。 根据表1更改信息。 单击“更新”。 删除密钥 选择要删除的密钥,单击“删除”。 根据系统提示删除密钥。 批量删除密钥 勾选需要删除的密钥名称。 单击页面左上角的“删除”,删除选中的密钥。 根据系统提示删除密钥。
共100000条