华为云用户手册

  • 前提条件 Ingress为后端工作负载提供网络访问,因此集群中需提前部署可用的工作负载。若您无可用工作负载,可参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。 为上述工作负载配置Service,支持的Service类型如表1,可参考集群内访问(ClusterIP)或节点访问(NodePort)配置示例Service。 表1 支持Service类型 Ingress类型 访问类型 集群内访问(ClusterIP) 节点访问(NodePort) ELBIngress 负载均衡路由 不支持 支持 ENI负载均衡路由 支持 不支持 NginxIngress 负载均衡路由 支持 支持 ENI负载均衡路由 支持 不支持
  • 操作步骤 请参见通过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
  • 主管:DAVID 用户“DAVID”为该公司某部门的主管,根据权限设计需要为其配置CCE服务的所有权限(包括集群权限和命名空间权限),因此需要在统一身份认证服务 IAM中单独为DAVID创建用户组“cce-admin”,并配置所有项目的权限:“CCE Administrator”,这样主管DAVID的权限就配置好了。 CCE Administrator:CCE的管理员权限,拥有该服务的所有权限,不需要再赋予其他权限。 CCE FullAccess、CCE ReadOnlyAccess:CCE的集群管理权限,仅针对与集群相关的资源(如集群、节点)有效,您必须确保同时配置了“命名空间权限”,才能有操作Kubernetes资源(如工作负载、Service等)的权限。
  • 运维工程师:WILLIAM 运维工程师“WILLIAM”虽然也有了所有集群和命名空间的只读权限,但还需要在统一身份认证服务 IAM中为其设置北京四的集群管理权限,因此单独为其创建一个用户组“cce-sre-b4”,然后配置北京四项目的“CCE FullAccess”。 图7 为用户WILLIAM所在的用户组配置北京四项目的集群管理权限 由于之前已经为其设置过所有命名空间的只读权限,所以运维工程师“WILLIAM”现在就拥有了北京四的集群管理权限和所有命名空间的只读权限。
  • 相关问题 能否只配置命名空间权限,不配置集群管理权限? 答:由于界面权限是由IAM系统策略进行判断,所以,如果未配置集群管理权限,就没有打开界面的权限。 如果不配置集群管理权限的情况下,是否可以使用API呢? 答:答案也是否定的,因为API都需要进行IAM的token认证。 如果不配置集群管理权限,是否可以使用kubectl命令呢? 答:答案是肯定的。但前提是要先从界面上下载kubectl配置文件。所以,如果先配置了集群权限,然后再界面下载认证文件。后面再删除集群管理权限(保留命名空间权限),依然可以使用kubectl来操作Kubernetes集群。
  • 概述 随着容器技术的快速发展,原有的分布式任务调度模式正在被基于Kubernetes的技术架构所取代。云容器引擎(Cloud Container Engine,简称CCE)是华为云推出的高度可扩展的、高性能的企业级Kubernetes集群,支持社区原生应用和工具。借助云容器引擎,您可以在华为云上轻松部署、管理和扩展容器化应用程序,快速高效的将微服务部署在云端。 为方便企业中的管理人员对集群中的资源权限进行管理,CCE后台提供了多种维度的细粒度权限策略和管理方式。CCE的权限管理包括“集群权限”和“命名空间权限”两种能力,分别从集群和命名空间两个层面对用户组或用户进行细粒度授权,具体解释如下: 集群权限:是基于IAM系统策略的授权,可以让用户组拥有“集群管理”、“节点管理”、“节点池管理”、“模板市场”、“插件管理”权限。 命名空间权限:是基于Kubernetes RBAC能力的授权,可以让用户或用户组拥有Kubernetes资源的权限,如“工作负载”、“网络管理”、“存储管理”、“命名空间”等的权限。 基于IAM系统策略的“集群权限”与基于Kubernetes RBAC能力的“命名空间权限”,两者是完全独立的,互不影响,但要配合使用。同时,为用户组设置的权限将作用于用户组下的全部用户。当给用户或用户组添加多个权限时,多个权限会同时生效(取并集)。
  • 使用Service解决Pod的访问问题 Kubernetes中的Service对象就是用来解决上述Pod访问问题的。Service有一个固定IP地址(在创建CCE集群时有一个服务网段的设置,这个网段专门用于给Service分配IP地址),Service将访问它的流量转发给Pod,具体转发给哪些Pod通过Label来选择,而且Service可以给这些Pod做负载均衡。 那么对于上面的例子,为后台添加一个Service,通过Service来访问Pod,这样前台Pod就无需感知后台Pod的变化,如图2所示。 图2 通过Service访问Pod
  • 直接访问Pod的问题 Pod创建完成后,如何访问Pod呢?直接访问Pod会有如下几个问题: Pod会随时被Deployment这样的控制器删除重建,那访问Pod的结果就会变得不可预知。 Pod的IP地址是在Pod启动后才被分配,在启动前并不知道Pod的IP地址。 应用往往都是由多个运行相同镜像的一组Pod组成,逐个访问Pod也变得不现实。 举个例子,假设有这样一个应用程序,使用Deployment创建了前台和后台,前台会调用后台做一些计算处理,如图1所示。后台运行了3个Pod,这些Pod是相互独立且可被替换的,当Pod出现状况被重建时,新建的Pod的IP地址是新IP,前台的Pod无法直接感知。 图1 Pod间访问
  • 通过kubectl命令行设置 本节以nginx为例,创建图2中的工作负载亲和性。 前提条件 已有使用nginx容器的工作负载和节点。 操作步骤 使用默认的命名空间default,拓扑域使用内置的节点标签kubernetes.io/hostname用于表示以节点为区分范围,设置标签app和type,标签值为redis和database。同时设置操作符为In,最后单击“确定”提交。 设置后的工作负载亲和性所得的yaml如下: apiVersion: apps/v1kind: Deploymentmetadata: name: nginx namespace: defaultspec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret affinity: nodeAffinity: {} podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - redis - key: type operator: In values: - database namespaces: - default topologyKey: kubernetes.io/hostname
  • 通过kubectl命令行设置 本节以nginx为例,创建图2中的节点亲和性。 前提条件 已有使用nginx容器的工作负载和节点。 操作步骤 使用内置节点标签kubernetes.io/hostname,并添加相应的节点,同时设置操作符为In,最后单击“确定”提交。 设置后的工作负载节点亲和性所得的yaml如下: apiVersion: apps/v1kind: Deploymentmetadata: name: nginx namespace: defaultspec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - 192.168.6.174
  • 升级插件 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击“cce-hpa-controller”下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级“cce-hpa-controller”插件时,会替换原先节点上的旧版本的“cce-hpa-controller”插件,安装最新版本的“cce-hpa-controller”插件以实现功能的快速升级。 参考安装插件中参数说明配置参数后,单击“升级”即可升级“cce-hpa-controller”插件。
  • 安装插件 登录CCE控制台,单击左侧导航栏的“插件管理”,在“插件市场”页签下,单击“cce-hpa-controller”下的“安装插件”按钮。 在安装插件页面,选择安装的集群和插件版本,单击“下一步:规格配置”。 该插件可配置“单实例”或“自定义”规格,选择后单击“安装”。 待插件安装完成后,单击“返回”,在“插件实例”页签下,选择对应的集群,可查看到运行中的实例,这表明该插件已在当前集群的各节点中安装。
  • 约束与限制 仅支持在v1.15及以上版本的CCE集群中安装本插件。 若cce-hpa-controller版本低于1.2.11,则必须安装prometheus插件,若版本大于或等于1.2.11,则需要安装能够提供Metrics API的插件,如metrics-server和Prometheus。若使用Prometheus,需要将Prometheus注册为Metrics API的服务,详见提供资源指标。
  • 操作场景 云容器引擎(CCE)提供多种类型的容器部署和管理能力,支持对容器工作负载的部署、配置、监控、扩容、升级、卸载、服务发现及负载均衡等特性。 其中守护进程集(DaemonSet)可以确保全部(或者某些)节点上仅运行一个Pod实例,当有节点加入集群时,也会为其新增一个 Pod 。 当有节点从集群移除时,这些Pod也会被回收。删除 DaemonSet 将会删除它创建的所有Pod。 使用DaemonSet的一些典型用法: 运行集群存储daemon,例如在每个节点上运行glusterd、ceph。 在每个节点上运行日志收集daemon,例如fluentd、logstash。 在每个节点上运行监控daemon,例如Prometheus Node Exporter、collectd、Datadog代理、New Relic代理,或Ganglia gmond。 一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个DaemonSet。一个稍微复杂的用法是为同一种守护进程部署多个DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU要求。
  • 安装插件 登录CCE控制台,单击左侧导航栏的“插件管理”,在“插件市场”页签下,单击Prometheus下的“安装插件”按钮。 在安装插件页面,选择安装的集群和插件版本,单击“下一步:规格配置”。 在“规格配置”步骤中,配置以下参数: 表1 Prometheus配置参数说明 参数 参数说明 插件规格 根据业务需求,选择插件的规格,包含如下选项: 演示规格(100容器以内):适用于体验和功能演示环境,该规模下prometheus占用资源较少,但处理能力有限。建议在集群内容器数目不超过100时使用。 小规格(2000容器以内):建议在集群中的容器数目不超过2000时使用。 中规格(5000容器以内):建议在集群中的容器数目不超过5000时使用。 大规格(超过5000容器):建议集群中容器数目超过5000时使用此规格。 实例数 选择上方插件规格后,显示插件中的实例数,此处仅作显示。 容器 选择插件规格后,显示插件容器的CPU和内存配额,此处仅作显示。 对接远端 可根据实际场景选择对应参数: 不对接:普罗采集的数据仅存储在本地数据盘中。 对接CIE:普罗采集的数据将同时存放在本地数据盘和CIE远端服务中。 自定义:普罗采集的数据将同时存放在本地数据盘和自定义的远端服务中。远端地址、HTTPS认证等所需的信息,需从第三方服务获取。 监控数据保留期 自定义监控数据需要保留的天数,默认为15天。 存储 按照界面提示配置如下参数: 类型:支持云硬盘。 可用区:请根据业务需要进行选择。可用区是在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。 子类型:支持普通IO、高IO和超高IO三种类型。各类型对比请参见系统盘和数据盘。 容量:请根据业务需要输入存储容量,默认10G。 说明: 若命名空间monitoring下已存在pvc,将使用此存储作为存储源。 单击“安装”。 待插件安装完成后,单击“返回”,在“插件实例”页签下,选择对应的集群,可查看到运行中的实例,这表明该插件已在当前集群的各节点中安装。 在CCE控制台,单击左侧导航栏的“插件管理”,在“插件实例”中,单击“Prometheus”进入详情页,可以查看插件实例的详细情况。
  • 提供资源指标 容器和节点的资源指标,如CPU、内存使用量,可通过Kubernetes的Metrics API获得。这些指标可以直接被用户访问,比如用kubectl top命令,也可以被HPA或者CustomedHPA使用,根据资源使用率使负载弹性伸缩。 Prometheus插件可为Kubernetes提供Metrics API,但默认未开启,若要将其开启,需要创建以下APIService对象: apiVersion: apiregistration.k8s.io/v1kind: APIServicemetadata: labels: app: custom-metrics-apiserver release: cceaddon-prometheus name: v1beta1.metrics.k8s.iospec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: custom-metrics-apiserver namespace: monitoring port: 443 version: v1beta1 versionPriority: 100 可以将该对象保存为文件,命名为metrics-apiservice.yaml,然后执行以下命令: kubectl create -f metrics-apiservice.yaml 执行kubectl top命令,若显示如下,则表示Metrics API是否能正常访问: # kubectl top pod -n monitoringNAME CPU(cores) MEMORY(bytes)cceaddon-prometheus-kube-state-metrics-7b77694f48-zc9pl 4m 16Micceaddon-prometheus-node-exporter-4jvwv 1m 16Micceaddon-prometheus-node-exporter-85zl4 2m 39Micceaddon-prometheus-node-exporter-qbrmb 0m 15Micceaddon-prometheus-operator-659547567d-j6484 0m 48Micustom-metrics-apiserver-d4f556ff9-l2j2m 38m 44Migrafana-78f9966c99-xprkx 0m 25Miprometheus-0 18m 706Mi
  • 升级插件 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击“Prometheus”下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级“Prometheus”插件时,会替换原先节点上的旧版本的“Prometheus”插件,安装最新版本的“Prometheus”插件以实现功能的快速升级。 在基本信息页面选择插件版本,单击“下一步”。 参考安装插件中参数说明配置参数后,单击“升级”即可升级“Prometheus”插件。
  • 插件特点 作为新一代的监控框架,Prometheus具有以下特点: 强大的多维度数据模型: 时间序列数据通过metric名和键值对来区分。 所有的metrics都可以设置任意的多维标签。 数据模型更随意,不需要刻意设置为以点分隔的字符串。 可以对数据模型进行聚合,切割和切片操作。 支持双精度浮点类型,标签可以设为全unicode。 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个metrics进行乘法、加法、连接、取分数位等操作。 易于管理:Prometheus server是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。 高效:平均每个采样点仅占 3.5 bytes,且一个Prometheus server可以处理数百万的metrics。 使用pull模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的metrics。 可以采用push gateway的方式把时间序列数据推送至Prometheus server端。 可以通过服务发现或者静态配置去获取监控的targets。 有多种可视化图形界面。 易于伸缩。 需要指出的是,由于数据采集可能会有丢失,所以Prometheus不适用对采集数据要100%准确的情形。但如果用于记录时间序列数据,Prometheus具有很大的查询优势,此外,Prometheus适用于微服务的体系架构。
  • 插件简介 Prometheus是一套开源的系统监控报警框架。它启发于Google的borgmon监控系统,由工作在SoundCloud的Google前员工在2012年创建,作为社区开源项目进行开发,并于2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。 在云容器引擎CCE中,支持以插件的方式快捷安装Prometheus。 插件官网:https://prometheus.io/ 开源社区地址:https://github.com/prometheus/prometheus
  • 升级插件 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击“huawei-npu”下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级“huawei-npu”插件时,会替换原先节点上的旧版本的“huawei-npu”插件,安装最新版本的“huawei-npu”插件以实现功能的快速升级。 在基本信息页面选择插件版本,单击“下一步”。 单击“升级”即可升级“huawei-npu”插件。
  • 通过kubectl命令行设置 本节以nginx为例,说明kubectl命令创建工作负载的方法。 前提条件 请参见通过kubectl连接集群配置kubectl命令,使弹性云服务器连接集群。 操作步骤 参见通过kubectl命令行创建无状态工作负载或通过kubectl命令行创建有状态工作负载,工作负载和可用区亲和性的yaml示例如下: apiVersion: apps/v1kind: Deploymentmetadata: name: az-in-deploymentspec: replicas: 1 selector: matchLabels: app: az-in-deployment strategy: type: RollingUpdate template: metadata: labels: app: az-in-deployment spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: failure-domain.beta.kubernetes.io/zone #node中lable的key operator: In values: - az1 #node中对应key的value
  • 通过kubectl命令行设置 本节以nginx为例,说明kubectl命令创建工作负载的方法。 前提条件 请参见通过kubectl连接集群配置kubectl命令,使弹性云服务器连接集群。 操作步骤 参见通过kubectl命令行创建无状态工作负载或通过kubectl命令行创建有状态工作负载,工作负载和可用区反亲和性的yaml示例如下: apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: failure-domain.beta.kubernetes.io/zone #node中label的key operator: NotIn values: - az1 #node中对应key的value
  • 集群权限(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授权
  • kubectl权限说明 您可以通过kubectl访问集群的Kubernetes资源,那kubectl拥有哪些Kubernetes资源的权限呢? kubectl访问CCE集群是通过集群上生成的配置文件(kubeconfig.json)进行认证,kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。而用户拥有的权限就是表1所示的权限。
  • 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从v1.11.7-r2版本起的集群支持配置命名空间权限,1.11.7-r2之前的版本默认拥有全部命名空间权限。 CCE的权限可以从使用的阶段分为两个阶段来看,第一个阶段是创建和管理集群的权限,也就是拥有创建/删除集群、节点等资源的权限。第二个阶段是使用集群Kubernetes资源(如工作负载、Service等)的权限。 图1 权限示例图 清楚了集群权限和命名空间权限后,您就可以通过这两步授权,做到精细化的权限控制。
  • 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 √ √ 更新指定的节点 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命令行设置 本节以nginx为例,说明kubectl命令创建工作负载的方法。 前提条件 请参见通过kubectl连接集群配置kubectl命令,使弹性云服务器连接集群。 操作步骤 参见通过kubectl命令行创建无状态工作负载或通过kubectl命令行创建有状态工作负载,工作负载间反亲和性的yaml示例如下: apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: app #工作负载中lable的key operator: NotIn values: - test #工作负载中对应lable的value
  • 集群升级路径 如下表格详细介绍了各集群版本能够升级到的目标版本,以及升级方式和升级影响。 表1 集群升级路径和影响说明 源版本 目标版本 升级方式 升级影响 v1.19 v1.21 原地升级 需用户自行识别各版本差异。 v1.17 v1.15 v1.19 原地升级 需用户自行识别各版本差异。 v1.13 v1.15 滚动升级 重置升级 coredns配置中proxy配置项不支持,需要替换成forward。 存储插件从原来的storage-driver替换成了Everest。
  • 升级方式 集群升级页面会根据集群版本以及不同局点提供升级方式,Master节点升级流程是一致的,Node节点的升级方式区别及优缺点如下: 表2 升级方式的区别和优缺点 升级名称 方式 优点 缺点 原地升级 节点上升级Kubernetes组件、网络组件和CCE管理组件,升级过程中业务Pod和网络均不受影响;升级过程中,存量节点将全部打上SchedulingDisabled标签,升级完成后,用户能够正常使用存量节点。 用户无需迁移业务,可以基本上保证业务不断。 原地升级不会升级节点的操作系统,如果希望升级操作系统,可以在节点升级完成后,清空对应的节点,并执行节点重置,升级到新版本的操作系统。 滚动升级 节点上只升级Kubernetes组件以及网络部分组件,存量节点将全部打上SchedulingDisabled标签,仅保证原先运行的应用不受影响,升级完成后,用户还需手动新建节点,并逐步释放老节点,将应用逐步迁移到新节点上,用户控制升级步骤。 可以基本上保证业务不断。 - 重置升级 对工作节点使用最新的node镜像进行操作系统重置。 时间最短,用户介入操作也较少。 如果节点上有数据或者配置,会丢失,同样会有一段时间业务受损。
  • 相关参考 为节点打污点标记:Taints and Tolerations 稳定驱逐:Safely Drain a Node while Respecting the PodDisruptionBudget 如下三个命令可以保证维护节点时,平滑的将被维护节点上的业务迁移到其他节点上,保证业务不受影响: 表2 标记节点为可调度或不可调度 命令 功能 用法 cordon 标记节点为不可调度 kubectl cordon {{node-name }} uncordon 标记节点为可调度 kubectl uncordon {{node-name }} drain 标记节点为不可调度,并驱逐节点上的pod kubectl drain {{node-name }}
共100000条