华为云用户手册

  • 检查方式 HTTP 请求检查 HTTP 请求方式针对的是提供HTTP/HTTPS服务的容器,集群周期性地对该容器发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码属于200~399范围,则证明探测成功,否则探测失败。使用HTTP请求探测必须指定容器监听的端口和HTTP/HTTPS的请求路径。 例如:提供HTTP服务的容器,HTTP检查路径为:/health-check;端口为:80;主机地址可不填,默认为容器实例IP,此处以172.16.0.186为例。那么集群会周期性地对容器发起如下请求:GET http://172.16.0.186:80/health-check。 图1 HTTP请求检查 TCP 端口检查 对于提供TCP通信服务的容器,集群周期性地对该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败。选择TCP端口探测方式,必须指定容器监听的端口。 例如:有一个nginx容器,它的服务端口是80,对该容器配置了TCP端口探测,指定探测端口为80,那么集群会周期性地对该容器的80端口发起TCP连接,如果连接成功则证明检查成功,否则检查失败。 图2 TCP 端口检查 执行命令检查 命令检查是一种强大的检查方式,该方式要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果命令的返回结果是0则检查成功,否则检查失败。 对于上面提到的TCP端口检查和HTTP请求检查,都可以通过执行命令检查的方式来替代: 对于TCP端口探测,可以写一个程序来对容器的端口进行connect,如果connect成功,脚本返回0,否则返回-1。 对于HTTP请求探测,可以写一个脚本来对容器进行wget。 wget http://127.0.0.1:80/health-check 并检查response 的返回码,如果返回码在200~399 的范围,脚本返回0,否则返回-1。 图3 执行命令检查 必须把要执行的程序放在容器的镜像里面,否则会因找不到程序而执行失败。 如果执行的命令是一个shell脚本,由于集群在执行容器里的程序时,不在终端环境下,因此不能直接指定脚本为执行命令,需要加上脚本解析器。比如脚本是/data/scripts/health_check.sh,那么使用执行命令检查时,指定的程序应该是sh /data/scripts/health_check.sh。究其原因是集群在执行容器里的程序时,不在终端环境下。
  • 通过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: nodeName #node中lable的key operator: NotIn #notin说明不部署 values: - test-node-1 #node中对应key的value
  • 操作场景 健康检查是指容器运行过程中,根据用户需要,定时检查容器健康状况。若不配置健康检查,如果服务出现业务异常,pod将无法感知,也不会自动重启去恢复业务。最终导致虽然pod状态显示正常,但pod中的业务异常的情况。 CCE提供了两种健康检查的探针: 工作负载存活探针:用于检测容器是否正常,类似于执行ps命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作;若容器的存活检查成功则不执行任何操作。 工作负载业务探针:用于检查用户业务是否就绪,如果未就绪,则不转发流量到当前实例。一些程序的启动时间可能很长,比如要加载磁盘数据或者要依赖外部的某个模块启动完成才能提供服务。这时候程序进程在,但是并不能对外提供服务。这种场景下该检查方式就非常有用。如果容器的就绪检查失败,集群会屏蔽请求访问该容器;若检查成功,则会开放对该容器的访问。
  • 通过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: nodeName #node中lable的key operator: In values: - test-node-1 #node中对应key的value
  • 前提条件 使用系统加固功能前需安装prometheus插件,该插件用于系统监控和报警。core-dns就是根据其自定义prometheus指标“coredns_dns_request_count_total”来进行水平伸缩。 使用coredns水平伸缩功能前需安装coredns插件,该插件是一款通过链式插件的方式为Kubernetes提供域名解析服务的DNS服务器,集群创建时为必装插件,若您手动删除请重新安装。 查看hpa的监控指标前还需安装cce-hpa-controller插件。cce-hpa-controller是一款CCE自研的插件,能够基于CPU利用率、内存利用率等指标,对无状态工作负载进行弹性扩缩容。 查看autoscaler的监控指标前还需安装autoscaler插件。autoscaler插件是一款k8s集群自动扩容缩容node节点的插件。
  • 操作场景 系统管家主要分为两部分:系统体检和系统加固,本章节主要介绍系统加固。 系统加固主要用于对一些系统组件(如coredns插件)进行加固。当前已支持coredns自动水平伸缩,根据coredns的请求量情况自动伸缩其实例个数,以防止请求量过大导致coredns解析性能下降或者解析超时失败。 您还可以在系统加固页面查看hpa的监控指标、autoscaler的监控指标和prometheus的监控指标。
  • CCE对节点内存的预留规则v2 对于v1.21.4-r0和v1.23.3-r0及以上版本集群,节点内存的预留规则优化为v2模型,且支持通过节点池配置管理参数(kube-reserved-mem和system-reserved-mem)动态调整,具体方法请参见管理节点池。 CCE节点内存v2模型的总预留值等于OS侧预留值与CCE管理Pod所需预留值之和。 其中OS侧预留包括基础预留和随节点内存规格变动的浮动预留;CCE侧预留包括基础预留和随节点Pod数量的浮动预留。 表3 节点内存预留规则v2 预留类型 基础/浮动 预留公式 预留对象 OS侧预留 基础预留 固定400MB sshd、systemd-journald等操作系统服务组件占用 浮动预留(随节点内存) 25MB/GB 内核占用 CCE侧预留 基础预留 固定500MB 节点空载时, kubelet、kube-proxy等容器引擎组件占用。 浮动预留(随节点Pod数量) Docker:20MB/Pod Containerd:5MB/Pod Pod数量增加时,容器引擎组件的额外占用。 说明: v2模型在计算节点默认预留内存时,随内存估计节点默认最大实例数,请参见表1。
  • 资源监控指标 在CCE控制台,可以查看如下指标。 表1 资源监控指标 监控指标 指标含义 CPU分配率 分配给工作负载使用的CPU占比。 内存分配率 分配给工作负载使用的内存占比。 CPU使用率 CPU使用率。 内存使用率 内存使用率。 磁盘使用率 磁盘使用率。 下行速率 一般指从网络下载数据到节点的速度,单位KB/s。 上行速率 一般指从节点上传网络的速度,单位KB/s。 磁盘读取速率 每秒从磁盘读出的数据量,单位KB/s。 磁盘写入速率 每秒写入磁盘的数据量,单位KB/s。 在AOM控制台,可以查看主机指标和容器实例的指标,详细的指标内容请参见指标总览。
  • 查看工作负载的监控数据 工作负载的监控数据可以在工作负载详情的监控页面下查看。单击集群名称进入集群,在左侧导航栏选择“工作负载”,在右侧工作负载所在行单击“监控”。 监控数据来源与AOM,可查看工作负载的监控数据包括CPU、内存、网络、GPU等。 监控名词解释: 工作负载CPU使用率 = 工作负载各个Pod中CPU使用率的最大值 工作负载内存使用率 = 工作负载各个Pod中内存使用率的最大值 您还可以单击“查看更多”直接跳转到AOM控制台查看工作负载的监控数据。
  • 查看集群监控数据 单击集群名称进入集群,在左侧导航栏单击集群信息,在右侧可看到集群所有节点(不含控制节点)近一小时的CPU指标和内存指标。 监控名词解释: CPU分配率 = 集群下运行的Pod CPU配额申请值(Request)之和 / 集群下所有节点(不含控制节点)的CPU可分配量之和 内存分配率 = 集群下运行的Pod 内存配额申请值(Request)之和 / 集群下所有节点(不含控制节点)的内存可分配量之和 CPU使用率 = 集群下所有节点(不含控制节点)上实际使用的CPU使用率的平均值。 内存使用率 = 集群下所有节点(不含控制节点)上实际使用的内存使用率的平均值。 节点资源(CPU或内存)可分配量=总量-预留值-驱逐阈值。详情请参见节点预留资源策略说明。
  • 登录方式概述 登录节点(弹性云服务器 ECS)的方式有如下两种: 管理控制台远程登录(VNC方式) 未绑定弹性公网IP的弹性云服务器可通过管理控制台提供的远程登录方式直接登录。 详细操作请参考:Linux云服务器远程登录(VNC方式)。 SSH方式登录 仅适用于Linux弹性云服务器。您可以使用远程登录工具(例如PuTTY、Xshell、SecureCRT等)登录弹性云服务器。如果普通远程连接软件无法使用,您可以使用云服务器ECS管理控制台的管理终端连接实例,查看云服务器操作界面当时的状态。 SSH方式登录包括SSH密钥和SSH密码两种方式。详细操作请参考SSH密钥方式登录、SSH密码方式登录。 本地使用Windows操作系统登录Linux节点时,输入的镜像用户名(Auto-login username)为:root。 CCE控制台不提供针对节点的操作系统升级,也不建议您通过yum方式进行升级,如果您在节点上通过yum update升级了操作系统,会导致容器网络的组件不可用。手动恢复方式请参见如何解决yum update升级操作系统导致容器网络不可用问题?。
  • 前提条件 表1 迁移前Checklist 类别 描述 集群相关 Nodeip强相关:确认之前集群的节点IP(包括EIP),是否有作为其他的配置或者白名单之类的设置。 工作负载 记录工作负载数目,便于迁移后检查。 存储 确认应用中存储,是否使用云,或者自己搭建存储。 自动创建的存储需要在新集群中变成使用已有存储。 网络 注意使用的负载均衡服务,以及Ingress。 老版本的集群只支持经典型负载均衡服务,迁移到新集群中需要改成共享型负载均衡服务,对应负载均衡服务将会重新建立。 运维 私有配置:确认在之前集群中,是否在节点上配置内核参数或者系统配置。
  • 操作步骤 创建新集群 创建与老版本集群同规格同配置的集群,创建方法请参见购买集群。 添加节点 添加同规格节点,并且在节点上配置之前的手动配置项,创建方法请参见创建节点。 创建存储 在新集群中使用已有存储创建PVC,PVC名称不变,方法请参见通过静态PV使用已有对象存储或通过静态PV使用已有极速文件存储。 切流方案仅支持OBS、SFS Turbo等共享存储。非共享存储切流需要将老集群内的工作负载暂停,将会导致服务不可用。 创建工作负载 在新集群中创建工作负载,名称和规格参数保持不变,创建方法请参见创建无状态负载(Deployment)或创建有状态负载(StatefulSet)。 重新挂载存储 在工作负载中重新挂载已有的存储,方法请参见通过静态PV使用已有对象存储或通过静态PV使用已有极速文件存储。 创建服务 在新集群中创建Service,名称和规格参数保持不变,创建方法请参见服务(Service)。 调测功能 全部创建完成后,请自行调测业务,调测无问题后切换流量。 老集群退订或删除 新集群全部功能ready,退订或者删除老集群,删除集群方法请参见删除集群。
  • 插件简介 Prometheus是一套开源的系统监控报警框架。它启发于Google的borgmon监控系统,由工作在SoundCloud的Google前员工在2012年创建,作为社区开源项目进行开发,并于2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。 在云容器引擎CCE中,支持以插件的方式快捷安装Prometheus。 插件官网:https://prometheus.io/ 开源社区地址:https://github.com/prometheus/prometheus
  • 提供资源指标 容器和节点的资源指标,如CPU、内存使用量,可通过Kubernetes的Metrics API获得。这些指标可以直接被用户访问,比如用kubectl top命令,也可以被HPA或者CustomedHPA使用,根据资源使用率使负载弹性伸缩。 插件可为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)......custom-metrics-apiserver-d4f556ff9-l2j2m 38m 44Mi...... 卸载插件时,需要执行以下kubectl命令,同时删除APIService对象,否则残留的APIService资源将导致metrics-server插件安装失败。 kubectl delete APIService v1beta1.metrics.k8s.io
  • 安装插件 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件管理”,在右侧找到Prometheus,单击“安装”。 在“规格配置”步骤中,配置以下参数: 表1 Prometheus配置参数说明 参数 参数说明 插件规格 根据业务需求,选择插件的规格,包含如下选项: 演示规格(100容器以内):适用于体验和功能演示环境,该规模下prometheus占用资源较少,但处理能力有限。建议在集群内容器数目不超过100时使用。 小规格(2000容器以内):建议在集群中的容器数目不超过2000时使用。 中规格(5000容器以内):建议在集群中的容器数目不超过5000时使用。 大规格(超过5000容器):建议集群中容器数目超过5000时使用此规格。 实例数 选择上方插件规格后,显示插件中的实例数,此处仅作显示。 容器 选择插件规格后,显示插件容器的CPU和内存配额,此处仅作显示。 数据保留期 自定义监控数据需要保留的天数,默认为15天。 存储 支持云硬盘作为存储,按照界面提示配置如下参数: 可用区:请根据业务需要进行选择。可用区是在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。 子类型:支持普通IO、高IO和超高IO三种类型。 容量:请根据业务需要输入存储容量,默认10G。 说明: 若命名空间monitoring下已存在pvc,将使用此存储作为存储源。 单击“安装”。安装完成后,插件会在集群中部署以下实例。 prometheus-operator:根据自定义资源(Custom Resource Definition / CRDs)来部署和管理Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。 prometheus(Server):Operator根据自定义资源Prometheus类型中定义的内容而部署的Prometheus Server集群,这些自定义资源可以看作是用来管理Prometheus Server集群的 StatefulSets 资源。 prometheus-kube-state-metrics:将Prometheus的metrics数据格式转换成K8s API接口能识别的格式。 custom-metrics-apiserver:将自定义指标聚合到原生的kubernetes apiserver。 prometheus-node-exporter:每个节点上均有部署,收集Node级别的监控数据。 grafana:可视化浏览普罗监控数据。
  • 版本记录 表2 CCE插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 2.23.32 /v1.(17|19|21).*/ - 2.10.0 2.23.31 /v1.15.*/ 适配CCE 1.15集群 2.10.0 2.23.30 /v1.(17|19|21).*/ 适配CCE 1.21集群 2.10.0 2.21.14 /v1.(17|19|21).*/ 适配CCE 1.21集群 2.10.0 2.21.12 /v1.15.*/ 适配CCE 1.15集群 2.10.0 2.21.11 /v1.(17|19).*/ 适配CCE 1.19集群 2.10.0 1.15.1 /v1.(15|17).*/ Prometheus是一个监控系统和时间序列库 2.10.0
  • 插件特点 作为新一代的监控框架,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适用于微服务的体系架构。
  • 修改全局默认Pod安全策略 修改全局默认Pod安全策略前,请确保已创建CCE集群,并且通过kubectl连接集群成功。 执行如下命令: kubectl edit psp psp-global 修改所需的参数,如表1。 表1 Pod安全策略配置 配置项 描述 privileged 启动特权容器。 hostPID hostIPC 使用主机命名空间。 hostNetwork hostPorts 使用主机网络和端口。 volumes 允许使用的挂载卷类型。 allowedHostPaths 允许hostPath类型挂载卷在主机上挂载的路径,通过pathPrefix字段声明允许挂载的主机路径前缀组。 allowedFlexVolumes 允许使用的指定FlexVolume驱动。 fsGroup 配置Pod中挂载卷使用的辅组ID。 readOnlyRootFilesystem 约束启动Pod使用只读的root文件系统。 runAsUser runAsGroup supplementalGroups 指定Pod中容器启动的用户ID以及主组和辅组ID。 allowPrivilegeEscalation defaultAllowPrivilegeEscalation 约束Pod中是否允许配置allowPrivilegeEscalation=true,该配置会控制Setuid的使用,同时控制程序是否可以使用额外的特权系统调用。 defaultAddCapabilities requiredDropCapabilities allowedCapabilities 控制Pod中使用的Linux Capabilities。 seLinux 控制Pod使用seLinux配置。 allowedProcMountTypes 控制Pod允许使用的ProcMountTypes。 annotations 配置Pod中容器使用的AppArmor或Seccomp。 forbiddenSysctls allowedUnsafeSysctls 控制Pod中容器使用的Sysctl配置。
  • Pod安全策略开放非安全系统配置示例 节点池管理中可以为相应的节点池配置allowed-unsafe-sysctls,CCE从1.17.17集群版本开始,需要在Pod安全策略的allowedUnsafeSysctls字段中增加相应的配置才能生效,配置详情请参考表1。 除修改全局Pod安全策略外,也可增加新的Pod安全策略,如开放net.core.somaxconn非安全系统配置,新增Pod安全策略示例参考如下: apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: annotations: seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*' name: sysctl-pspspec: allowedUnsafeSysctls: - net.core.somaxconn allowPrivilegeEscalation: true allowedCapabilities: - '*' fsGroup: rule: RunAsAny hostIPC: true hostNetwork: true hostPID: true hostPorts: - max: 65535 min: 0 privileged: true runAsGroup: rule: RunAsAny runAsUser: rule: RunAsAny seLinux: rule: RunAsAny supplementalGroups: rule: RunAsAny volumes: - '*'---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: sysctl-psprules: - apiGroups: - "*" resources: - podsecuritypolicies resourceNames: - sysctl-psp verbs: - use---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: sysctl-psproleRef: kind: ClusterRole name: sysctl-psp apiGroup: rbac.authorization.k8s.iosubjects:- kind: Group name: system:authenticated apiGroup: rbac.authorization.k8s.io
  • 恢复原始Pod安全策略 如果您已经修改默认Pod安全策略后,想恢复原始Pod安全策略,请执行以下操作。 创建一个名为policy.yaml的描述文件。其中,policy.yaml为自定义名称,您可以随意命名。 vi policy.yaml 描述文件内容如下。 apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: psp-global annotations: seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'spec: privileged: true allowPrivilegeEscalation: true allowedCapabilities: - '*' volumes: - '*' hostNetwork: true hostPorts: - min: 0 max: 65535 hostIPC: true hostPID: true runAsUser: rule: 'RunAsAny' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'RunAsAny' fsGroup: rule: 'RunAsAny' ---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: psp-globalrules: - apiGroups: - "*" resources: - podsecuritypolicies resourceNames: - psp-global verbs: - use ---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: psp-globalroleRef: kind: ClusterRole name: psp-global apiGroup: rbac.authorization.k8s.iosubjects:- kind: Group name: system:authenticated apiGroup: rbac.authorization.k8s.io 执行如下命令: kubectl apply -f policy.yaml
  • 背景信息 默认情况下,运行中的Pod可以无限制的使用Node节点上的CPU和内存,这意味着任意一个Pod都可以无节制地使用集群的计算资源,某个命名空间的Pod可能会耗尽集群的所有资源。 kubernetes在一个物理集群上提供了多个虚拟集群,这些虚拟集群被称为命名空间。命名空间可用于多种工作用途,满足多用户的使用需求,通过为每个命名空间配置资源额度可以有效限制资源滥用,从而保证集群的可靠性。 您可为命名空间配置包括CPU、内存、Pod数量等资源的额度,更多信息请参见Resource Quotas。 其中,不同的集群规模对应的Pod数量推荐值如下: 集群规模 Pod数量推荐值 50节点 2500 Pod实例 200节点 1W Pod实例 1000节点 3W Pod实例 2000节点 5W Pod实例 从1.21版本集群开始,如果在集群配置管理中开启了enable-resource-quota参数,则创建命名空间将会同时创建默认的资源配额Resource Quotas,根据集群规格不同,各个资源的配额如表1所示。您可以根据实际需求修改。 表1 默认资源配额 集群规模 Pod Deployment Secret ConfigMap Service 50节点 2000 1000 1000 1000 1000 200节点 2000 1000 1000 1000 1000 1000节点 5000 2000 2000 2000 2000 2000节点 5000 2000 2000 2000 2000
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“命名空间”。 单击对应命名空间后的“管理配额”。 系统级别的命名空间kube-system、kube-public默认不支持设置资源配额。 设置资源配额,然后单击“确定”。 命名空间设置了CPU或内存资源配额后,创建工作负载时,必须指定CPU或内存的请求值(request)和约束值(limit),否则CCE将拒绝创建实例。若设置资源配额值为0,则不限制该资源的使用。 配额累计使用量包含CCE系统默认创建的资源,如default命名空间下系统默认创建的kubernetes服务(该服务可通过后端kubectl工具查看)等,故建议命名空间下的资源配额略大于实际期望值以去除系统默认创建资源的影响。
  • 约束与限制 在Kubernetes中,外部用户及内部组件频繁的数据更新操作采用乐观并行的控制方法。通过定义资源版本(resourceVersion)实现乐观锁,资源版本字段包含在对象的元数据(metadata)中。这个字段标识了对象的内部版本号,且对象被修改时,该字段将随之修改。kube-apiserver可以通过该字段判断对象是否已经被修改。当包含resourceVersion的更新请求到达apiserver,服务器端将对比请求数据与服务器中数据的资源版本号,如果不一致,则表明在本次更新提交时,服务端对象已被修改,此时apiserver将返回冲突错误(409)。客户端需重新获取服务端数据,重新修改后再次提交到服务器端;而资源配额对每个命名空间的资源消耗总量提供限制,并且会记录集群中的资源信息,因此开启资源配额后,在大规模并发场景下创建资源冲突概率会变高,会影响批创资源性能。
  • 通过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: In values: - test #工作负载中对应lable的value
  • 操作步骤 在CCE控制台,单击左侧导航栏的“弹性伸缩”,在“节点伸缩”页签下,单击“创建节点伸缩策略”按钮。 进入创建节点伸缩策略页面,在“插件检测”步骤中: 若插件名称后方显示,请单击插件后方的“现在安装”按钮,根据业务需求配置插件参数后单击“立即安装”,等待插件安装完成。 若插件名称后方显示,则说明插件已安装成功。 确认插件已安装成功后,单击“下一步:策略配置”。 如果插件已提前安装成功,单击“创建节点伸缩策略”按钮后,在“插件检测”步骤中经过短暂检测后将直接进入“策略配置”步骤。 在打开的“创建节点伸缩策略”页面中,参照如下参数设置策略。 策略名称:新建策略的名称,请自定义。 关联节点池:请单击“添加节点池”后选择要操作的节点池。您可以关联多个节点池,以使用相同的伸缩策略。 节点池新增了优先级功能,弹性扩容时CCE将按照如下策略来选择节点池进行扩容: 通过预判算法判断节点池是否能满足让Pending的Pod正常调度的条件,包括节点资源大于Pod的request值、nodeSelect、nodeAffinity和taints等是否满足Pod正常调度的条件;另外还会过滤掉扩容失败(因为资源不足等原因)还处于15min冷却时间的节点池。 有多个节点池满足条件时,判断节点池设置的优先级(优先级默认值为0,取值范围为0-100,其中100为最高,0为最低),选择优先级最高的节点池扩容。 如果有多个节点池处于相同的优先级,或者都没有配置优先级时,通过最小浪费原则,根据节点池里设置的虚拟机规格,计算刚好能满足Pending的Pod正常调度,且浪费资源最少的节点池。 如果还是有多个节点池的虚拟机规格都一样,只是AZ不同,那么会随机选择其中一个节点池触发扩容。 如果出现优先选择的节点池资源不足,会按照优先级顺序自动选择下一个节点池。 节点池优先级功能详情请参见弹性扩缩容。 执行规则:单击“添加规则”,在弹出的添加规则窗口中设置如下参数: 规则名称:请输入规则名称,可自定义。 规则类型:可选择“指标触发”或“周期触发”,两种类型区别如下: 指标触发: 触发条件:请选择“CPU分配率”或“内存分配率”,输入百分比的值。该百分比应大于autoscaler插件中配置的缩容百分比。 分配率 = 节点池容器组(Pod)资源申请量 / 节点池Pod可用资源量 (Node Allocatable) 。 如果多条规则同时满足条件,会有如下两种执行的情况: 如果同时配置了“CPU分配率”和“内存分配率”的规则,两种或多种规则同时满足扩容条件时,执行扩容节点数更多的规则。 如果同时配置了“CPU分配率”和“周期触发”的规则,当达到“周期触发”的时间值时CPU也满足扩容条件时,较早执行的A规则会将节点池状态置为伸缩中状态,导致B规则无法正常执行。待A规则执行完毕,节点池状态恢复正常后,B规则也不会执行。 配置了“CPU分配率”和“内存分配率”的规则后,策略的检测周期会因autoscaler每次循环的处理逻辑而变动。只要一次检测出满足条件就会触发扩容(还需要满足冷却时间、节点池状态等约束条件)。 执行动作:与上述“触发条件”相对应,达到触发条件值后所要执行的动作。如图1中所示,当内存分配率超过40%时将增加5个节点。 图1 指标触发-执行动作 周期触发: 触发时间:可选择每天、每周、每月或每年的具体时间点,如图2所示,则为每天15:00触发。 图2 周期触发时间 执行动作:与上述“触发时间”相对应,达到触发时间值后所要执行的动作。如图3中所示,即每天15:00时将执行增加5个节点的动作。 图3 定时触发-执行动作 您可以单击“添加规则”,设置多条节点伸缩策略。您最多可以添加1条CPU使用率指标规则、1条内存使用率指标规则,且规则总数小于等于10条。 设置完成后,单击“创建”,在“完成”步骤中若显示“创建节点伸缩策略***任务提交成功”,可单击“返回节点策略”。 在“节点伸缩”页签下,可以看到刚创建的节点伸缩策略。 图4 节点伸缩策略
  • 自定义策略 如果系统预置的CCE策略,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考权限策略和授权项。 目前华为云支持以下两种方式创建自定义策略: 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。 JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。 具体创建步骤请参见:创建自定义策略。本章为您介绍常用的CCE自定义策略样例。
  • CCE集群权限与IAM RBAC CCE兼容IAM传统的系统角色进行权限管理,建议您切换使用IAM的细粒度策略,避免设置过于复杂或不必要的权限管理场景。 CCE当前支持的角色如下: IAM的基础角色: te_admin(Tenant Administrator):可以调用除IAM外所有服务的所有API。 readonly(Tenant Guest):可以调用除IAM外所有服务的只读权限的API。 CCE的自定义管理员角色:CCE Administrator。 由于历史原因,CCE的API中保留了对应用管理与运维平台(ServiceStage)的三个系统角色(SvcStg Administrator、SvcStg Developer、SvcStg Operator)的兼容,当前CCE和ServiceStage已经全面适配了IAM的细粒度策略进行权限管理,不建议您继续使用该系统角色进行权限管理。其在CCE侧的具体权限如下: SvcStg Administrator:拥有CCE Administrator相同权限,例外:拥有此角色的用户不默认具有命名空间的权限(Kubernetes RBAC)。 SvcStg Developer:拥有CCE Administrator相同权限,例外:拥有此角色的用户不默认具有命名空间的权限(Kubernetes RBAC)。 SvcStg Operator:拥有CCE的只读权限,但不默认具有命名空间的权限。 了解更多ServiceStage和CCE的权限管理详情请参见:ServiceStage权限管理介绍、CCE权限管理介绍。 Tenant Administrator、Tenant Guest是特殊的IAM系统角色,当配置任意系统或自定义策略后,Tenant Administrator、Tenant Guest将以系统策略形式生效,用于兼容IAM RBAC和ABAC场景。 如果用户有Tenant Administrator或者CCE Administrator的系统角色,则此用户拥有Kubernetes RBAC的cluster-admin权限,在集群创建后不可移除。 如果用户为集群创建者,则默认被授权Kubernetes RBAC的cluster-admin权限,此项权限可以在集群创建后被手动移除: 方式1:权限管理 - 命名空间权限 - 移除cluster-creator。 方式2:通过API或者kubectl删除资源,ClusterRoleBinding:cluster-creator。 RBAC与IAM策略共存时,CCE开放API或Console操作的后端鉴权逻辑如下: CCE部分接口由于涉及命名空间权限或关键操作,需要特殊权限: clusterCert获取集群k8s kubeconfig: cceadm/teadmin
  • CCE集群权限与企业项目 CCE支持以集群为粒度,基于企业项目维度进行资源管理以及权限分配。 如下事项需特别注意: IAM项目是基于资源的物理隔离进行管理,而企业项目则是提供资源的全局逻辑分组,更符合企业实际场景,并且支持基于企业项目维度的IAM策略管理,因此推荐您使用企业项目。详细信息请参见如何创建企业项目。 IAM项目与企业项目共存时,IAM将优先匹配IAM项目策略、未决则匹配企业项目策略。 CCE集群基于已有基础资源(VPC)创建集群、节点时,请确保IAM用户在已有资源的企业项目下有相关权限,否则可能导致集群或者节点创建失败。
  • 前提条件 给用户组授权之前,请您了解用户组可以添加的CCE系统策略,并结合实际需求进行选择,CCE支持的系统策略及策略间的对比,请参见CCE系统权限。若您需要对除CCE之外的其它服务授权,IAM支持服务的所有策略请参见系统权限。 拥有Security Administrator(IAM除切换角色外所有权限)权限的用户(如华为云帐号默认拥有此权限),才能看见CCE控制台权限管理页面当前用户组及用户组所拥有的权限。
共100000条