华为云用户手册

  • 步骤二:目标集群评估 在kspider执行完毕后,除了“cluster-*.json”文件之外,还会在当前目录下生成“preferred-*.json”文件。这个文件基于源集群的规模和节点规格进行初步评估,并提供关于目标集群版本和规模的推荐信息。这有助于您更好地规划和准备迁移过程。 “preferred-*.json”文件说明如下: { K8sVersion:Kubernetes版本,字符串类型 Scale:集群规模,字符串类型 Nodes:节点信息 CPU:CPU,字符串类型 Memory:内存,字符串类型 Arch:架构,字符串类型 KernelVersion:OS内核版本,字符串类型 ProxyMode:集群Proxy模式,字符串类型 ELB:是否依赖ELB,布尔型 } 上述文件中每个字段的评估规则如下: 表1 评估规则 字段 评估规则 Kubernetes版本 如果是1.21以下版本,推荐U CS 集群主要发行版本(例如1.21,随着时间发展会发生变化),大于主要发行版本时,将推荐UCS集群的最新版本。 集群规模 源集群节点数<25,推荐50节点规模 25≤源集群节点数<100,推荐200节点规模 100≤源集群节点数<500,推荐1000节点规模 源集群节点数≥500,推荐2000节点规模 CPU+内存 统计数量最多的那一种规格 架构 统计数量最多的那一种规格 OS内核版本 统计数量最多的那一种规格 集群Proxy模式 根据集群规模来设置,大于1000节点规模的集群,推荐使用ipvs,1000以内的推荐使用iptables。 是否依赖ELB 源集群是否有负载均衡类型的Service 示例: { "K8sVersion": "v1.21", "Scale": 50, "Nodes": { "CPU": "4", "Memory": "7622952Ki", "Arch": "amd64", "KernelVersion": "3.10.0-862.14.1.5.h520.eulerosv2r7.x86_64" }, "ELB": false, "ProxyMode": "iptables" } 评估结果仅供参考,最终选择什么版本、规模的目标集群还需要您综合判断。
  • kspider工作原理 kspider工具的架构如图1所示,包含三个模块:采集模块、连接管理和分析模块。采集模块可以收集源集群的数据,包括命名空间、工作负载、节点、网络等;连接管理模块负责与源集群的API Server建立连接;分析模块分为聚合输出和评估推荐两部分,旨在输出源集群的采集数据(生成“cluster-*.json”文件)以及提供目标集群的推荐信息(生成“preferred-*.json”文件)。 图1 kspider架构
  • 本地IDC集群迁移上云流程 UCS容器迁移支持将本地IDC自建的Kubernetes集群应用迁移到UCS华为云集群或本地集群,实现应用程序的云端部署和运维管理。迁移流程如图1所示。 图1 迁移流程 主要包含四个步骤: 集群评估 在这个阶段,您将根据源集群的现状来评估适合迁移的目标集群类型。UCS的kspider工具能够自动收集源集群的信息,包括Kubernetes版本、规模、工作负载、存储等数据,并根据收集到的数据为您提供推荐的目标集群信息。具体请参见集群评估。 数据迁移 在这个阶段,您将把镜像和相关依赖服务的数据迁移到云端。UCS的image-migrator是一个自动化镜像迁移工具,可以将基于Docker Registry v2搭建的Docker镜像仓库中的镜像迁移到SWR中;对于依赖服务的数据迁移,您可以使用华为云的其他云产品来配套实现。具体请参见镜像迁移和依赖服务迁移。 应用备份 在这个阶段,您将对本地IDC集群中的应用进行备份。UCS的k8clone工具可以自动收集Kubernetes元数据,并将其以压缩包的形式保存到本地,从而实现集群中应用的备份。具体请参见应用备份。 应用迁移 在这个阶段,您将利用备份数据恢复的方法,将本地IDC集群中的应用迁移到UCS华为云集群或本地集群。具体请参见应用迁移。 父主题: 本地IDC集群迁移上云
  • 工具包 在集群评估、镜像迁移、应用备份和应用迁移阶段,迁移过程已实现工具化。您需要预先下载这些工具并将它们上传到前述服务器。 对于Linux操作系统来说,使用下述工具前,需要运行chmod u+x 工具名命令(例如chmod u+x kspider-linux-amd64),授予可执行权限。 表1 准备工作 工具 说明 下载链接 备注 kspider kspider是一款用于采集源集群信息的工具,它向用户提供了集群的Kubernetes版本、规模、工作负载数量、存储以及正在使用的镜像等数据,这些信息有助于用户了解集群的当前状况,评估迁移风险,并选择合适的目标集群版本和规模。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-windows-amd64.exe 这些工具均支持在Linux(x86、arm)和Windows系统上运行,请根据服务器操作系统类型下载对应的工具。 image-migrator image-migrator是一个镜像迁移工具,能够自动将基于Docker Registry v2搭建的Docker镜像仓库或第三方云镜像仓库中的镜像迁移到SWR中。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-windows-amd64.exe k8clone k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(对象)保存为本地压缩包,然后将这些元数据恢复到目标集群中。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-windows-amd64.exe
  • 方案优势 UCS容器迁移的主要优势包括: 易用性 在集群评估、镜像迁移、应用备份和应用迁移阶段,迁移过程已实现工具化。这些工具免安装,简单轻量且配置灵活。 多版本 支持Kubernetes 1.19以上版本的集群迁移。 无依赖 迁移工具不需要任何外部依赖,可以独立运行。 多架构 迁移工具支持在Linux(x86、arm)、Windows环境中运行。 多场景 支持多种场景的集群迁移,满足您不同迁移需求,具体如表1所示。 表1 迁移场景 场景 说明 本地IDC集群迁移上云 将位于本地数据中心的Kubernetes集群迁移到华为云UCS管理的Kubernetes集群,实现应用程序的云端部署和运维管理。 第三方云集群跨云迁移 将位于其他云服务提供商的Kubernetes集群迁移到华为云UCS管理的Kubernetes集群,实现跨云迁移和统一管理。 不同Region UCS华为云集群迁移 在华为云UCS管理的Kubernetes集群间进行迁移,将应用程序从一个地理区域迁移到另一个地理区域,以满足数据合规性、延迟和可用性等需求。 同Region UCS华为云集群迁移 在同一地理区域内的华为云UCS管理的Kubernetes集群间进行迁移,实现资源优化、应用升级或其他管理需求。 不停机 迁移过程无需停机,不影响源集群业务。
  • 接入网络模式 对于附着集群,各集群提供商或本地数据中心对于网络入方向的端口规则有差异,防止特定端口外的入站通信。因此UCS使用集群网络代理的连接方式,如图2所示,无需在防火墙上启用任何入方向端口,仅通过集群代理程序的方式在出方向与UCS服务建立会话。 附着集群接入网络的方法有两种,具有不同的优点: 公网接入:具有弹性灵活、成本低、易接入的优点。 私网接入:可获得更加高速、低时延、稳定安全的体验。 图2 集群接入原理
  • 插件状态说明 kube-prometheus-stack和log-agent插件的状态说明如表1所示。部分状态将影响集群进行监控开启、监控配置修改和监控关闭操作,详见后续章节的约束与限制部分。 表1 插件状态说明 状态 说明 插件未安装 插件未安装 运行中 插件全部实例状态都在运行中,插件正常使用 安装中 插件正在安装中 升级中 插件正在更新中 回滚中 插件正在回滚中 回滚失败 插件回滚失败,可重试回滚或卸载后重新安装 删除中 插件正在删除中 部分就绪 插件下只有部分实例状态为运行中,插件部分功能可用 不可用 插件状态异常,插件不可使用。可单击插件名称查看实例异常事件 安装失败 插件安装失败,需要卸载后重新安装 升级失败 插件升级失败,可重试升级或卸载后重新安装 删除失败 插件删除失败,可重试卸载 未知 插件处于未知状态,需要卸载后重新安装
  • UCS功能所需的最小权限 华为云各服务之间存在业务交互关系,UCS也依赖其他云服务实现一些功能(如镜像仓库、 域名 解析),因此,上述四种系统策略经常和其他云服务的角色或策略结合使用,以达到精细化授权的目的。管理员在为 IAM 用户授权时,应该遵循权限最小化的安全实践原则,表1列举了UCS各功能管理员、操作、只读权限所需要的最小权限。 如您的华为云账号为首次登录UCS控制台,需要为其授权,同意授权后,UCS将在 统一身份认证 服务为您创建名为ucs_admin_trust的委托,为保证UCS服务正常使用,请不要删除或者修改该委托。 IAM用户所在用户组未授予任何权限的情况下,您将无法访问UCS控制台,请参考表1授予相关权限。 表1 UCS功能所需的最小权限 功能 权限类型 权限范围 最小权限 容器舰队 管理员权限 创建、删除舰队 注册华为云集群(CCE集群、 CCE Turbo 集群)、本地集群或附着集群 注销集群 将集群加入、移出舰队 为集群或舰队关联权限 开通集群联邦、联邦管理相关操作(如创建联邦工作负载、创建域名访问等) UCS FullAccess 只读权限 查询集群、舰队的列表或详情 UCS ReadOnlyAccess 华为云集群 管理员权限 对华为云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的读写权限。 UCS FullAccess + CCE Administrator 操作权限 对华为云集群及集群下大多数Kubernetes资源对象的读写权限,对命名空间、资源配额等Kubernetes资源对象的只读权限。 UCS CommonOperations + CCE Administrator 只读权限 对华为云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的只读权限。 UCS ReadOnlyAccess + CCE Administrator 本地/附着/多云/伙伴云集群 管理员权限 本地/附着/多云/伙伴云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的读写权限。 UCS FullAccess 操作权限 本地/附着/多云/伙伴云集群及集群下大多数Kubernetes资源对象的读写权限,对命名空间、资源配额等Kubernetes资源对象的只读权限。 UCS CommonOperations + UCS RBAC权限(需要包含namespaces资源对象的list权限) 只读权限 本地/附着/多云/伙伴云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的只读权限。 UCS ReadOnlyAccess + UCS RBAC权限(需要包含namespaces资源对象的list权限) 镜像仓库 管理员权限 容器镜像服务 的所有权限,包括创建组织、上传镜像、查看镜像列表或详情、下载镜像等操作。 SWR Administrator 权限管理 管理员权限 创建、删除权限 查看权限列表或详情 说明: 创建权限需要同时授予子用户IAM ReadOnlyAccess权限(IAM服务的只读权限),用于获取IAM用户列表。 UCS FullAccess + IAM ReadOnlyAccess 只读权限 查看权限列表或详情 UCS ReadOnlyAccess + IAM ReadOnlyAccess 策略中心 管理员权限 启用策略中心 创建、停用策略实例 查看策略列表 查看策略实施详情 UCS FullAccess 只读权限 对于已启用策略中心的舰队和集群,拥有该权限的用户可以查看策略列表和查看策略实施详情。 UCS CommonOperations 或 UCS ReadOnlyAccess 服务网格 管理员权限 应用服务网格的所有权限,包括创建网格、添加集群、sidecar注入、查看网格列表或详情、卸载网格等。 CCE Administrator 流量分发 管理员权限 创建流量策略、暂停调度策略、删除调度策略等操作。 (推荐)UCS CommonOperations + DNS Administrator 或 UCS FullAccess + DNS Administrator 只读权限 查看流量策略列表或详情 UCS ReadOnlyAccess + DNS Administrator 容器智能分析 管理员权限 接入、取消接入集群 查看基础设施、应用负载等多维度监控数据 UCS CIAOperations 云原生服务中心 管理员权限 云原生服务中心的所有权限,包括订阅服务、查看服务列表或详情、创建服务实例、查看实例列表或详情、删除服务实例、退订服务等操作。 UCS FullAccess 只读权限 云原生服务中心的只读权限,包括查看服务列表或详情、查看实例列表或详情等操作。 UCS ReadOnlyAccess
  • 系统策略 IAM中预置的UCS系统策略包含UCS FullAccess、UCS CommonOperations、UCS CIAOperations和UCS ReadOnlyAccess几种类型。 UCS FullAccess:UCS服务管理员权限,拥有该权限的用户拥有服务的所有权限(包含制定权限策略、安全策略等)。 UCS CommonOperations:UCS服务基本操作权限,拥有该权限的用户可以执行创建工作负载、流量分发等操作。 UCS CIAOperations:UCS服务容器智能分析管理员权限。 UCS ReadOnlyAccess:UCS服务只读权限(除容器智能分析只读权限)。 您可以通过查看策略内容来了解系统策略所支持的授权项,授权项的格式为“服务名:资源类型:操作”,支持通配符号*,通配符号*表示所有。 例如,UCS FullAccess的策略内容如下所示。可以看出,该策略包含了UCS、CCE(云容器引擎)、SWR(容器 镜像服务 )的所有权限, AOM 应用运维管理 )、 SMN (应用运维管理)、DNS(云解析服务)等服务的部分资源的操作权限。 { "Version": "1.1", "Statement": [ { "Action": [ "ucs:*:*", "cce:*:*", "swr:*:*", "aom:*:get", "aom:*:list", "smn:*:list", "dns:*:get*", "dns:*:list*", "dns:*:get", "dns:*:list", "dns:recordset:create", "dns:recordset:delete", "dns:recordset:update", "dns:tag:get", "lts:*:get", "lts:*:list", "apm:*:get", "apm:*:list", "vpcep:epservices:*", "vpcep:connections:*", "vpcep:endpoints:*", "elb:*:get", "elb:*:list", "vpc:*:get", "vpc:*:list", "ief:*:get", "ief:*:list", "cgs:images:operate", "cgs:*:get", "cgs:*:list" ], "Effect": "Allow" } ] }
  • 注销集群 登录UCS控制台,在左侧导航栏中单击“容器舰队”。 选择“未加入舰队的集群”页签,在目标集群栏中单击右上角的按钮。 弹出“注销集群”对话框,仔细阅读注意事项,确认风险后单击“确定”。 (可选)对于附着集群来说,注销集群成功后,还需前往目标集群卸载代理组件。 kubectl -n kube-system delete deployments/proxy-agent secret/proxy-agent-cert (可选)对于本地集群来说,注销集群成功后,您可以手动执行卸载命令,在本地主机环境中删除集群,清理资源: ./ucs-ctl delete cluster [集群名称] 如果命令执行失败,请参考如何手动清理本地集群节点?处理。
  • 关联权限 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 选择“未加入舰队的集群”页签,在目标集群栏中单击右上角的按钮。 图1 集群列表 在弹出的页面单击“关联权限”,打开“修改权限”页面,将已创建好的权限和集群的命名空间关联起来。 命名空间:支持“全部命名空间”和“指定命名空间”。全部命名空间包括当前集群已有的命名空间和集群后续新增的命名空间;“指定命名空间”即表示您自己选择命名空间的范围,UCS服务提供了几个常见的命名空间供您选择(如default、kube-system、kube-public),您也可以新增命名空间,但要自行确保新增的命名空间在集群中存在。 请注意,选择的命名空间仅对权限中命名空间级资源生效,不影响权限中的集群资源。关于命名空间级和集群级资源的介绍,请参见Kubernetes资源对象章节。 关联权限:从下拉列表中选择权限,支持一次性选择多个权限,以达到批量授权的目的。 如果针对不同命名空间,关联的权限不同(例如:为default命名空间关联readonly权限,为development命名空间关联develop权限),可以单击按钮添加多组授权关系。 单击“确定”,完成权限的关联。 如果后续需要修改集群的权限,采用同样的方法,重新选择命名空间和权限即可。
  • 通过控制台配置调度策略 在创建工作负载时,在“高级设置”中找到“调度策略”。 表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)指定的范围,然后再选择策略定义的内容。 权重 仅支持在“尽量满足”策略中添加。
  • 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小时以及自定义时间段内各维度资源的使用情况。 如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见仪表盘。
共100000条