华为云用户手册

  • 性能说明 容器负载挂载对象存储时,每挂载一个对象存储卷,后端会产生一个常驻进程。当负载使用对象存储数过多或大量读写对象存储文件时,常驻进程会占用大量内存,部分场景下内存消耗量参考表1,为保证负载稳定运行,建议负载使用的对象存储卷数量不超过其申请的内存GiB数量,如负载的申请的内存规格为4GiB,则建议其使用的对象存储数不超过4。 表1 单个对象存储常驻进程内存消耗 测试项目 内存消耗 长稳运行 约50m 2并发写10M文件 约110m 4并发写10M文件 约220m 单写100G文件 约300m
  • default-secret default-secret的类型为kubernetes.io/dockerconfigjson,其data内容是登录SWR镜像仓库的凭据,用于从SWR拉取镜像。在CCE中创建工作负载时如果需要从SWR拉取镜像,需要配置imagePullSecrets的取值为default-secret,如下所示。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:alpine name: container-0 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret default-secret的data数据会定期更新,且当前的data内容会在一定时间后会过期失效。您可以使用describe命令在default-secret的中查看到具体的过期时间,如下所示。 在使用时请直接使用default-secret,而不要复制secret内容重新创建,因为secret里面的凭据会过期,从而导致无法拉取镜像。 $ kubectl describe secret default-secret Name: default-secret Namespace: default Labels: secret-generated-by=cce Annotations: temporary-ak-sk-expires-at: 2021-11-26 20:55:31.380909 +0000 UTC Type: kubernetes.io/dockerconfigjson Data ==== .dockerconfigjson: 347 bytes
  • 查看HPA策略 您可以查看HPA策略的规则、状态和事件,参照界面中的报错提示有针对性的解决异常事件。 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中单击“策略”,切换至“HPA策略”页签,单击要查看的HPA策略前方的。 在展开的区域中,可以看到规则、状态页签,单击策略操作区域的“事件”,可以看到事件页签。若策略异常,请参照界面中的报错提示进行定位处理。 您还可以在工作负载详情页中查看已创建的HPA策略: 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中单击“工作负载”,单击工作负载名称查看详情。 在该工作负载详情页的“弹性伸缩”页签下可以看到HPA策略,您在“策略”页面配置的伸缩策略也会在这里显示。 表1 事件类型及名称 事件类型 事件名称 描述 正常 SuccessfulRescale 扩缩容成功 异常 InvalidTargetRange 无效的TargetRange InvalidSelector 无效选择器 FailedGetObjectMetric 获取对象失败数 FailedGetPodsMetric 获取Pod列表失败指标 FailedGetResourceMetric 获取资源失败数 FailedGetExternalMetric 获取外部指标失败 InvalidMetricSourceType 无效的指标来源类型 FailedConvertHPA 转换HPA失败 FailedGetScale 获取比例尺失败 FailedComputeMetricsReplicas 计算指标副本数失败 FailedGetScaleWindow 获取ScaleWindow失败 FailedRescale 扩缩容失败
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 查看集群总览页,在右边“连接信息”下证书认证一栏,单击“下载”。 图1 获取证书 在弹出的“证书获取”窗口中,根据系统提示选择证书的过期时间并下载集群X509证书。 下载的证书包含client.key、client.crt、ca.crt三个文件,请妥善保管您的证书,不要泄露。 集群中容器之间互访不需要证书。 使用集群证书调用Kubernetes原生API。 例如使用curl命令调用接口查看Pod信息,如下所示,其中*****:5443为集群API Server的内网或公网地址。 curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://*****:5443/api/v1/namespaces/default/pods/ 更多集群接口请参见Kubernetes API。
  • 升级计划介绍 基于您配置的集群维护窗口和CCE版本发布情况,系统会在每周一凌晨1点生成一周后的自动升级计划,并提前7天发送事件。 如果您在周一0点到1点之间修改了维护窗口,则下周一凌晨1点才会安排升级计划。如果您有特殊情况需要放弃本次自动升级,请在页面手动取消升级计划。手动取消升级计划仅取消本次升级,并不会关闭自动升级能力,下个周期仍然会安排自动升级。 自动升级前三天每天自动进行一次升级前检查,检查失败会发送事件,建议您配置应用运维服务告警规则进行邮件或短信通知,失败后请您及时处理,保证自动升级成功。
  • 开启集群自动升级 登录CCE控制台,单击集群名称进入集群。 在“总览”页面右侧的“维护窗口配置”中,单击“配置”按钮。 设置集群维护窗口,指定“升级周期”、“升级起始时间”以及“升级时长”。例如,您可以配置每周重复的维护窗口(周一到周五,每天四小时)。 为保证充足的升级时长,集群维护窗口周期需设置为3个小时及以上。 单击“确定”,系统会根据您设定的集群维护时间窗口,生成升级计划,并在窗口内自动完成升级任务。
  • 维护窗口介绍 在预定的维护窗口内,系统会自动执行升级前检查和升级操作。通过维护窗口配置,您可以灵活地控制集群自动升级的执行时间段,最大程度地减少业务风险。例如,对于零售业务,您可以将维护窗口设置为仅在工作日的凌晨进行,并在重要的活动期间关闭维护窗口。 如果您在升级操作执行前修改了集群维护窗口,升级操作将根据新的集群维护窗口执行;如果您在自动升级执行期间修改了维护窗口配置,已经开始执行的集群升级操作不会停止。
  • 集群升级流程 集群升级流程包括升级前检查、备份、升级和升级后验证几个步骤,下面介绍集群升级过程中的相关流程。 图1 集群升级流程 在确定集群的目标版本后,请您仔细阅读升级注意事项,避免升级时出现功能不兼容的问题。 升级前检查 升级集群前,CCE会对您的集群进行必要的检查,包括集群状态、插件状态、工作负载兼容性等多方面进行检查,确保集群满足升级的条件,检查项目请参考升级前检查异常问题排查。如过出现检查异常项,请参考控制台中的提示进行修复。 备份 通过硬盘快照的方式帮您备份集群控制面数据,以保存CCE组件镜像、组件配置、Etcd数据等关键数据。建议您在升级前进行备份。如果在升级过程中出现不可预期的情况,可以基于备份为您快速恢复集群。 备份方式 备份对象 备份方式 备份时间 回滚时间 说明 etcd数据备份 etcd数据 升级流程中自动备份 1-5min 2h 必选备份,升级过程中自动进行,用户无需关注 EVS快照备份 控制面数据,包括组件镜像、配置、日志以及etcd数据 通过页面一键备份(手动触发) 1-5min 20min - 配置与升级 执行升级前,需要对升级参数进行配置,我们已为您提供了默认配置,您也可以根据需要进行配置,升级参数配置完成后,将进入正式升级流程,对插件、控制面、数据面依次进行升级。 插件升级配置:此处列出了您的集群中已安装的插件。在集群升级过程中系统会自动升级已选择的插件,以兼容升级后的集群版本,您可以单击插件右侧的“配置”重新定义插件参数。 插件右侧如有标记,表示当前插件不能同时兼容集群升级起始和目标版本,在集群版本升级完成后将为您升级该插件 ,该插件在集群升级过程中可能无法正常使用。 升级后验证 升级完成后,会自动为集群执行集群状态检查等,您需要手动进行业务验证、新建Pod验证等,确保升级后集群功能正常。
  • 集群升级路径 Autopilot集群基于社区Kubernetes版本迭代演进,版本号由社区Kubernetes版本和补丁版本两部分构成,因此提供两类集群升级路径。 Kubernetes版本升级: Kubernetes版本号 支持升级到的Kubernetes版本号 v1.27 v1.28 v1.28 / 补丁版本需要升级至最新补丁后方可进行Kubernetes版本升级,控制台将根据当前集群版本自动为您生成最佳升级路径。 补丁版本升级 Autopilot集群采取了补丁版本管理策略,旨在不进行大版本升级的情况下,为在维集群提供新的特性、Bugfix和漏洞修复。 新的补丁版本发布以后您可在任意补丁版本一次直升到最新补丁版本。
  • 启动后处理 登录CCE控制台,在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动后处理”页签,设置启动后处理的参数。 表3 启动后处理-参数说明 参数 说明 命令行脚本方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。不支持后台执行和异步执行的命令。 如需要执行的命令如下: exec: command: - /install.sh - install_agent 请在执行脚本中填写: /install install_agent。这条命令表示容器创建成功后将执行install.sh。
  • 停止前处理 登录CCE控制台,在创建工作负载时,配置容器信息,选择“生命周期”。 在“停止前处理”页签,设置停止前处理的命令。 表4 停止前处理 参数 说明 命令行脚本方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: - /uninstall.sh - uninstall_agent 请在执行脚本中填写: /uninstall uninstall_agent。这条命令表示容器结束前将执行uninstall.sh。
  • 启动命令 在默认情况下,镜像启动时会运行默认命令,如果想运行特定命令或重写镜像默认值,需要进行相应设置。 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] 登录CCE控制台,在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动命令”页签,输入运行命令和运行参数。 表2 容器启动命令 命令方式 操作步骤 运行命令 输入可执行的命令,例如“/run/server”。 若运行命令有多个,需分行书写。 说明: 多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。 运行参数 输入控制容器运行命令参数,例如--port=8080。 若参数有多个,多个参数以换行分隔。
  • 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
  • 约束与限制 在Kubernetes中,外部用户及内部组件频繁的数据更新操作采用乐观并行的控制方法。通过定义资源版本(resourceVersion)实现乐观锁,资源版本字段包含在对象的元数据(metadata)中。这个字段标识了对象的内部版本号,且对象被修改时,该字段将随之修改。kube-apiserver可以通过该字段判断对象是否已经被修改。当包含resourceVersion的更新请求到达apiserver,服务器端将对比请求数据与服务器中数据的资源版本号,如果不一致,则表明在本次更新提交时,服务端对象已被修改,此时apiserver将返回冲突错误(409)。客户端需重新获取服务端数据,重新修改后再次提交到服务器端;而资源配额对每个命名空间的资源消耗总量提供限制,并且会记录集群中的资源信息,因此开启资源配额后,在大规模并发场景下创建资源冲突概率会变高,会影响批创资源性能。
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“命名空间”。 单击对应命名空间后的“管理配额”。 系统级别的命名空间kube-system、kube-public默认不支持设置资源配额。 设置资源配额,然后单击“确定”。 命名空间设置了CPU或内存资源配额后,创建工作负载时,必须指定CPU或内存的请求值(request)和约束值(limit),否则CCE将拒绝创建实例。若设置资源配额值为0,则不限制该资源的使用。 配额累计使用量包含CCE系统默认创建的资源,如default命名空间下系统默认创建的kubernetes服务(该服务可通过后端kubectl工具查看)等,故建议命名空间下的资源配额略大于实际期望值以去除系统默认创建资源的影响。
  • 背景信息 默认情况下,运行中的Pod可以无限制的使用Node节点上的CPU和内存,这意味着任意一个Pod都可以无节制地使用集群的计算资源,某个命名空间的Pod可能会耗尽集群的所有资源。 kubernetes在一个物理集群上提供了多个虚拟集群,这些虚拟集群被称为命名空间。命名空间可用于多种工作用途,满足多用户的使用需求,通过为每个命名空间配置资源额度可以有效限制资源滥用,从而保证集群的可靠性。 您可为命名空间配置包括CPU、内存、Pod数量等资源的额度,更多信息请参见资源配额。
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“配置与密钥”,选择“密钥”页签,在右上角单击“创建密钥”。 填写参数。 表1 基本信息说明 参数 参数说明 名称 新建的密钥的名称,同一个命名空间内命名必须唯一。 命名空间 新建密钥所在的命名空间,默认为default。 描述 密钥的描述信息。 密钥类型 新建的密钥类型。 Opaque:一般密钥类型。 kubernetes.io/dockerconfigjson:存放拉取私有仓库镜像所需的认证信息。 kubernetes.io/tls:Kubernetes的TLS密钥类型,用于存放7层负载均衡服务所需的证书。kubernetes.io/tls类型的密钥示例及说明请参见TLS Secret。 IngressTLS:CCE提供的TLS密钥类型,用于存放7层负载均衡服务所需的证书。 其他:若需要创建其他类型的密钥,请手动输入密钥类型。 密钥数据 工作负载密钥的数据可以在容器中使用。 当密钥为Opaque类型时,单击,在弹出的窗口中输入键值对,并且可以勾选“自动Base64转码”。 当密钥为kubernetes.io/dockerconfigjson类型时,输入私有镜像仓库的账号和密码。 当密钥为kubernetes.io/tls或IngressTLS类型时,上传证书文件和私钥文件。 说明: 证书是自签名或CA签名过的凭据,用来进行身份认证。 证书请求是对签名的请求,需要使用私钥进行签名。 密钥标签 密钥的标签。键值对形式,输入键值对后单击“确认添加”。 配置完成后,单击“确定”。 密钥列表中会出现新创建的密钥。
  • 相关操作 密钥创建完成后,您还可以执行表2中的操作。 密钥列表中包含系统密钥资源,系统密钥资源不可更新,也不能删除,只能查看。 表2 其他操作 操作 说明 编辑YAML 单击密钥名称后的“编辑YAML”,可编辑当前密钥的YAML文件。 更新密钥 选择需要更新的密钥名称,单击“更新”。 根据表1更改信息。 单击“确定”。 删除密钥 选择要删除的密钥,单击“删除”。 根据系统提示删除密钥。 批量删除密钥 勾选需要删除的密钥名称。 单击页面左上角的“批量删除”,删除选中的密钥。 根据系统提示删除密钥。
  • 设置镜像拉取策略 创建工作负载会从镜像仓库拉取容器镜像到节点上,当前Pod重启、升级时也会拉取镜像。 默认情况下容器镜像拉取策略imagePullPolicy是IfNotPresent,表示如果节点上有这个镜像就直接使用节点已有镜像,如果没有这个镜像就会从镜像仓库拉取。 容器镜像拉取策略还可以设置为Always,表示无论节点上是否有这个镜像,都会从镜像仓库拉取,并覆盖节点上的镜像。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:alpine name: container-0 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullPolicy: Always imagePullSecrets: - name: default-secret 在CCE控制台也可以设置镜像拉取策略,在创建工作负载时设置“更新策略”:勾选表示总是拉取镜像(Always),不勾选则表示按需拉取镜像(IfNotPresent)。 图1 设置更新策略 建议您在制作镜像时,每次制作一个新的镜像都使用一个新的Tag,如果不更新Tag只更新镜像,当拉取策略选择为IfNotPresent时,CCE会认为当前节点已经存在这个Tag的镜像,不会重新拉取。 父主题: 配置工作负载
  • 常见问题 Error from server Forbidden 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: # kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default" 原因是用户没有操作该Kubernetes资源的权限,请参见命名空间权限(Kubernetes RBAC授权)为用户授权。 The connection to the server localhost:8080 was refused 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: The connection to the server localhost:8080 was refused - did you specify the right host or port? 原因是由于该kubectl客户端未配置集群认证,请参见配置kubectl认证文件进行配置。
  • 使用kubectl连接集群 若您需要从客户端计算机连接到Kubernetes集群,可使用Kubernetes命令行客户端kubectl,您可登录CCE控制台,单击待连接集群名称,在集群“总览”页面查看访问地址以及kubectl的连接步骤。 图1 集群连接信息 您需要先下载kubectl以及配置文件,复制到您的客户端机器,完成配置后,即可以访问Kubernetes集群。使用kubectl连接集群的步骤如下: 准备环境 您需要准备一台与集群同VPC的虚拟机,并绑定弹性公网IP用于下载kubectl。 下载kubectl 如果已经安装kubectl,则跳过此步骤,您可执行kubectl version命令判断是否已安装kubectl。 本文以Linux环境为例安装和配置kubectl,详情请参考安装kubectl。 登录到您的客户端机器,下载kubectl。 cd /home curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl 其中{v1.25.0}为指定的版本号,请根据集群版本进行替换。 安装kubectl。 chmod +x kubectl mv -f kubectl /usr/local/bin 获取kubectl配置文件 在集群总览页中的“连接信息”版块,单击kubectl后的“配置”按钮,查看kubectl的连接信息,并在弹出页面中选择访问方式,然后下载对应的配置文件。 Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0及以上:支持“内网 域名 访问”、“内网IP访问”和“公网访问”。 Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0以下:支持“内网访问”和“公网访问”,其中“内网访问”仅支持使用域名,不支持使用内网IP。 图2 下载配置文件 kubectl配置文件(kubeconfig)用于对接认证集群,请您妥善保存该认证凭据,防止文件泄露后,集群有被攻击的风险。 IAM 用户下载的配置文件所拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。 如果Linux系统里面配置了KUBECONFIG环境变量,kubectl会优先加载KUBECONFIG环境变量,而不是$home/.kube/config,使用时请注意。 配置kubectl 以Linux环境为例配置kubectl。 登录到您的客户端机器,复制3中下载的配置文件(以kubeconfig.yaml为例)到您客户端机器的/home目录下。 配置kubectl认证文件。 cd /home mkdir -p $HOME/.kube mv -f kubeconfig.yaml $HOME/.kube/config 根据使用场景,切换kubectl的访问模式。 VPC网络内域名接入访问请执行: kubectl config use-context internal 互联网接入访问请执行(集群需绑定公网地址): kubectl config use-context external 互联网接入访问如需开启双向认证请执行(集群需绑定公网地址): kubectl config use-context externalTLSVerify
  • 权限说明 kubectl访问集群是通过集群上生成的配置文件(kubeconfig.json)进行认证,kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。 用户拥有的权限请参见集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系。
  • 资源消耗Top统计 在资源消耗Top统计中,CCE服务会将CPU使用率和内存使用率排名前五的无状态负载、有状态负载和Pod纳入统计范围,以帮助您识别资源消耗“大户”。如果您需要查看全部数据,可前往工作负载或Pod页面。 图2 资源消耗Top统计 监控名词解释: CPU使用率 工作负载CPU使用率 = 工作负载各个Pod中CPU使用率的平均值 Pod CPU使用率 = Pod实际使用的CPU核数 / 业务容器CPU核数限制值之和 内存使用率 工作负载内存使用率 = 工作负载各个Pod中内存使用率的平均值 Pod内存使用率 = Pod实际使用的物理内存 / 业务容器物理内存限制值之和
  • 插件简介 云原生监控插件(kube-prometheus-stack)通过使用Prometheus-operator和Prometheus,提供简单易用的端到端Kubernetes集群监控能力。 使用kube-prometheus-stack可将监控数据与监控中心对接,在监控中心控制台查看监控数据,配置告警等。 开源社区地址:https://github.com/prometheus/prometheus
  • 通过Metrics API提供资源指标 容器和节点的资源指标,如CPU、内存使用量,可通过Kubernetes的Metrics API获得。这些指标可以直接被用户访问,比如用kubectl top命令,也可以被HPA或者CustomedHPA使用,根据资源使用率使负载弹性伸缩。 插件可为Kubernetes提供Metrics API,但默认未开启,若要将其开启,需要创建以下APIService对象: apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: labels: app: custom-metrics-apiserver release: cceaddon-prometheus name: v1beta1.metrics.k8s.io spec: 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 pod -n monitoring命令,若显示如下,则表示Metrics API能正常访问: # kubectl top pod -n monitoring NAME CPU(cores) MEMORY(bytes) ...... custom-metrics-apiserver-d4f556ff9-l2j2m 38m 44Mi ...... 卸载插件时,需要执行以下kubectl命令,同时删除APIService对象,否则残留的APIService资源将导致metrics-server插件安装失败。 kubectl delete APIService v1beta1.metrics.k8s.io
  • 安装插件 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到云原生监控插件,单击“安装”。 在安装插件页面,选择插件版本。 配置相关参数。 对接 AOM :将普罗数据上报至 AOM 服务。开启后,可选择对应的AOM实例。采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。对接AOM需要用户具备一定权限,目前仅华为云/华为账号,或者在admin用户组下的用户支持此操作。 自定义指标HPA:以服务发现的形式自动采集应用的指标用于HPA。开启后需要在目标应用添加相关配置,详情请参见使用自定义指标创建HPA策略。 完成以上配置后,单击“安装”。 插件安装完成后,根据您的使用需求,可能还需进行以下操作。 如果您需要使用该插件为工作负载弹性伸缩提供系统资源指标(如CPU、内存使用量),还需要开启Metric API,详情请参见通过Metrics API提供资源指标。配置完成后,可使用Prometheus采集系统资源指标。
  • 组件说明 安装kube-prometheus-stack插件创建的Kubernetes资源,全部都创建在monitoring命名空间下。 表1 kube-prometheus-stack组件 容器组件 说明 资源类型 prometheusOperator (负载名称:prometheus-operator) 根据自定义资源(Custom Resource Definition / CRDs)来部署和管理Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。 Deployment prometheus (负载名称:prometheus-lightweight) Operator根据自定义资源Prometheus类型中定义的内容而部署Prometheus Server集群,这些自定义资源可以看作是用来管理Prometheus Server集群的StatefulSets资源。 StatefulSet kubeStateMetrics (负载名称:kube-state-metrics) 将Prometheus的metrics数据格式转换成K8s API接口能识别的格式。 说明: 该组件如果存在多个Pod,只会有一个Pod暴露指标。 Deployment nodeExporter (负载名称:node-exporter) 每个节点上均有部署,收集Node级别的监控数据。 Pod adapter (负载名称:custom-metrics-apiserver) 将自定义指标聚合到原生的Kubernetes API Server。 Deployment
  • 通过界面操作 创建第三方镜像仓库的密钥。 单击集群名称进入集群,在左侧导航栏选择“配置与密钥”,在右侧选择“密钥”页签,单击右上角“创建密钥”,密钥类型必须选择为kubernetes.io/dockerconfigjson。详细操作请参见创建密钥。 此处的“用户名”和“密码”请填写第三方镜像仓库的账号密码。 图1 添加密钥 创建工作负载时,可以在“镜像名称”中直接填写私有镜像地址,填写的格式为domainname/namespace/imagename:tag,并选择1中创建的密钥。 图2 填写私有镜像地址 填写其他参数后,单击“创建工作负载”。
  • 使用kubectl创建第三方镜像仓库的密钥 请参见通过kubectl连接集群,使用kubectl连接集群。 通过kubectl创建认证密钥 ,该密钥类型为kubernetes.io/dockerconfigjson类型。 kubectl create secret docker-registry myregistrykey -n default --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL 其中,myregistrykey为密钥名称,default为密钥所在的命名空间,其余参数如下所示。 DOCKER_REGISTRY_SERVER:第三方镜像仓库的地址,如“www.3rdregistry.com”或“10.10.10.10:443”。 DOCKER_USER:第三方镜像仓库的账号。 DOCKER_PASSWORD:第三方镜像仓库的密码。 DOCKER_EMAIL:第三方镜像仓库的邮箱。 创建工作负载时使用第三方镜像,具体步骤请参见如下。 kubernetes.io/dockerconfigjson类型的密钥作为私有镜像获取的认证方式,以Pod为例,创建的myregistrykey作为镜像的认证方式。 apiVersion: v1 kind: Pod metadata: name: foo namespace: default spec: containers: - name: foo image: www.3rdregistry.com/janedoe/awesomeapp:v1 imagePullSecrets: - name: myregistrykey #使用上面创建的密钥
  • 验证数据持久化及共享性 查看部署的应用及文件。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下: web-demo-846b489584-mjhm9 1/1 Running 0 46s web-demo-846b489584-wvv5s 1/1 Running 0 46s 依次执行以下命令,查看Pod的/data路径下的文件。 kubectl exec web-demo-846b489584-mjhm9 -- ls /data kubectl exec web-demo-846b489584-wvv5s -- ls /data 两个Pod均无返回结果,说明/data路径下无文件。 执行以下命令,在/data路径下创建static文件。 kubectl exec web-demo-846b489584-mjhm9 -- touch /data/static 执行以下命令,查看/data路径下的文件。 kubectl exec web-demo-846b489584-mjhm9 -- ls /data 预期输出如下: static 验证数据持久化 执行以下命令,删除名称为web-demo-846b489584-mjhm9的Pod。 kubectl delete pod web-demo-846b489584-mjhm9 预期输出如下: pod "web-demo-846b489584-mjhm9" deleted 删除后,Deployment控制器会自动重新创建一个副本。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下,web-demo-846b489584-d4d4j为新建的Pod: web-demo-846b489584-d4d4j 1/1 Running 0 110s web-demo-846b489584-wvv5s 1/1 Running 0 7m50s 执行以下命令,验证新建的Pod中/data路径下的文件是否更改。 kubectl exec web-demo-846b489584-d4d4j -- ls /data 预期输出如下: static static文件仍然存在,则说明数据可持久化保存。 验证数据共享性 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下: web-demo-846b489584-d4d4j 1/1 Running 0 7m web-demo-846b489584-wvv5s 1/1 Running 0 13m 执行以下命令,在任意一个Pod的/data路径下创建share文件。本例中选择名为web-demo-846b489584-d4d4j的Pod。 kubectl exec web-demo-846b489584-d4d4j -- touch /data/share 并查看该Pod中/data路径下的文件。 kubectl exec web-demo-846b489584-d4d4j -- ls /data 预期输出如下: share static 由于写入share文件的操作未在名为web-demo-846b489584-wvv5s的Pod中执行,在该Pod中查看/data路径下是否存在文件以验证数据共享性。 kubectl exec web-demo-846b489584-wvv5s -- ls /data 预期输出如下: share static 如果在任意一个Pod中的/data路径下创建文件,其他Pod下的/data路径下均存在此文件,则说明两个Pod共享一个存储卷。
共100000条