华为云用户手册

  • 相关操作 通过U CS 控制台,您还可以执行表3中的操作。 表3 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建服务。 查看详情 选择PVC所在的命名空间。 (可选)根据PVC名称进行搜索。 单击PVC名称即可查看存储卷声明详情,包括基本信息以及各集群的部署信息。 在存储卷声明详情页的部署集群栏中单击“查看YAML”,可查看各个集群中部署的PVC实例YAML,并支持下载。 查看YAML 单击PVC名称后的“查看YAML”,可查看当前PVC的YAML文件。 更新(存储卷声明PVC扩容) 单击PVC名称后的“更新”。 根据PVC参数更改部署集群参数,或单击“扩容”调整存储卷容量大小。 单击“确认”提交已修改的信息。 删除 单击PVC名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的PVC。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 创建存储卷声明 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“容器存储”,在“存储卷声明PVC”页签下单击右上角“创建存储卷声明”。 设置通用配置参数。 名称:新建存储卷声明名称,命名必须唯一。 命名空间:新建存储卷声明所属的命名空间,默认配置为default。 部署集群:单击,选择存储要部署的集群。 图1 添加部署集群 华为云集群:添加部署集群参数说明请参见表1。 非华为云集群:添加部署集群参数说明请参见表2。 表1 添加部署华为云集群 参数 参数说明 集群 选择部署集群为华为云集群。 存储类 csi-disk:即云硬盘EVS,需指定存储可用区和云硬盘类型。 可用区:云硬盘所在的可用区,不同可用区下支持的云硬盘类型可能存在差异。 云硬盘类型:可选择普通IO、高IO或超高IO,不同IO类型对应的存储类型依次为SATA、SAS、SSD。 csi-nas:即文件存储SFS。 csi-obs:即 对象存储OBS ,需指定实例类型和对象存储类型,并添加访问密钥。 实例类型:对象桶或并行文件系统。并行文件系统是OBS经过优化的高性能文件系统,提供更高性能的对象访问。 对象存储类型:标准存储和低频访问存储。低频访问存储是高可靠、较低成本的实时访问存储服务,适用于不频繁访问(平均一年少于12次)的场景,例如文件同步/共享、企业备份。 访问模式 选择csi-disk(云硬盘)时,访问模式为ReadWriteOnce (RWO),即存储卷只能以读写模式被单个节点同时加载。 选择csi-nas(文件存储)或csi-obs(对象存储)时,访问模式为ReadWriteMany (RWX),即存储卷能够以读写模式被多个节点同时加载。 容量(GiB) 新建存储的容量,容量不能小于10GiB。 仅选择csi-disk(云硬盘)和csi-nas(文件存储)时可设置;选择csi-obs(对象存储)时为按需使用,无需设置容量。 表2 添加部署非华为云集群 参数 参数说明 集群 选择部署集群为非华为云集群。 存储类 集群支持的存储类(StorageClass)取决于注册集群的实际环境,相关内容请参见存储类。 访问模式 ReadWriteOnce (RWO):即存储卷只能以读写模式被单个节点同时加载。 ReadWriteMany (RWX):即存储卷能够以读写模式被多个节点同时加载。 容量(GiB) 新建存储的容量,容量不能小于10GiB。 注解 输入键、值后单击“添加”,对应的注解将以Key/value键值对的形式附加到存储卷声明对象上。 重复添加,可对多个集群进行差异化的存储卷声明设置。 单击“确认”创建成功后,可单击PVC名称查看存储卷声明详情。
  • 使用存储卷声明挂载 云存储 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“存储卷声明PVC”页签下单击添加。 图1 容器存储设置 选择需要添加的存储卷声明。如没有可选的存储卷声明,可单击“创建存储卷声明”进行添加,相关参数请参见创建存储卷声明。参数填写完成后,单击“确认”。 填写容器挂载参数。 挂载路径:输入数据卷挂载到容器上的路径。 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径:Kubernetes中数据卷挂载的subPath,指引用卷内的子路径而不是其根路径。该参数不填写时,默认挂载至根路径。 设置权限。 只读:只能读容器路径中的数据卷。 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。 重复添加可增加多条存储卷声明设置。
  • 配置项挂载 “配置项挂载”用于处理工作负载配置参数。用户需要提前创建工作负载配置,操作步骤请参见配置项(ConfigMap)。 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“本地存储”页签下单击添加。 图3 容器存储设置 设置添加本地磁盘参数,如表3。 表3 配置项挂载 参数 参数说明 存储类型 配置项(ConfigMap)。 配置项 选择对应的配置项名称。 说明: 配置项需要提前创建,详情请参见配置项(ConfigMap)。 挂载路径 输入数据卷挂载到容器上的路径。 须知: 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,应用创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径 使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。 权限 仅支持“只读”,只能读容器路径中的数据卷。 重复添加可增加多条设置,单击“确认”完成配置。
  • 临时路径挂载 适用于临时存储、灾难恢复、共享运行时数据等场景,工作负载实例的删除或者迁移会导致临时路径被删除。 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“本地存储”页签下单击添加。 图2 容器存储设置 设置添加本地磁盘参数,如表2。 表2 临时路径挂载 参数 参数说明 存储类型 临时路径(EmptyDir)。 磁盘介质 默认:即存储在硬盘上,适用于数据量大,读写效率要求低的场景。 内存:可以提高运行速度,但存储容量受内存大小限制。适用于数据量少,读写效率要求高的场景。 挂载路径 输入数据卷挂载到容器上的路径。 须知: 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,应用创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径 使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。 权限 只读:只能读容器路径中的数据卷。 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。 重复添加可增加多条设置,单击“确认”完成配置。
  • 主机路径挂载 在容器上挂载宿主机上的文件或目录。通常用于:“容器应用程序生成的日志文件需要永久保存”或者“需要访问宿主机上Docker引擎内部数据结构的容器应用”。 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“本地存储”页签下单击添加。 图1 容器存储设置 设置添加本地磁盘参数,如表1。 表1 主机路径挂载 参数 参数说明 存储类型 主机路径(HostPath)。 主机路径 输入主机路径,如/etc/hosts。 挂载路径 输入数据卷挂载到容器上的路径。 须知: 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,应用创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径 使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。 权限 只读:只能读容器路径中的数据卷。 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。 重复添加可增加多条设置,单击“确认”完成配置。
  • 本地存储 通过本地磁盘存储将容器所在宿主机的文件目录挂载到容器的指定路径中(对应Kubernetes的HostPath),也可以不填写源路径(对应Kubernetes的EmptyDir),不填写时将分配主机的临时目录挂载到容器的挂载点,指定源路径的本地硬盘数据卷适用于将数据持久化存储到容器所在宿主机,EmptyDir(不填写源路径)适用于容器的临时存储。配置项(ConfigMap)是一种用于存储工作负载所需配置信息的资源类型,内容由用户决定。密钥(Secret)是一种用于存储工作负载所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。详情请参见挂载本地存储。
  • 存储卷声明 UCS支持创建持久化存储并挂载到容器的某一路径下,当容器迁移时,云存储会在新容器中重新被挂载,从而保证数据的可靠性,详情请参见挂载存储卷。因此建议在创建工作负载时选择挂载存储卷声明,将Pod数据存储在对应的云存储上。若存储在本地磁盘上,当节点异常无法恢复时,本地磁盘中的数据也将无法恢复。 华为云集群:UCS支持自动创建云硬盘(EVS)、对象存储(OBS)、文件存储(SFS)三种不同类型的云存储并挂载到华为云集群的容器路径下。 云硬盘(EVS):云硬盘可以为容器提供高可靠、高性能、规格丰富并且可弹性扩展的块存储服务,这种存储方式存放的是二进制数据,无法直接存放文件,适用于需要永久化保存的数据。 文件存储(SFS):提供按需扩展的高性能文件存储(NAS),可为容器提供文件共享访问,用于需要多读多写的文件持久化存储,适用于多种工作负载场景,包括 媒体处理 、内容管理和Web服务、大数据和分析应用程序等场景。 对象存储(OBS):对象存储没有总数据容量和对象/文件数量的限制,为用户提供了超大存储容量的能力,适合存放任意类型的文件,可用于海量数据存储分析、历史数据明细查询、海量行为 日志分析 和公共事务分析统计等场景。 非华为云集群:非华为云集群在使用存储卷声明挂载云存储时,需要集群提供商支持存储类功能,详情请参见存储类。
  • 配置 域名 为应用添加域名访问时,必须确保您配置的域名已在域名服务商完成注册并备案,否则域名可能无法访问。 若您已有经过注册和备案的域名,请直接至3创建公网域名解析。 若您尚未注册域名,请先购买公网域名,并按照页面提示流程完成域名的备案、解析和相关配置。域名注册、备案流程如下。 购买公网域名。以ucsclub.cn为例。 若您尚未购买公网域名,请先购买公网域名。 若已购买,请执行2。 公网域名备案。 若您的公网域名尚未备案,请前往华为云备案中心处备案。 若您已经备案,请执行3。 公网域名解析。 若您尚未创建公网域名解析,请创建公网域名解析。 若您已经创建,请执行4。 配置域名。 选择已完成以上步骤的域名,单击“配置”。
  • 添加方式 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“服务与路由”,选择“路由”页签。 选择需要创建路由的命名空间,并单击右上角“创建路由”。如需新建命名空间,请参见创建命名空间。 图1 选择命名空间 设置路由配置参数。 图2 创建路由 Ingress名称:新增路由的名称,用户可自定义。 命名空间:路由所在命名空间。 对接nginx:Ingress Controller分为ELB型和Nginx型。UCS支持上述两种Ingress Controller类型,其中ELB Ingress Controller基于弹性负载均衡服务(ELB)实现流量转发;而Nginx Ingress Controller使用Kubernetes社区维护的模板与镜像,通过Nginx组件完成流量转发。 ELB Ingress:不开启“对接nginx”。 Nginx Ingress:单击开启“对接nginx”。 在创建Nginx Ingress前应为对应集群安装Nginx Ingress Controller插件,安装插件的具体操作请参见: 为CCE集群安装插件请参见通过控制台创建Nginx Ingress。 为本地集群安装插件请参见使用L7负载均衡Ingress-nginx。 为其他类型集群安装插件请参见开源社区文档Nginx Ingress Controller。 监听器配置:选择对外协议,支持HTTP和HTTPS。若对外协议选择HTTPS,请选择IngressTLS类型的服务器证书。若无符合条件的证书,可单击“创建IngressTLS类型的密钥证书”,参考密钥(Secret)创建一个指定类型的密钥证书。 SNI(Server Name Indication):SNI是TLS的扩展协议,在该协议下允许同一个IP地址和端口号下对外提供多个基于TLS的访问域名,且不同的域名可以使用不同的安全证书。 转发策略配置:请求的访问地址与转发规则匹配时(转发规则由域名、URL组成,例如:10.117.117.117:80/helloworld),此请求将被转发到对应的目标Service处理。您可添加多条转发策略。 域名:可选项,输入实际访问的域名地址。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。 URL:需要注册的访问路径,例如:/healthz。该访问路径需与后端应用暴露的URL一致,否则将返回404错误。 目标服务名称:选择服务名称,需要先创建NodePort服务,具体可参考节点访问(NodePort)。 目标服务访问端口:选择目标服务后,对应的容器端口将自动获取。 部署集群:选择需要部署的集群。 图3 添加部署集群 CCE集群: 对外端口:开放在负载均衡服务地址的端口,可任意指定。 负载均衡器:仅支持集群所在VPC下的负载均衡实例。如果没有可选的负载均衡器实例,请单击“创建负载均衡器”,创建完成后单击刷新按钮。 创建Nginx Ingress时,您无需手动选择负载均衡器,在插件安装阶段已经完成负载均衡器的关联。 其他云 图4 添加部署集群 Ingress Class:支持选择集群内已创建的Ingress Class,或手动输入规划的Ingress Class名称。 注解:支持key/value对格式,请您根据自身业务以及厂家要求进行标签配置。 如需创建内部负载均衡器,您需要根据集群的云服务商添加相应的注解,请参见内部负载均衡器。 单击“确认”。创建成功后可在“路由(Ingress)”页签的列表中查看。 获取访问地址。 单击左侧导航栏“服务与路由”,选择“路由”页签。 单击所添加的Ingress名称进入“路由详情”界面,查看对应的负载均衡器及监听器端口配置。您可以通过负载均衡器的弹性IP地址 + 监听器端口 + URL的形式访问后端负载,例如10.117.117.117:8088/helloworld。
  • 相关操作 通过UCS控制台,您还可以执行表1中的操作。 表1 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建路由。 查看详情 选择路由所在的命名空间。 (可选)根据路由名称进行搜索。 单击路由名称即可查看路由详情,包括基本信息以及各集群的部署信息。 在路由详情页的部署集群栏中单击“查看YAML”,可查看各个集群中部署的路由实例YAML,并支持下载。 编辑YAML 单击路由名称后的“编辑YAML”,可查看并编辑当前路由的YAML文件。 更新 单击路由名称后的“更新”。 根据路由参数更改信息。 单击“确认”提交已修改的信息。 删除 单击路由名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的路由。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 添加方式 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“服务与路由”,选择“服务”页签。 选择服务所在命名空间,并单击右上角“创建服务”。如需新建命名空间,请参见创建命名空间。 设置访问参数。 图1 创建服务 Service名称:服务名称,可自定义,取值范围为1-50字符。 访问类型:选择“负载均衡 LoadBalancer”。 服务亲和: 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。 端口配置: 协议:TCP或UDP,请根据业务的协议类型选择。 服务端口:容器端口映射到负载均衡实例的端口,通过负载均衡对外暴露服务时使用,端口范围为1-65535,可任意指定。 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。 部署集群:选择负载均衡部署的集群,并完成负载均衡的差异化设置。 图2 添加部署集群 CCE集群: 负载均衡器:仅支持集群所在VPC下的负载均衡实例。 分配策略: 加权轮询算法:根据不同的权重将请求分配到后端服务器。 加权最少连接:将请求分发给(当前连接/权重)比值最小的后端服务器进行处理。 源IP算法:将客户端IP请求固定分配给一台服务器,实现获取同一个session。 会话保持类型:默认不启用,可选择“源IP地址”。负载均衡监听是基于IP地址的会话保持,即来自同一IP地址的访问请求转发到同一台后端服务器上。 健康检查:默认不启用。此处健康检查是设置负载均衡的健康检查配置,支持TCP和HTTP协议,其参数详细解释参见表1。 表1 健康检查参数说明 参数 说明 示例 检查路径 当“协议”为HTTP时设置。指定健康检查的URL地址的路径。检查路径只能以/开头,长度范围[1-80]。 / 端口 健康检查端口号,取值范围[1,65535]。 健康检查默认使用业务端口(Service的NodePort和容器端口)作为健康检查的端口。 80 检查周期 每次健康检查响应的最大间隔时间。 取值范围[1-50]。 5 超时时间(秒) 每次健康检查响应的最大超时时间。 取值范围[1-50]。 10 最大重试次数 健康检查最大的重试次数,取值范围[1-10]。 5 其他云:访问注释支持key/value对格式,请您根据自身业务以及厂家要求进行注解配置。 命名空间:服务所在命名空间。 选择器:服务通过选择器与负载(标签)关联。单击“引用负载标签”,可选择已有的工作负载。 负载类型:选择需要关联的负载类型。 工作负载:选择一个已有的工作负载。如工作负载列表未显示,请单击刷新。 标签:选择工作负载后自动获取对应的标签,不可修改。 图3 引用负载标签 单击“确认”。 获取访问地址。 单击左侧导航栏“服务与路由”,选择“服务”页签。 单击所添加的Service名称进入“服务详情”界面,获取部署集群的访问地址。您可以通过负载均衡的弹性IP地址 + 端口的形式访问后端负载。
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建服务。 查看详情 选择服务所在的命名空间。 (可选)根据服务名称进行搜索。 单击服务名称即可查看服务详情,包括基本信息以及各集群的部署信息。 在服务详情页的部署集群栏中单击“查看YAML”,可查看各个集群中部署的服务实例YAML,并支持下载。 编辑YAML 单击服务名称后的“编辑YAML”,可查看并编辑当前服务的YAML文件。 更新 单击服务名称后的“更新”。 根据服务参数更改信息。 单击“确认”提交已修改的信息。 删除 单击服务名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的服务。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建密钥。 查看详情 单击配置项名称即可查看密钥数据详情。 编辑YAML 单击密钥名称后的“编辑YAML”,可查看到当前密钥的YAML文件。 更新 单击密钥名称后的“更新”。 根据表1更改信息。 单击“确认”提交已修改的信息。 删除 单击密钥名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的密钥。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 创建密钥 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“配置项与密钥”,切换至“密钥”页签。 选择需要创建密钥的命名空间,并单击右上角“创建密钥”。 参照表1设置基本信息。 表1 基本信息说明 参数 参数说明 名称 新建的密钥的名称,同一个命名空间内命名必须唯一。 命名空间 新建密钥所在的命名空间,默认为当前查看的命名空间。 描述 新建密钥的描述。 密钥类型 新建的密钥类型。 Opaque:一般密钥类型。在高敏感场景下,建议先通过 数据加密 服务加密敏感数据后,再存入Secret中。 kubernetes.io/dockerconfigjson:存放拉取私有仓库镜像所需的认证信息。如选择此类型的密钥,需要额外输入镜像仓库地址。 IngressTLS:存放7层负载均衡服务所需的证书。如选择此类型的密钥,需要上传证书文件及私钥文件。 其他:若需要创建其他类型的密钥,请手动输入密钥类型。 密钥数据 工作负载密钥的数据可以在容器中使用。 当密钥为Opaque类型时:输入键、值。其中“值”必须使用Base64编码,勾选“自动Base64编码”即可自动将输入的值转换为Base64编码。手动进行Base64编码的方法请参见如何进行Base64编码。 当密钥为dockerconfigjson类型时:输入私有镜像仓库的用户名和密码。 标签 标签以Key/value键值对的形式附加到各种对象上(如工作负载、节点、服务等)。 标签定义了这些对象的可识别属性,用来对它们进行管理和选择。 单击“添加” 。 输入键、值。 配置完成后,单击“确认”。 密钥列表中会出现新创建的密钥。
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建配置项。 查看详情 单击配置项名称即可查看配置项数据详情。 编辑YAML 单击配置项名称后的“编辑YAML”,可查看并编辑当前配置项的YAML文件。 更新 单击配置项名称后的“更新”。 根据表1更改信息。 单击“确认”提交已修改的信息。 删除 单击配置项名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的配置项。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 创建配置项 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“配置项与密钥”,切换至“配置项”页签。 选择需要创建配置项的命名空间,并单击右上角“创建配置项”。 参照表1设置新增配置参数。 表1 新建配置参数说明 参数 参数说明 名称 新建的配置项名称,同一个命名空间里命名必须唯一。 命名空间 新建配置项所在的命名空间,默认为当前查看的命名空间。 描述 配置项的描述信息。 配置项数据 工作负载配置的数据可以在容器中使用,或被用来存储配置数据。 单击 ,输入键、值。其中,“键”代表配置名;“值”代表配置内容。 配置标签 标签以Key/value键值对的形式附加到各种对象上(如工作负载、节点、服务等)。 标签定义了这些对象的可识别属性,用来对它们进行管理和选择。 输入标签键、值。 单击“确认添加” 。 配置完成后,单击“确定”。
  • 通过控制台配置调度策略 登录UCS控制台,进入集群联邦页面。 在创建工作负载时,在“高级配置”中找到“调度策略”。 表1 节点亲和性设置 参数名 参数描述 必须满足 即硬约束,设置必须要满足的条件,对应于requiredDuringSchedulingIgnoredDuringExecution,多条规则间是一种“或”的关系,即只需要满足一条规则即会进行调度。 尽量满足 即软约束,设置尽量满足的条件,对应于preferredDuringSchedulingIgnoredDuringExecution,无论是满足其中一条或者是都不满足都会进行调度。 在“节点亲和性”、“工作负载亲和性”、“工作负载反亲和性”下单击添加调度策略。 表2 调度策略设置 参数名 参数描述 标签名 对应节点的标签,可以使用默认的标签也可以用户自定义标签。 操作符 可以设置六种匹配关系(In, NotIn, Exists, DoesNotExist. Gt, and Lt)。 In:是否在标签值的列表中 NotIn:是否不在标签值的列表中 Exists:某个标签存在 DoesNotExist:某个标签不存在 Gt:标签的值大于某个值(字符串比较) Lt:标签的值小于某个值(字符串比较) 标签值 请填写标签值。 命名空间 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 指定调度策略生效的命名空间。 拓扑域 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 权重 仅支持在“尽量满足”策略中添加。
  • 操作场景 环境变量是指容器运行环境中设定的一个变量,环境变量可以在工作负载部署后修改,为工作负载提供极大的灵活性。 UCS中设置的环境变量与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: 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 # 密钥导入,原密钥中的键值直接会导入结果
  • 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
  • 公共参数说明 表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,用于检查用户业务是否就绪,如果未就绪,则不转发流量到当前实例。一些程序的启动时间可能很长,比如要加载磁盘数据或者要依赖外部的某个模块启动完成才能提供服务。这时候程序进程在,但是并不能对外提供服务。这种场景下该检查方式就非常有用。如果容器的就绪检查失败,集群会屏蔽请求访问该容器;若检查成功,则会开放对该容器的访问。
  • 停止前处理 登录UCS控制台,进入集群联邦页面,在创建工作负载时,配置容器信息,选择“生命周期”。 在“停止前处理”页签,设置停止前处理的命令。 表4 停止前处理 参数 说明 命令行方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: - /uninstall.sh - uninstall_agent 请在执行脚本中填写: /uninstall uninstall_agent。这条命令表示容器结束前将执行uninstall.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认为实例IP。
  • 启动后处理 登录UCS控制台,进入集群联邦页面,在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动后处理”页签,设置启动后处理的参数。 表3 启动后处理-参数说明 参数 说明 命令行方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: - /install.sh - install_agent 请在执行脚本中填写: /install install_agent。这条命令表示容器创建成功后将执行install.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] 登录UCS控制台,进入集群联邦页面,在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动命令”页签,输入运行命令和运行参数。 表2 容器启动命令 命令方式 操作步骤 运行命令 输入可执行的命令,例如“/run/server”。 若运行命令有多个,多个命令之间用空格进行分隔。若命令本身带空格,则需要加引号("")。 说明: 多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。 运行参数 输入控制容器运行命令参数,例如--port=8080。 若参数有多个,可添加运行参数。
  • 配置说明 CPU配额: 表1 CPU配额说明 参数 说明 CPU申请 容器使用的最小CPU需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配CPU总量 ≥ 容器CPU申请数时,才允许将容器调度到该节点。 CPU限制 容器能使用的CPU最大值。 建议配置方法: 节点的实际可用分配CPU量 ≥ 当前实例所有容器CPU限制值之和 ≥ 当前实例所有容器CPU申请值之和,节点的实际可用分配CPU量请在“集群管理”中对应集群的“节点管理”页面下查看。 内存配额: 表2 内存配额说明 参数 说明 内存申请 容器使用的最小内存需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配内存总量 ≥ 容器内存申请数时,才允许将容器调度到该节点。 内存限制 容器能使用的内存最大值。当内存使用率超出设置的内存限制值时,该实例可能会被重启进而影响工作负载的正常使用。 建议配置方法: 节点的实际可用分配内存量 ≥ 当前节点所有容器内存限制值之和 ≥ 当前节点所有容器内存申请值之和,节点的实际可用分配内存量请在“集群管理”中对应集群的“节点管理”页面下查看。 可分配资源:可分配量按照实例请求值(request)计算,表示实例在该节点上可请求的资源上限,不代表节点实际可用资源。 计算公式为: 可分配CPU = CPU总量 - 所有实例的CPU请求值 - 其他资源CPU预留值 可分配内存 = 内存总量 - 所有实例的内存请求值 - 其他资源内存预留值
共100000条