华为云用户手册

  • 关联权限 登录U CS 控制台,在左侧导航栏中选择“容器舰队”。 选择“未加入舰队的集群”页签,在目标集群栏中单击右上角的按钮。 图1 集群列表 在弹出的页面单击“关联权限”,打开“修改权限”页面,将已创建好的权限和集群的命名空间关联起来。 命名空间:支持“全部命名空间”和“指定命名空间”。全部命名空间包括当前集群已有的命名空间和集群后续新增的命名空间;“指定命名空间”即表示您自己选择命名空间的范围,UCS服务提供了几个常见的命名空间供您选择(如default、kube-system、kube-public),您也可以新增命名空间,但要自行确保新增的命名空间在集群中存在。 请注意,选择的命名空间仅对权限中命名空间级资源生效,不影响权限中的集群资源。关于命名空间级和集群级资源的介绍,请参见Kubernetes资源对象章节。 关联权限:从下拉列表中选择权限,支持一次性选择多个权限,以达到批量授权的目的。 如果针对不同命名空间,关联的权限不同(例如:为default命名空间关联readonly权限,为development命名空间关联develop权限),可以单击按钮添加多组授权关系。 单击“确定”,完成权限的关联。 如果后续需要修改集群的权限,采用同样的方法,重新选择命名空间和权限即可。
  • 操作步骤 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 单击华为云集群选项卡中的“注册集群”按钮。 勾选需要注册的CCE Standard集群或 CCE Turbo 集群,并选择一个舰队,单击“确定”。 注册集群时若不选择舰队,集群注册成功后将显示在“未加入舰队的集群”页签下,您可以随后再将其添加至舰队中,具体操作请参见管理未加入舰队的集群。 不支持在注册集群阶段选择已开通集群联邦能力的舰队,如果一定要加入这个舰队,请在集群注册成功后,再添加到该舰队中。关于集群联邦的介绍,请参见开通集群联邦章节。
  • 通过控制台配置调度策略 在创建工作负载时,在“高级设置”中找到“调度策略”。 表1 节点亲和性设置 参数名 参数描述 必须满足 即硬约束,设置必须要满足的条件,对应于requiredDuringSchedulingIgnoredDuringExecution,多条规则间是一种“或”的关系,即只需要满足一条规则即会进行调度。 尽量满足 即软约束,设置尽量满足的条件,对应于preferredDuringSchedulingIgnoredDuringExecution,无论是满足其中一条或者是都不满足都会进行调度。 在“节点亲和性”、“工作负载亲和性”、“工作负载反亲和性”下单击添加调度策略。在弹出的窗口中可以直接添加策略、指定节点或指定可用区。 指定节点和指定可用区本质也是通过标签实现,只是通过控制台提供了更为便捷的操作。指定节点使用的是 kubernetes.io/hostname 标签,可用区使用的是 failure-domain.beta.kubernetes.io/zone 标签。 表2 调度策略设置 参数名 参数描述 标签名 对应节点的标签,可以使用默认的标签也可以用户自定义标签。 操作符 可以设置六种匹配关系(In, NotIn, Exists, DoesNotExist. Gt, and Lt)。 In:是否在标签值的列表中 NotIn:是否不在标签值的列表中 Exists:某个标签存在 DoesNotExist:某个标签不存在 Gt:标签的值大于某个值(字符串比较) Lt:标签的值小于某个值(字符串比较) 标签值 请填写标签值。 命名空间 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 指定调度策略生效的命名空间。 拓扑域 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 权重 仅支持在“尽量满足”策略中添加。
  • 通过控制台配置工作负载升级 在创建工作负载时,单击“展开高级配置”。 参考表1,设置升级策略。 表1 参数说明 参数 描述 升级方式 设置不同的升级策略,有如下两种。 RollingUpdate:滚动升级,即逐步创建新Pod再删除旧Pod,为默认策略。 Recreate:替换升级,即先把当前Pod删掉再重新创建Pod。 最大无效实例数(maxUnavailable) 与spec.replicas相比,可以有多少个Pod失效,也就是删除的比例,默认值是25%,比如spec.replicas为4,那升级过程中就至少有3个Pod存在,即删除Pod的步伐是1。同样这个值也可以设置成数字。 仅Deployment支持配置。 最大浪涌(maxSurge) 与spec.replicas相比,可以有多少个Pod存在,默认值是25%,比如spec.replicas为 4,那升级过程中就不能超过5个Pod存在,即按1个的步伐升级,实际升级过程中会换算成数字,且换算会向上取整。这个值也可以直接设置成数字。 仅Deployment支持配置。 实例可用最短时间(minReadySeconds) 指定新创建的 Pod 在没有任意容器崩溃情况下的最小就绪时间, 只有超出这个时间 Pod 才被视为可用。默认值为 0(Pod 在准备就绪后立即将被视为可用)。 最大保留版本数(revisionHistoryLimit) 用来设定出于回滚目的所要保留的旧 ReplicaSet 数量。 这些旧 ReplicaSet 会消耗 etcd 中的资源,并占用 kubectl get rs 的输出。 每个 Deployment 修订版本的配置都存储在其 ReplicaSets 中;因此,一旦删除了旧的 ReplicaSet, 将失去回滚到 Deployment 的对应修订版本的能力。 默认情况下,系统保留 10 个旧 ReplicaSet,但其理想值取决于新 Deployment 的频率和稳定性。 升级最大时长(progressDeadlineSeconds) 指定系统在报告 Deployment 进展失败 之前等待 Deployment 取得进展的秒数。 这类报告会在资源状态中体现为 Type=Progressing、Status=False、 Reason=ProgressDeadlineExceeded。Deployment 控制器将持续重试 Deployment。 将来,一旦实现了自动回滚,Deployment 控制器将在探测到这样的条件时立即回滚 Deployment。 如果指定,则此字段值需要大于 .spec.minReadySeconds 取值。 缩容时间窗(terminationGracePeriodSeconds) 优雅删除时间,默认为30秒,删除Pod时发送SIGTERM终止信号,然后等待容器中的应用程序终止执行,如果在terminationGracePeriodSeconds时间内未能终止,则发送SIGKILL的系统信号强行终止。 图1 升级策略
  • 通过命令行配置升级示例 Deployment的升级可以是声明式的,也就是说只需要修改Deployment的YAML定义即可,比如使用kubectl edit命令将上面Deployment中的镜像修改为nginx:alpine。修改完成后再查询ReplicaSet和Pod,发现创建了一个新的ReplicaSet,Pod也重新创建了。 $ kubectl edit deploy nginx $ kubectl get rs NAME DESIRED CURRENT READY AGE nginx-6f9f58dffd 2 2 2 1m nginx-7f98958cdf 0 0 0 48m $ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-6f9f58dffd-tdmqk 1/1 Running 0 1m nginx-6f9f58dffd-tesqr 1/1 Running 0 1m Deployment可以通过maxSurge和maxUnavailable两个参数控制升级过程中同时重新创建Pod的比例,这在很多时候是非常有用,配置如下所示。 spec: strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate 在前面的例子中,由于spec.replicas是2,如果maxSurge和maxUnavailable都为默认值25%,那实际升级过程中,maxSurge允许最多3个Pod存在(向上取整,2*1.25=2.5,取整为3),而maxUnavailable则不允许有Pod Unavailable(向上取整,2*0.75=1.5,取整为2),也就是说在升级过程中,一直会有2个Pod处于运行状态,每次新建一个Pod,等这个Pod创建成功后再删掉一个旧Pod,直至Pod全部为新Pod。
  • 通过命令行回退工作负载版本 例如上面升级的新版镜像有问题,可以执行kubectl rollout undo命令进行回滚。 $ kubectl rollout undo deployment nginx deployment.apps/nginx rolled back Deployment之所以能如此容易的做到回滚,是因为Deployment是通过ReplicaSet控制Pod的,升级后之前ReplicaSet都一直存在,Deployment回滚做的就是使用之前的ReplicaSet再次把Pod创建出来。Deployment中保存ReplicaSet的数量可以使用revisionHistoryLimit参数限制,默认值为10。
  • YAML样例 apiVersion: apps/v1 kind: Deployment metadata: name: env-example namespace: default spec: replicas: 1 selector: matchLabels: app: env-example template: metadata: labels: app: env-example spec: containers: - name: container-1 image: nginx:alpine imagePullPolicy: Always resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi env: - name: key # 自定义 value: value - name: key1 # 配置项键值导入 valueFrom: configMapKeyRef: name: configmap-example key: key1 - name: key2 # 密钥键值导入 valueFrom: secretKeyRef: name: secret-example key: key2 - name: key3 # 变量引用,用Pod定义的字段作为环境变量的值 valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: key4 # 资源引用,用Container定义的字段作为环境变量的值 valueFrom: resourceFieldRef: containerName: container1 resource: limits.cpu divisor: 1 envFrom: - configMapRef: # 配置项导入 name: configmap-example - secretRef: # 密钥导入 name: secret-example imagePullSecrets: - name: default-secret
  • 环境变量查看 如果configmap-example和secret-example的内容如下。 $ kubectl get configmap configmap-example -oyaml apiVersion: v1 data: configmap_key: configmap_value kind: ConfigMap ... $ kubectl get secret secret-example -oyaml apiVersion: v1 data: secret_key: c2VjcmV0X3ZhbHVl # c2VjcmV0X3ZhbHVl为secret_value的base64编码 kind: Secret ... 则进入Pod中查看的环境变量结果如下。 $ kubectl get pod NAME READY STATUS RESTARTS AGE env-example-695b759569-lx9jp 1/1 Running 0 17m $ kubectl exec env-example-695b759569-lx9jp -- printenv / # env key=value # 自定义环境变量 key1=configmap_value # 配置项键值导入 key2=secret_value # 密钥键值导入 key3=env-example-695b759569-lx9jp # Pod的metadata.name key4=1 # container1这个容器的limits.cpu,单位为Core,向上取整 configmap_key=configmap_value # 配置项导入,原配置项中的键值直接会导入结果 secret_key=secret_value # 密钥导入,原密钥中的键值直接会导入结果
  • 操作场景 环境变量是指容器运行环境中设定的一个变量,环境变量可以在工作负载部署后修改,为工作负载提供极大的灵活性。 通过控制台设置的环境变量与Dockerfile中的“ENV”效果相同。 容器启动后,容器中的内容不应修改。如果修改配置项(例如将容器应用的密码、证书、环境变量配置到容器中),当容器重启(例如节点异常重新调度Pod)后,会导致配置丢失,业务异常。 配置信息应通过入参等方式导入容器中,以免重启后配置丢失。 环境变量支持如下几种方式设置。 自定义:自行填写变量名称及变量值。 配置项导入:将配置项中所有键值都导入为环境变量。 配置项键值导入:将配置项中某个键的值导入作为某个环境变量的值。例如将configmap-example这个配置项中configmap_key的值configmap_value导入为环境变量key1的值,导入后容器中有一个名为key1的环境变量,其值为configmap_value。 密钥导入:将密钥中所有键值都导入为环境变量。 密钥键值导入:将密钥中某个键的值导入作为某个环境变量的值。例如将secret-example这个配置项中secret_key的值secret_value导入为环境变量key2的值,导入后容器中有一个名为key2的环境变量,其值为secret_value。 变量引用:用Pod定义的字段作为环境变量的值,例如Pod的名称。 资源引用:用Container定义的字段作为环境变量的值,例如容器的CPU限制。
  • YAML示例 apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-http spec: containers: - name: liveness image: nginx:alpine args: - /server livenessProbe: httpGet: path: /healthz port: 80 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3 readinessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 startupProbe: httpGet: path: /healthz port: 80 failureThreshold: 30 periodSeconds: 10
  • 公共参数说明 表1 公共参数说明 参数 参数说明 检测周期(periodSeconds) 探针检测周期,单位为秒。 例如,设置为30,表示每30秒检测一次。 延迟时间(initialDelaySeconds) 延迟检查时间,单位为秒,此设置与业务程序正常启动时间相关。 例如,设置为30,表明容器启动后30秒才开始健康检查,该时间是预留给业务程序启动的时间。 超时时间(timeoutSeconds) 超时时间,单位为秒。 例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。若设置为0或不设置,默认超时等待时间为1秒。 成功阈值(successThreshold) 探测失败后,被视为成功的最小连续成功数。 默认值是 1,最小值是 1。 存活和启动探测的这个值必须是 1。 最大失败次数(failureThreshold) 当探测失败时重试的次数。 存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。 默认值是 3。最小值是 1。
  • 检查方式 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
  • 操作场景 健康检查是指容器运行过程中,根据用户需要,定时检查容器健康状况。若不配置健康检查,如果容器内应用程序异常,Pod将无法感知,也不会自动重启去恢复。最终导致虽然Pod状态显示正常,但Pod中的应用程序异常的情况。 Kubernetes提供了三种健康检查的探针: 存活探针:livenessProbe,用于检测容器是否正常,类似于执行ps命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作;若容器的存活检查成功则不执行任何操作。 就绪探针:readinessProbe,用于检查用户业务是否就绪,如果未就绪,则不转发流量到当前实例。一些程序的启动时间可能很长,比如要加载磁盘数据或者要依赖外部的某个模块启动完成才能提供服务。这时候程序进程在,但是并不能对外提供服务。这种场景下该检查方式就非常有用。如果容器的就绪检查失败,集群会屏蔽请求访问该容器;若检查成功,则会开放对该容器的访问。 启动探针:startupProbe,用于探测应用程序容器什么时候启动了。 如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查, 确保这些存活、就绪探针不会影响应用程序的启动。 这可以用于对启动慢的容器进行存活性检测,避免它们在启动运行之前就被终止。
  • 停止前处理 在创建工作负载时,配置容器信息,选择“生命周期”。 在“停止前处理”页签,设置停止前处理的命令。 表4 停止前处理 参数 说明 命令行方式 在容器中执行指定的命令。命令行可通过执行bash或执行二进制的方式实现,您可以参照示例配置需要执行的命令。 命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: - /uninstall.sh - uninstall_agent 请在执行脚本中填写: /uninstall uninstall_agent。这条命令表示容器结束前将执行uninstall.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。
  • YAML样例 本节以nginx为例,说明kubectl命令设置容器生命周期的方法。 在以下配置文件中,您可以看到postStart命令在容器目录/bin/bash下写了个install.sh命令。 preStop执行uninstall.sh命令。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx command: - sleep 3600 #启动命令 imagePullPolicy: Always lifecycle: postStart: exec: command: - /bin/bash - install.sh #启动后命令 preStop: exec: command: - /bin/bash - uninstall.sh #停止前命令 name: nginx imagePullSecrets: - name: default-secret
  • 启动命令 在默认情况下,镜像启动时会运行默认命令,如果想运行特定命令或重写镜像默认值,需要进行相应设置。 Docker的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时将运行镜像制作时提供的默认的命令和参数,Docker将这两个字段定义为ENTRYPOINT和 CMD。 如果在创建工作负载时填写了容器的运行命令和参数,将会覆盖镜像构建时的默认命令ENTRYPOINT、CMD,规则如下: 表1 容器如何执行命令和参数 镜像 ENTRYPOINT 镜像CMD 容器运行命令 容器运行参数 最终执行 [touch] [/root/test] 未设置 未设置 [touch /root/test] [touch] [/root/test] [mkdir] 未设置 [mkdir] [touch] [/root/test] 未设置 [/opt/test] [touch /opt/test] [touch] [/root/test] [mkdir] [/opt/test] [mkdir /opt/test] 在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动命令”页签,输入运行命令和运行参数。 表2 容器启动命令 命令方式 操作步骤 运行命令 在容器中执行指定的命令。命令行可通过执行bash或执行二进制的方式实现,您可以参照示例配置需要执行的命令。 若运行命令有多个,多个命令之间用空格进行分隔。若命令本身带空格,则需要加引号("")。 说明: 多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。 运行参数 输入控制容器运行命令参数,例如--port=8080。 若参数有多个,多个参数以换行分隔。
  • 启动后处理 在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动后处理”页签,设置启动后处理的参数。 表3 启动后处理-参数说明 参数 说明 命令行方式 在容器中执行指定的命令。命令行可通过执行bash或执行二进制的方式实现,您可以参照示例配置需要执行的命令。 命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。不支持后台执行和异步执行的命令。 如需要执行的命令如下: exec: command: - /install.sh - install_agent 请在执行脚本中填写: /install install_agent。这条命令表示容器创建成功后将执行install.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。
  • 使用示例 以集群包含一个资源为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和内存的资源上下限。同一个节点上部署的工作负载,对于未设置资源上下限的工作负载,如果其异常资源泄露会导致其它工作负载分配不到资源而异常。未设置资源上下限的工作负载,工作负载监控信息也会不准确。
  • 不同规格的资源配额要求 安装log-agent插件时,需确保集群中有足够的CPU、内存等可调度资源,不同插件规格的资源配额要求请参见表1。 表1 不同规格的资源配额要求 插件规格 容器实例 CPU配额 内存配额 小规格 (实例数为1) fluent-bit 申请:100m 限制:500m 申请:200Mi 限制:500Mi cop-logs 申请:100m 限制:1 申请:100Mi 限制:500Mi log-operator 申请:100m 限制:500m 申请:100Mi 限制:500Mi otel-collector 申请:200m 限制:1 申请:1Gi 限制:2Gi 大规格 (实例数为2) fluent-bit 申请:100m 限制:500m 申请:200Mi 限制:500Mi cop-logs 申请:100m 限制:1 申请:100Mi 限制:500Mi log-operator 申请:100m 限制:500m 申请:100Mi 限制:500Mi otel-collector 申请:200m 限制:1 申请:1Gi 限制:2Gi
  • 约束与限制 关闭监控前,请仔细阅读以下注意事项,避免数据丢失或者相关资源继续产生费用。 kube-prometheus-stack插件处于“安装中”、“升级中”、“删除中”和“回滚中”时不允许关闭监控。 kube-prometheus-stack插件处于“运行中”、“部分就绪”和“安装失败”时关闭监控:对于华为云集群,系统将会更新kube-prometheus-stack插件以关闭数据上报功能;对于本地集群和附着集群,系统将会卸载kube-prometheus-stack插件。 kube-prometheus-stack插件处于“回滚失败”、“不可用”、“安装失败”、“删除失败”和“未知”状态时,关闭监控将会卸载kube-prometheus-stack插件。 通过私网接入的本地集群和附着集群,关闭监控时会检查私网接入点(开启监控时创建的VPCEP终端节点和DNS内网 域名 )是否有其他集群在使用,若没有则会删除此私网接入点。 华为云集群使用云硬盘(csi-disk-topology)存储类型的PVC作为插件数据的临时存储,集群关闭监控后,命名空间monitoring下的PVC不会自动删除,为避免继续产生费用,请前往CCE控制台手动删除(需要先卸载kube-prometheus-stack插件,再删除)。
  • 创建流量策略 登录UCS控制台,在左侧导航栏中单击“流量分发”。 在流量管理控制台页面,单击右上角“创建流量策略”。 在弹出页面中,填写域名,并请至少添加一条调度策略。如您需要为 多个域名 创建流量策略,请依次重复3~5。 域名:域名前缀可自定义,后缀为已购买备案并且添加华为云DNS解析的公网域名。 前缀部分由多个以点分隔的字符串组成,可包含字母、数字、汉字、中划线,中划线不能在开头或末尾,单个字符串不超过63个字符,域名总长度不超过254个字符。 如果没有子域名,域名前缀部分可不填。 域名后缀部分为云解析服务(DNS)中已添加解析的公网域名。如您需要管理域名,请前往DNS控制台,具体步骤请参见公网域名管理。 调度策略:可基于访问位置和业务策略对流量进行调度,详见4。 单击按钮,添加一个调度策略后单击“确定”,如图1所示。如需为同一域名添加不同的调度策略,请重复此步骤,也可在创建完成后继续添加。 图1 添加调度策略 集群:选择一个状态为“运行中”的目标集群,列表中将自动获取UCS接管的所有集群。 命名空间:选择目标服务所在的命名空间,默认为“default”。 服务:选择一个目标服务,仅支持访问类型为负载均衡的服务,查询结果已过滤。 线路类型: 全网默认:必选,未匹配到已设置的线路时,会返回默认解析结果。 运营商线路解析:根据访问用户所在运营商网络调度到最佳访问地址。默认值为“电信/地区默认”,支持指定运营商及地区,其中地区选择的细粒度为省级。 地域解析:根据访问用户所处地理位置调度到最佳访问地址。默认值为“中国大陆/地区默认”,支持全球地域选择,其中中国大陆地区细粒度为省级,其余地域细粒度为国家/地区。 您需要先创建一条“全网默认”线路类型的调度策略作为默认解析,再添加自定义调度策略。如果域名未添加默认线路解析记录,会造成指定线路外的地区访问失败。 TTL:指解析记录在本地DNS服务器的缓存时间,默认值为“300s/5分钟”。如果您的服务地址经常更换,建议TTL值设置相对小些,反之,建议设置相对大些。 权重:当域名在同一解析线路中有多条相同类型的解析记录时,可以通过“权重”设置解析记录集的响应比例。详细信息请参考配置权重解析。 单击“创建”,流量策略创建成功。 图2 成功创建流量策略 父主题: 流量分发
  • 查看集群内Pod列表 容器组列表中包含实例名称、状态、命名空间、实例IP、所在节点、重启次数、CPU申请/限制、内存申请/限制、CPU使用率,以及内存使用率等信息。 图1 Pod列表页面 您可以利用页面左上方的命名空间,以及列表上方的实例名称、状态、实例IP和所在节点进行筛选,快速定位所需的实例。 在列表的右上角,您可以单击按钮来导出全部实例数据,或者选择部分实例进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。
  • 查看集群内Pod详情 在Pod列表中,单击需要查看详情的实例名称,进入该实例的详情页面,通过切换“概览”、“容器列表”和“监控”页签查看相应内容。 表1 Pod详情页面 词条 词条描述 概览 单击实例名称,进入实例概览页。 资源概况:Pod状态、容器数量(异常/总数)以及异常事件。 监控概览:包括CPU使用率、内存使用率和网络流入/流出速率这些常见的监控指标。 图2 资源概况和监控概览 容器使用趋势:包括Pod中各容器的CPU使用率、CPU使用量、内存使用率和内存使用量(在图表左上角切换对应指标),并且支持查看降序Top5和升序Top5数据(在图表右上角进行切换)。 图3 容器使用趋势 容器列表 容器列表中包含了容器名称、状态、命名空间、重启次数,以及镜像等详细信息。 您可以通过在列表上方按照容器名称、状态和命名空间进行筛选,快速找到需要的容器。 在列表的右上角,您可以单击按钮来导出全部容器数据,或者选择部分容器进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。 监控 在此处,您可以方便地查看实例在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。 如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见仪表盘。
  • 支持的巡检项 表1 CCE集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群版本是否超期 集群运维能力 集群kube-prometheus-stack插件状态是否正常 集群log-agent插件状态是否正常 集群npd插件状态是否正常 集群配置 安全组配置是否正确 核心插件 coredns插件状态 coredns近24小时cpu使用率最大值是否超过80% coredns近24小时内存使用率最大值是否超过80% coredns近24小时是否存在域名解析失败请求次数 coredns近24小时P99请求时延是否超过5s coredns插件状态 everest插件状态 everest插件状态 everest近24小时CPU使用率最大值是否超过80% everest近24小时内存使用率最大值是否超过80% kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM kube-prometheus-status在Server部署模式下,prometheus-server的PVC使用率是否超过80% log-agent插件状态 log-agent插件状态 LTS日志组、日志流是否创建成功 LTS日志组结构化是否创建成功 autoscaler插件状态 集群在开启节点池弹性扩缩容条件下,autoscaler插件状态是否可用 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90% 表2 本地集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群运维能力 集群kube-prometheus-stack插件状态是否正常 集群log-agent插件状态是否正常 核心插件 kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM log-agent插件状态 log-agent插件状态 LTS日志组、日志流是否创建成功 LTS日志组结构化是否创建成功 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90% 表3 附着集群、多云集群、伙伴云集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群运维能力 集群kube-prometheus-stack插件状态是否正常 核心插件 kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90%
  • 查看/切换视图 选择一个容器舰队或者未加入舰队的集群。 图1 选择舰队或未加入舰队的集群 选择“仪表盘”页签,默认展示集群视图。 设置查看视图的相关参数。各个视图可供设置的参数不同,请参见表1。 设置视图的时间窗。 在页面右上角处,选择时间段,或者自定义时间,并单击刷新界面。 容器智能分析仪表盘提供了预置视图,您可单击视图名称边上的“切换视图”按钮,选择需要的视图查看监控数据。系统预置视图如表1所示。 表1 预置视图 视图名称 视图参数 视图中包含的监控指标 集群视图(默认视图) 集群 节点数/磁盘不可用节点数/不可用节点数 CPU/内存使用率 CPU/内存Requests水位 CPU/内存Limits水位 Pod/容器数 CPU/内存使用量 网络接收/发送速率 网络平均接收/发送速率 接收/发送数据包速率 丢包率(接收/发送) 磁盘IOPS(读+写) ThroughPut(读+写) APIServer视图 集群 实例 存活数 QPS 请求成功率(读) 处理中请求数 请求速率(读/写) 请求错误率(读/写) 请求时延(读/写)(99分位时延) 工作队列增加速率/深度 工作队列时延(99分位时延) 内存/CPU使用量 Go routine数 Pod视图 集群 命名空间 pod 容器数/运行中容器数 Pod状态 容器重启次数 CPU/内存使用量 CPU Throttling 网络接收/发送速率 接收/发送数据包速率 丢包率(接收/发送) 磁盘IOPS(读+写) ThroughPut(读+写) 文件系统使用率/使用量 主机视图 集群 节点 CPU/内存使用率 平均负载 内存使用量 磁盘写入/读取速率 磁盘空间使用 磁盘IO Node视图 集群 节点 CPU/内存使用率 CPU/内存Requests水位 CPU/内存Limits水位 内存使用量 网络接收/发送速率 接收/发送数据包速率(Pod) 接收/发送数据包速率 丢包率(接收/发送) 磁盘IOPS(读+写) ThroughPut(读+写) CoreDNS视图 集群 实例 请求速率(记录类型/区域/DO标志位) 请求数据包(UDP/TCP) 响应速率(响应状态码) 响应时延 响应数据包(UDP/TCP) 缓存大小 缓存命中率 PVC视图 集群 命名空间 PV PVC PV/PVC状态 PVC使用量/使用率 PVC inodes使用量/使用率 PVC每小时/每天/每周使用率 一周后PVC使用量 Kubelet 集群 实例 运行中Kubelet/Pod/容器 实际卷/期望卷/配置错误数量 操作速率/错误率/时延 Pod启动速率/时延(99分位) 存储操作速率/错误率/时延(99分位) 控制组管理器操作速率/时延(99分位) PLEG relist速率/间隔/时延(99分位) RPC速率 请求时延(99分位) 内存/CPU使用量 Go routine数 Prometheus 集群 job instance Target同步间隔 Target数 平均拉取间隔 拉取失败 Appended Samples Head中Series数/Chunks数 查询速率/阶段时延 Prometheus Remote Write 集群 实例 url Highest Timestamp In vs. Highest Timestamp Sent Rate5m Rate in vs. succeeded or dropped 5m 当前/最大/最小/期望分片数 分片容量 挂起样本数 TSDB/远程写入当前段 样本丢弃率/失败率/重试率 入队失败重试率 工作负载 集群 命名空间 类型 工作负载 CPU/内存使用量 网络接收/发送速率 网络平均接收/发送速率 接收/发送数据包速率 丢包率(接收/发送) XGPU视图 集群 集群--XGPU设备显存使用率 集群--XGPU设备算力使用率 节点--XGPU设备显存使用率 节点--XGPU设备算力使用率 节点--XGPU设备数量 节点--XGPU设备显存分配量 GPU卡--XGPU设备显存使用率 GPU卡--XGPU设备显存分配量 GPU卡--XGPU设备显存分配率 GPU卡--XGPU设备算力使用率 GPU卡--XGPU设备数量 GPU卡--调度策略 GPU卡--不健康的XGPU设备数量 容器显存分配量 容器算力使用率 容器显存使用量 容器显存使用率
  • 设置命名空间配额 资源配额可以限制命名空间下的资源使用,进而支持以命名空间为粒度的资源划分。 通过设置命名空间级别的资源配额,实现多团队或多用户在共享集群资源的情况下限制团队、用户可以使用的资源总量,包括限制命名空间下创建某一类型对象的数量以及对象消耗计算资源(CPU、内存)的总量。 系统创建的kube-public、kube-system等命名空间不支持设置资源配额。 登录集群控制台。 在左侧导航栏中选择“命名空间”,单击对应命名空间后的“管理配额”。 设置资源配额。 所有配额均默认为不限制,如需设置资源配额,请输入大于等于1的整型数值。若手动限制CPU或内存的配额,则创建工作负载时必须指定CPU或内存请求值。 配额累计使用量包含系统默认创建的资源,如default命名空间下系统默认创建的Kubernetes服务(该服务可通过后端kubectl工具查看)等,故建议命名空间下的资源配额略大于实际期望值以去除系统默认创建资源的影响。 CPU(Core):限制命名空间下工作负载实例(Pod)能申请CPU资源的最大值,单位为“核”。 内存(MiB):限制命名空间下工作负载实例能申请内存资源的最大值,单位为MiB。 有状态工作负载(StatefulSet):限制命名空间下能创建有状态负载的最大数量。 无状态工作负载(Deployment):限制命名空间下能创建无状态负载的最大数量。 普通任务(Job):限制命名空间下能创建普通任务的最大数量。 定时任务(CronJob):限制命名空间下能创建定时任务的最大数量。 容器组(Pod):限制命名空间下能创建Pod的最大数量,包含停止状态的Pod。 容器组(不包含停止状态的Pod):限制命名空间下能创建Pod的最大数量,不包含停止状态的Pod。 服务(Service):限制命名空间下能创建服务的最大数量,包含停止状态的Service。 服务(不包含停止状态的Service):限制命名空间下能创建服务的最大数量,不包含停止状态的Service。 存储卷声明(PersistentVolumeClaim):限制命名空间下能创建存储卷声明的最大数量。 配置项(ConfigMap):限制命名空间下能创建配置项的最大数量。 密钥(Secret):限制命名空间下能创建密钥的最大数量。 单击“确定”。
  • Secret资源文件配置说明 本章节主要介绍Secret类型的资源描述文件的配置示例。 例如现在有一个工作负载需要获取账号密码,可以通过Secret来实现: yaml文件格式 定义的Secret文件secret.yaml内容如下。其中Value需要用Base64,Base64编码方法请参见如何进行Base64编码。 apiVersion: v1 kind: Secret metadata: name: mysecret # secret的名称 namespace: default #命名空间,默认为default data: username: bXktdXNlcm5hbWUK #用户名,需要用Base64编码 password: ****** #需要用Base64编码 type: Opaque # type建议不要做修改 json文件格式 定义的Secret文件secret.json内容如下。 { "apiVersion": "v1", "kind": "Secret", "metadata": { "name": "mysecret", "namespace": "default" }, "data": { "username": "bXktdXNlcm5hbWUK", "password": "******" }, "type": "Opaque" }
  • 相关操作 密钥创建完成后,您还可以执行表2中的操作。 kube-system命名空间下的密钥资源不能通过控制台更新,也不能删除,只能查看。 表2 其他操作 操作 说明 编辑YAML 单击密钥名称后的“编辑YAML”,可编辑当前密钥的YAML文件。 更新密钥 选择需要更新的密钥名称,单击“更新”。 根据表1更改信息。 单击“确定”。 删除密钥 选择要删除的密钥,单击“删除”。 根据系统提示删除密钥。 批量删除密钥 勾选需要删除的密钥名称。 单击页面左上角的“批量删除”,删除勾选的密钥。 根据系统提示删除密钥。
  • ConfigMap资源文件配置说明 ConfigMap资源文件支持json和yaml两种文件格式,且文件大小不得超过2MB。 json文件格式 文件名称为configmap.json,配置示例如下: { "kind": "ConfigMap", "apiVersion": "v1", "metadata": { "name": "paas-broker-app-017", "namespace": "test" }, "data": { "context": "{\"applicationComponent\":{\"properties\":{\"custom_spec\":{}},\"node_name\":\"paas-broker-app\",\"stack_id\":\"0177eae1-89d3-cb8a-1f94-c0feb7e91d7b\"},\"softwareComponents\":[{\"properties\":{\"custom_spec\":{}},\"node_name\":\"paas-broker\",\"stack_id\":\"0177eae1-89d3-cb8a-1f94-c0feb7e91d7b\"}]}" } } yaml文件格式 文件名称为configmap.yaml,配置示例如下: apiVersion: v1 kind: ConfigMap metadata: name: test-configmap namespace: default data: data-1: "value-1" data-2: "value-2"
共100000条