华为云用户手册

  • URI GET /v2/{project_id}/msgsms/signatures 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,参考“获取帐号、用户、项目的名称和ID” 表2 Query参数 参数 是否必选 参数类型 描述 app_name 否 String 应用名称 end_time 否 String 结束时间 limit 否 Integer 数量,默认值10 offset 否 Integer 偏移量 signature_id 否 String 签名ID signature_name 否 String 签名名称 signature_type 否 String 签名类型 site 否 String 地域,取值范围:cn及hk ,当前该参数暂时不使用 sort_dir 否 String 排序方式 desc:降序 asc:升序 sort_key 否 String 排序字段,仅支持create_time start_time 否 String 开始时间 status 否 String 状态 PENDING_REVIEW:待审核 PROCESSING:内容审核通过,签名处理中 REVIEW_PASSED:处理完毕 REVIEW_NOT_PASS:审核不通过 TO_BE_ACTIVATED:待激活 PENDING_ACTIVATE:激活审核中
  • 响应示例 { "results": [ { "create_time": "2022-08-12 07:40:36", "customer_id": "******c55c3c4526b2ed7a0213bc9871", "id": "******27-37eb-4229-bee9-0eba4d8a897f", "template_type": "NOTIFY_TYPE", "template_name": "auto_test789", "app_key": "******3baZf4c856O4Qrbqvui3K2", "sign_id": "******b9-4141-4e2d-9838-14889c32a4bf", "template_content": "测试", "has_variable": "No", "flow_status": "Reviewing", "status": "Normal", "universal_template": 0, "urge_status": "NO", "country_name": "" } ], "total": 1 }
  • 请求示例 查询短信模板,请求方式:GET ,请求URL:/v2/{project_id}/msgsms/templates,路径参数:project_id,请求头参数:X-Auth-Token,Content-Type;Query参数:limit,offset,app_key,region。 GET /v2/845ada5bc7444f1295cd517af0123da1/msgsms/templates?template_name=auto_test789 Host: 100.85.***.***:30300 Content-Type: application/json X-Auth-Token: ****
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 results Array of SmsTemplateResp 查询结果 total Long 总数 表5 SmsTemplateResp参数 参数 是否必选 参数类型 描述 id 否 String 模板主键ID,用于获取、修改、删除模板以及查询模板变量的唯一标识 create_time 否 String 创建时间[yyyy-MM-dd HH:mm:ss] update_time 否 String 更新时间[yyyy-MM-dd HH:mm:ss] customer_id 否 String 租户customer id tenant 否 TentantBasic - template_name 否 String 模板名称 template_id 否 String 模板ID template_type 否 String 模板类型 app_name 否 String 应用名称 app_key 否 String 应用key sign_id 否 String 签名id template_content 否 String 模板内容 has_variable 否 String 是否有变量 template_desc 否 String 申请描述 review_desc 否 String 审核意见 review_order 否 String 审核人账号 flow_status 否 String 流程状态 universal_template 否 Integer 是否是通用模板 status 否 String 模板状态 Test:测试 Normal:正常 region 否 String 地域 cn:国内 intl:国际 brackets 否 String 中括号类型。支持枚举值: CN:中文类型:【】 GB:英文类型: [] 须知: 默认值为:CN 输入值不在上述枚举值范围内的,也按CN处理。 只有地域为国内时,该字段有效。 site 否 String 地域,取值范围:cn及hk ,当前该参数暂时不使用 urge_status 否 String 催审状态 urge_time 否 String 催审时间 urge_desc 否 String 催审描述 send_country1 否 Integer 发送国家1 send_country2 否 Integer 发送国家2 send_country3 否 Integer 发送国家3 is_support_multiomp 否 boolean 是否支持多OMP country_name 否 String 国家名称列表,返回发送国家前三名的国家名称,国家名称间以"~"分隔
  • URI GET /v2/{project_id}/msgsms/templates 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,参考“获取帐号、用户、项目的名称和ID” 表2 Query参数 参数 是否必选 参数类型 描述 app_key 否 String 应用key app_name 否 String 应用名称 end_time 否 String 结束时间 flow_status 否 String 流程状态 Adopted:通过 Reviewing:审核中 Reject:拒绝 has_variable 否 String 是否存在变量 limit 否 Integer 数量,默认值10 offset 否 Integer 偏移量 sign_name 否 String 签名名称 sort_dir 否 String 排序方式 desc:降序 asc:升序 sort_key 否 String 排序字段,仅支持create_time start_time 否 String 开始时间 template_id 否 String 模板ID template_name 否 String 模板名称 template_type 否 String 模板类型 VERIFY_CODE_TYPE:验证码类 PROMOTION_TYPE:推广类 NOTIFY_TYPE:通知类 region 否 String 地域 1. cn:国内 2. intl:国际
  • 常用概念 名词 说明 短信服务 华为云为企业用户(不包括个体工商户、个人独资企业、合伙企业等非法人主体或组织)提供单发、群发短信服务,同时可接收用户回复短信。 短信发送形式:可开发代码调用API,或使用群发助手发送短信。 国内短信 向中国大陆号码发送短信。支持发送验证码和行业通知短信。国内短信支持三网合一(移动,联通,电信,新增支持广电)专属通道。可参见开通流程。 验证码短信 发送携带数字验证码内容的短信。用于用户注册、用户登录、转账和密码找回等场景。可参见模板规范和变量规范。 通知短信 发送携带通知类内容的短信。用于快递通知、消费通知、即时提醒等场景。可参见模板规范和变量规范。 推广短信 又称营销短信,向有订购关系的会员用户发送推广短信。用于会员关怀、促销活动、运营活动等场景。可参见模板规范和变量规范。 短信签名 签名为一种方便快捷的个性化短信签名方式。短信由签名和短信正文组成。 说明: 在发送短信前需要申请短信签名和正文内容模板。国内短信必须携带签名,例如【华为云】。 请您提前申请签名,平台根据运营商规范审核通过后,使用申请的签名发送短信。 签名用于标识企业、产品或业务,必须提供实际依据,授权委托书、营业执照等。 签名分验证码、通知、推广三种类型,可申请多个。具体请参见签名规范。 短信模板 为用户提供短信正文的固定模板,根据企业业务需要,分为两种: 短信模板 = 固定文本+变量 短信模板 = 固定文本 说明: 必须提前将短信内容申请为模板才能发送短信,平台根据运营商规范审核(仅支持工作日审核)通过后,使用申请的模板发送短信。 根据企业业务需要,可提前申请多个短信模板。 短信模板分为分验证码、通知、推广三种类型。具体请参见模板规范和变量规范。 群发助手 群发短信工具,可直接在短信控制台上一键群发,无需开发代码。 父主题: 产品概述
  • 短信群发助手中,为何无法选择短信签名和模板? 使用群发助手提交发送任务时,请按先后顺序依次选择“短信应用” 、 “短信签名”、“短信模板”。 国内短信应用、签名、模板之间的关联关系,详见短信资源介绍。若下拉选项为空,请按下表处理。 参数 问题现象 可能原因 处理建议 短信应用 下拉选项为空,显示“暂无数据” 该华为云账号下还未添加短信应用。 请先创建短信应用。 短信签名 未选择“短信应用”。 已选择的“短信应用”下无可用的非验证码类短信签名。 请检查“短信应用”参数,并确认选择正确。 请检查该应用下是否有可用的非验证码类短信签名。若没有,请先申请短信签名。 短信模板 未选择“短信应用”。 (仅国内短信)未选择“短信签名”。 (仅国内短信)已选择的“短信签名”下无可用的短信模板。 请检查“短信应用”参数,并确认选择正确。 (仅国内短信)请检查“短信签名”参数,并确认选择正确。 (仅国内短信)请检查该签名下是否有可用的短信模板。若没有,请先申请短信模板。 父主题: 故障排除
  • 准备开发环境 从Python官网下载并安装合适的Python版本。 推荐使用的Python 2.x版本:Python 2.7.x版本。 推荐使用的Python 3.x版本:Python 3.6及以上版本。 不推荐使用python3.5及以下版本,如要使用需要运行命令pip install secrets,安装安全随机数模块,python2.7版本可用python2-secrets代替。 从PyCharm官网下载并安装最新社区版本。 运行命令 pip install pycryptodome==3.10.1,安装加密库。
  • 准备访问密钥 OBS通过用户账号中的AK和SK进行签名验证,确保通过授权的账号才能访问指定的OBS资源。获取访问密钥前,请确保访问OBS的IAM子用户已开启编程访问,开启方式详见修改或查看IAM用户信息。以下是对AK和SK的解释说明: AK:Access Key ID,接入键标识,用户在对象存储服务系统中的接入键标识,一个接入键标识唯一对应一个用户,一个用户可以同时拥有多个接入键标识。对象存储服务系统通过接入键标识识别访问系统的用户。 SK:Secret Access Key,安全接入键,用户在对象存储服务系统中的安全接入键,是用户访问对象存储服务系统的密钥,用户根据安全接入键和请求头域生成鉴权信息。安全接入键和接入键标识一一对应。 访问密钥分永久访问密钥(AK/SK)和临时访问密钥(AK/SK和SecurityToken)两种。每个用户最多可创建两个有效的永久访问密钥。临时访问密钥只在设置的有效期内能够访问OBS,过期后需要重新获取。出于安全性考虑,建议您使用临时访问密钥访问OBS,或使用永久访问密钥访问OBS时,定期更新您的访问密钥(AK/SK)。两种密钥的获取方式如下。 永久访问密钥: 登录OBS控制台。 单击页面右上角的用户名,并选择“我的凭证”。 在“我的凭证”页面,单击左侧导航栏的“访问密钥”。 在“访问密钥”页面,单击“新增访问密钥”。 在弹出的“新增访问密钥”对话框中,输入登录密码和对应验证码。 用户如果未绑定邮箱和手机,则只需输入登录密码。 用户如果同时绑定了邮箱和手机,可以选择其中一种方式进行验证。 单击“确定”。 在弹出的“下载确认”提示框中,单击“确定”后,密钥会直接保存到浏览器默认的下载文件夹中。 打开下载下来的“credentials.csv”文件既可获取到访问密钥(AK和SK)。 每个用户最多可创建两个有效的访问密钥。 为防止访问密钥泄露,建议您将其保存到安全的位置。如果用户在此提示框中单击“取消”,则不会下载密钥,后续也将无法重新下载。如果需要使用访问密钥,可以重新创建新的访问密钥。 临时访问密钥: 临时AK/SK和SecurityToken是系统颁发给用户的临时访问令牌,通过接口设置有效期,范围为15分钟至24小时,过期后需要重新获取。临时AK/SK和SecurityToken遵循权限最小化原则。使用临时AK/SK鉴权时,临时AK/SK和SecurityToken必须同时使用。 获取临时访问密钥的接口请参考获取临时AK/SK和securitytoken。 OBS属于全局级服务,所以在获取临时访问密钥时,需要设置Token的使用范围取值为domain,表示获取的Token可以作用于全局服务,全局服务不区分项目或者区域。
  • 操作步骤 登录分布式缓存服务管理控制台。 在管理控制台左上角单击,选择实例所在的区域。 单击左侧菜单栏的“缓存管理”。 在“缓存管理”页面,单击需要开启客户端IP透传的缓存实例名称。 在“连接信息”栏中单击“客户端IP透传”后的,可以修改客户端IP透传的状态。 查看客户端IP(以执行Client List为例)。 通过network=vpc的记录,查看其中addr值即为客户端IP的值。 图1 开启客户端IP透传前 图2 开启客户端IP透传后 开启客户端IP透传后,新建的客户端连接才会生效,旧的客户端连接仍然只能显示198.19地址。
  • 响应示例 状态码: 200 OK { "edge_app_id" : "test-app", "app_version" : "1.1.0", "state" : "RUNNING", "control_status" : "0000000000000000", "node_id" : "test-node", "module_name" : "edge_module", "module_id" : "test-module-id", "create_time" : "2020-05-28T11:31:29.740Z", "update_time" : "2020-05-28T11:31:29.740Z", "app_type" : "SYSTEM_REQUIRED", "function_type" : "DATA_PROCESSING" }
  • 响应参数 状态码: 200 表8 响应Body参数 参数 参数类型 描述 edge_app_id String 应用ID 最小长度:0 最大长度:64 app_version String 应用版本 最小长度:0 最大长度:64 state String 模块运行状态 枚举值: PENDING PENDING_DELETE DELETE_FAILED RUNNING FAILED SUCCEEDED UNKNOWN DELETE_SUCCESS STOPPED control_status String 模块管控状态 node_id String 边缘节点(同deviceID)ID 最小长度:0 最大长度:64 module_name String 模块名称 最小长度:0 最大长度:256 module_id String 模块ID 最小长度:0 最大长度:64 create_time String 创建时间 最小长度:0 最大长度:256 update_time String 最后一次修改时间 最小长度:0 最大长度:256 app_type String 应用类型 枚举值: SYSTEM_REQUIRED SYSTEM_OPTIONAL USER function_type String 功能类型 枚举值: DATA_PROCESSING PROTOCOL_PARSING ON_PREMISE_INTEGRATION GATEWAY_MANAGER COMPOSITE_APPLICATION DATA_COLLECTION
  • 请求示例 PUT https://{endpoint}/v2/{project_id}/edge-nodes/{edge_node_id}/modules/{module_id} { "app_version" : "1.1.0", "module_name" : "edge_module", "container_settings" : { "configs" : { "container_port_list" : [ { "container_port" : 65535, "host_port" : 65535, "host_ip" : "string" } ] } }, "desired_state" : "RUNNING" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证。 最小长度:0 最大长度:20000 表3 请求Body参数 参数 是否必选 参数类型 描述 app_version 否 String 边缘应用版本 最小长度:0 最大长度:64 module_name 否 String 边缘模块名称 最小长度:0 最大长度:256 desired_state 否 String 模块期望状态: RUNNING(升级后期望模块运行),STOPPED(升级后期望模块停止),空值默认继承升级前模块期望状态 最小长度:0 最大长度:64 枚举值: RUNNING STOPPED container_settings 否 ContainerSettingsReqDTO object 容器设置 表4 ContainerSettingsReqDTO 参数 是否必选 参数类型 描述 configs 否 ContainerConfigsReqDTO object 容器相关配置 custom_envs 否 Object 自定义环境变量 extra_hosts 否 Object 域名解析配置集合 数组长度:0 - 20 表5 ContainerConfigsReqDTO 参数 是否必选 参数类型 描述 container_port_list 否 Array of ContainerPortDTO objects 容器端口映射值 数组长度:0 - 1000000 表6 ContainerPortDTO 参数 是否必选 参数类型 描述 container_port 否 Integer 构成一堆映射的容器端口 最小值:1 最大值:65535 host_port 否 Integer 构成一对映射的物理机对应网卡端口 最小值:1 最大值:65535 host_ip 否 String 对应网卡地址 最小长度:0 最大长度:64 表7 DNSConfigDTO 参数 是否必选 参数类型 描述 hostname 否 String 域名 最小长度:1 最大长度:1024 ip 否 String 域名解析对应IP 最小长度:1 最大长度:64
  • URI PUT /v2/{project_id}/edge-nodes/{edge_node_id}/modules/{module_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。获取方法请参见 获取项目ID。 最小长度:1 最大长度:64 edge_node_id 是 String 边缘节点ID 最小长度:1 最大长度:64 module_id 是 String 边缘模块ID 最小长度:1 最大长度:64
  • 参数配置 数据订阅过程中,部分参数会影响拉取数据的速度和间隔。 在启动SDK之前,您可以根据需要在“subscribe.properties”的配置文件中,对以下参数进行设置: # 获取订阅数据初始延时 MESSAGE_DELAY_TIME = 1500000 # 获取订阅数据间隔时间 MESSAGE_PERIOD_TIME = 2000000 # 通知用户订阅数据到达初始延时 NOTIFY_DELAY_TIME = 2000 # 通知用户订阅数据间隔 NOTIFY_PERIOD_TIME = 1000 # 返回服务端ack消息初始延时 ACK_DELAY_TIME = 3000 # 返回服务端ack消息时间间隔 ACK_PERIOD_TIME = 5000 以上参数值为默认配置,您可以使用默认值,也可以根据实际情况自定义参数值。 以上涉及到时间的单位均为微秒。
  • 通过控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建负载”。 配置工作负载的信息。 基本信息 负载类型:选择无状态工作负载Deployment。工作负载类型的介绍请参见工作负载概述。 负载名称:填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 实例数量:填写实例的数量,即工作负载Pod的数量。 容器运行时:CCE Standard集群默认使用普通运行时,CCE Turbo集群可以使用普通运行时或安全运行时。具体区别请参见安全运行时与普通运行时。 时区同步:选择是否开启时区同步。开启后容器与节点使用相同时区(时区同步功能依赖容器中挂载的本地磁盘,请勿修改删除),时区同步详细介绍请参见时区同步。 容器配置 容器信息 Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:配置容器的基本信息。 参数 说明 容器名称 为容器命名。 更新策略 镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 如果需要使用第三方镜像,请参见使用第三方镜像。 镜像版本 选择需要部署的镜像版本。 CPU配额 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 内存配额 申请:容器需要使用的内存最小值,默认512MiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 GPU配额(可选) 当集群中包含GPU节点时,才能设置GPU配额,且集群中需安装CCE AI套件(NVIDIA GPU)插件。 不限制:表示不使用GPU。 独享:单个容器独享GPU。 共享:容器需要使用的GPU百分比,例如设置为10%,表示该容器需使用GPU资源的10%。 关于如何在集群中使用GPU,请参见使用Kubernetes默认GPU调度。 NPU配额(可选) 使用NPU芯片(昇腾系列)的数量,必须为整数,且必须安装CCE AI套件(Ascend NPU)插件后才能使用。 关于如何在集群中使用NPU,请参见NPU调度。 特权容器(可选) 特权容器是指容器里面的程序具有一定的特权。 若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。 初始化容器(可选) 选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。 Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 健康检查(可选):根据需求选择是否设置存活探针、就绪探针及启动探针,详情请参见设置容器健康检查。 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。 数据存储(可选):在容器内挂载本地存储或云存储,不同类型的存储使用场景及挂载方式不同,详情请参见存储。 负载实例数大于1时,不支持挂载云硬盘类型的存储。 安全设置(可选):对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。 容器日志(可选):容器标准输出日志将默认上报至 AOM 服务,无需独立配置。您可以手动配置日志采集路径,详情请参见通过ICAgent采集容器日志(不推荐)。 如需要关闭当前负载的标准输出,您可在标签与注解中添加键为kubernetes.AOM.log.stdout,值为[]的注解,即可关闭当前负载下全部容器的标准输出。该注解的使用方法请参见表1。 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。 GPU显卡(可选):默认为不限制。当集群中存在GPU节点时,工作负载实例可以调度到指定GPU显卡类型的节点上。 服务配置(可选) 服务(Service)可为Pod提供外部访问。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以为这些Pod自动实现负载均衡。 您也可以在创建完工作负载之后再创建Service,不同类型的Service概念和使用方法请参见服务概述。 高级配置(可选) 升级策略:指定工作负载的升级方式及升级参数,支持滚动升级和替换升级,详情请参见工作负载升级策略。 调度策略:通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持负载亲和与节点亲和。 负载亲和:提供常用的负载亲和策略,快速实现负载亲和部署。 优先多可用区部署:通过设置Pod间反亲和(podAntiAffinity)实现,优先将工作负载的Pod调度到不同可用区的节点上,如集群下节点不满足多可用区,Pod将调度到不同的节点上满足高可用,如节点数小于实例数,Pod无法全部运行。 强制多可用区部署:通过设置Pod间反亲和(podAntiAffinity)实现,强制将工作负载的Pod调度到不同可用区的节点上,如集群下节点支持的可用区数量小于实例数,工作负载的Pod无法全部运行。 自定义亲和策略:根据需求自定义设置亲和与反亲和规则,详情请参见调度策略(亲和与反亲和)。 节点亲和:提供常用的负载亲和策略,快速实现负载亲和部署。 指定节点调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点,若不指定,将根据集群默认调度策略随机调度。 指定节点池调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点池,若不指定,将根据集群默认调度策略随机调度。 自定义亲和策略:根据需求自定义设置亲和与反亲和规则,详情请参见调度策略(亲和与反亲和)。 容忍策略:容忍策略与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详情请参见容忍策略。 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见标签与注解。 DNS配置:为工作负载单独配置DNS策略,详情请参见工作负载DNS配置说明。 性能管理配置:使用应用性能管理(APM)服务,为JAVA程序提供更精准的问题分析与定位,详情请参见性能管理配置(性能瓶颈分析)。 网络配置: Pod入/出口带宽限速:支持为Pod设置入/出口带宽限速,详情请参见为Pod配置QoS。 IPv6共享带宽:仅支持该功能的集群显示该选项,开启后可为Pod的IPv6双栈网卡绑定共享带宽,详情请参见为IPv6双栈网卡的Pod配置共享带宽。 单击右下角“创建工作负载”。
  • 通过kubectl命令行创建 本节以nginx工作负载为例,说明kubectl命令创建工作负载的方法。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建一个名为nginx-deployment.yaml的描述文件。其中,nginx-deployment.yaml为自定义名称,您可以随意命名。 vi nginx-deployment.yaml 描述文件内容如下。此处仅为示例,deployment的详细说明请参见kubernetes官方文档。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx #若使用“开源镜像中心”的镜像,可直接填写镜像名称;若使用“我的镜像”中的镜像,请在SWR中获取具体镜像地址。 imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret 以上yaml字段解释如表1。 表1 deployment字段详解 字段名称 字段说明 必选/可选 apiVersion 表示API的版本号。 说明: 请根据集群版本输入: 1.17及以上版本的集群中无状态应用apiVersion格式为apps/v1 1.15及以下版本的集群中无状态应用apiVersion格式为extensions/v1beta1 必选 kind 创建的对象类别。 必选 metadata 资源对象的元数据定义。 必选 name deployment的名称。 必选 spec 用户对deployment的详细描述的主体部分都在spec中给出。 必选 replicas 实例数量。 必选 selector 定义Deployment可管理的容器实例。 必选 strategy 升级类型。当前支持两种升级方式,默认为滚动升级。 RollingUpdate:滚动升级。 ReplaceUpdate:替换升级。 可选 template 描述创建的容器实例详细信息。 必选 metadata 元数据。 必选 labels metadata.labels定义容器标签。 可选 spec: containers image(必选):容器镜像名称。 imagePullPolicy(可选):获取镜像的策略,可选值包括Always(每次都尝试重新下载镜像)、Never(仅使用本地镜像)、IfNotPresent(如果本地有该镜像,则使用本地镜像,本地不存在时下载镜像),默认为Always。 name(必选):容器名称。 必选 imagePullSecrets Pull镜像时使用的secret名称。若使用私有镜像,该参数为必选。 需要Pull SWR容器镜像仓库的镜像时,参数值固定为default-secret。 当Pull第三方镜像仓库的镜像时,需设置为创建的secret名称。 可选 创建deployment。 kubectl create -f nginx-deployment.yaml 回显如下表示已开始创建deployment。 deployment "nginx" created 查看deployment状态。 kubectl get deployment deployment状态显示为Running,表示deployment已创建成功。 NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 4m5s 参数解析: NAME:工作负载名称。 READY:表示工作负载的可用状态,显示为“可用Pod个数/期望Pod个数”。 UP-TO-DATE:指当前已经完成更新的副本数。 AVAILABLE:可用的Pod个数。 AGE:已经运行的时间。 若工作负载(即deployment)需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见网络创建对应服务。
  • 通过kubectl命令行创建 本示例以nginx为例,并使用volumeClaimTemplates动态挂载云硬盘。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建一个名为nginx-statefulset.yaml的文件。 其中,nginx-statefulset.yaml为自定义名称,您可以随意命名。 vi nginx-statefulset.yaml 以下内容仅为示例,若需要了解statefulset的详细内容,请参考kubernetes官方文档。 apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: container-1 image: nginx:latest imagePullPolicy: IfNotPresent resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: - name: test readOnly: false mountPath: /usr/share/nginx/html subPath: '' imagePullSecrets: - name: default-secret dnsPolicy: ClusterFirst volumes: [] serviceName: nginx-svc replicas: 2 volumeClaimTemplates: #动态挂载云硬盘示例 - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test namespace: default annotations: everest.io/disk-volume-type: SAS # 云硬盘的类型 labels: failure-domain.beta.kubernetes.io/region: cn-north-4 #云硬盘所在的区域 failure-domain.beta.kubernetes.io/zone: cn-north-4b #云硬盘所在的可用区,必须和工作负载部署的节点可用区一致 spec: accessModes: - ReadWriteOnce # 云硬盘必须为ReadWriteOnce resources: requests: storage: 10Gi storageClassName: csi-disk #StorageClass的名称,云硬盘为csi-disk updateStrategy: type: RollingUpdate vi nginx-headless.yaml apiVersion: v1 kind: Service metadata: name: nginx-svc namespace: default labels: app: nginx spec: selector: app: nginx version: v1 clusterIP: None ports: - name: nginx targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: ClusterIP 创建工作负载以及对应headless服务。 kubectl create -f nginx-statefulset.yaml 回显如下,表示有状态工作负载(stateful)已创建成功。 statefulset.apps/nginx created kubectl create -f nginx-headless.yaml 回显如下,表示对应headless服务已创建成功。 service/nginx-svc created 若工作负载需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见网络创建对应服务。
  • 通过控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建负载”。 配置工作负载的信息。 基本信息 负载类型:选择有状态工作负载StatefulSet。工作负载类型的介绍请参见工作负载概述。 负载名称:填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 实例数量:填写实例的数量,即工作负载Pod的数量。 容器运行时:CCE Standard集群默认使用普通运行时,CCE Turbo集群可以使用普通运行时或安全运行时。具体区别请参见安全运行时与普通运行时。 时区同步:选择是否开启时区同步。开启后容器与节点使用相同时区(时区同步功能依赖容器中挂载的本地磁盘,请勿修改删除),时区同步详细介绍请参见时区同步。 容器配置 容器信息 Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:配置容器的基本信息。 参数 说明 容器名称 为容器命名。 更新策略 镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 如果需要使用第三方镜像,请参见使用第三方镜像。 镜像版本 选择需要部署的镜像版本。 CPU配额 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 内存配额 申请:容器需要使用的内存最小值,默认512MiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 GPU配额(可选) 当集群中包含GPU节点时,才能设置GPU配额,且集群中需安装CCE AI套件(NVIDIA GPU)插件。 不限制:表示不使用GPU。 独享:单个容器独享GPU。 共享:容器需要使用的GPU百分比,例如设置为10%,表示该容器需使用GPU资源的10%。 关于如何在集群中使用GPU,请参见使用Kubernetes默认GPU调度。 NPU配额(可选) 使用NPU芯片(昇腾系列)的数量,必须为整数,且必须安装CCE AI套件(Ascend NPU)插件后才能使用。 关于如何在集群中使用NPU,请参见NPU调度。 特权容器(可选) 特权容器是指容器里面的程序具有一定的特权。 若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。 初始化容器(可选) 选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。 Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 健康检查(可选):根据需求选择是否设置存活探针、就绪探针及启动探针,详情请参见设置容器健康检查。 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。 数据存储(可选):在容器内挂载本地存储或云存储,不同类型的存储使用场景及挂载方式不同,详情请参见存储。 有状态负载支持“动态挂载”云硬盘,详情请参见有状态负载动态挂载云硬盘存储及有状态负载动态挂载本地持久卷。 动态挂载通过volumeClaimTemplates字段实现,并依赖于StorageClass动态创建能力。有状态工作负载通过volumeClaimTemplates字段为每一个Pod关联了一个独有的PVC,而这个PVC又会和对应的PV绑定。因此当Pod被重新调度后,仍然能够根据该PVC名称挂载原有的数据。 负载创建完成后,动态挂载的存储不支持更新。 安全设置(可选):对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。 容器日志(可选):容器标准输出日志将默认上报至 AOM 服务,无需独立配置。您可以手动配置日志采集路径,详情请参见通过ICAgent采集容器日志(不推荐)。 如需要关闭当前负载的标准输出,您可在标签与注解中添加键为kubernetes.AOM.log.stdout,值为[]的注解,即可关闭当前负载下全部容器的标准输出。该注解的使用方法请参见表1。 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。 GPU显卡(可选):默认为不限制。当集群中存在GPU节点时,工作负载实例可以调度到指定GPU显卡类型的节点上。 实例间发现服务配置 Headless Service用于解决StatefulSet内Pod互相访问的问题,Headless Service给每个Pod提供固定的访问域名。具体请参见Headless Service。 服务配置(可选) 服务(Service)可为Pod提供外部访问。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以为这些Pod自动实现负载均衡。 您也可以在创建完工作负载之后再创建Service,不同类型的Service概念和使用方法请参见服务概述。 高级配置(可选) 升级策略:指定工作负载的升级方式及升级参数,支持滚动升级和替换升级,详情请参见工作负载升级策略。 实例管理策略(podManagementPolicy): 对于某些分布式系统来说,StatefulSet 的顺序性保证是不必要和/或者不应该的。 这些系统仅仅要求唯一性和身份标志。 有序策略:默认实例管理策略,有状态负载会逐个的、按顺序的进行部署、删除、伸缩实例, 只有前一个实例部署Ready或者删除完成后,有状态负载才会操作后一个实例。 并行策略:支持有状态负载并行创建或者删除所有的实例,有状态负载发生变更时立刻在实例上生效。 调度策略:通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持负载亲和与节点亲和。 负载亲和:提供常用的负载亲和策略,快速实现负载亲和部署。 优先多可用区部署:通过设置Pod间反亲和(podAntiAffinity)实现,优先将工作负载的Pod调度到不同可用区的节点上,如集群下节点不满足多可用区,Pod将调度到不同的节点上满足高可用,如节点数小于实例数,Pod无法全部运行。 强制多可用区部署:通过设置Pod间反亲和(podAntiAffinity)实现,强制将工作负载的Pod调度到不同可用区的节点上,如集群下节点支持的可用区数量小于实例数,工作负载的Pod无法全部运行。 自定义亲和策略:根据需求自定义设置亲和与反亲和规则,详情请参见调度策略(亲和与反亲和)。 节点亲和:提供常用的负载亲和策略,快速实现负载亲和部署。 指定节点调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点,若不指定,将根据集群默认调度策略随机调度。 指定节点池调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点池,若不指定,将根据集群默认调度策略随机调度。 自定义亲和策略:根据需求自定义设置亲和与反亲和规则,详情请参见调度策略(亲和与反亲和)。 容忍策略:容忍策略与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详情请参见容忍策略。 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见标签与注解。 DNS配置:为工作负载单独配置DNS策略,详情请参见工作负载DNS配置说明。 性能管理配置:使用应用性能管理(APM)服务,为JAVA程序提供更精准的问题分析与定位,详情请参见性能管理配置(性能瓶颈分析)。 网络配置: Pod入/出口带宽限速:支持为Pod设置入/出口带宽限速,详情请参见为Pod配置QoS。 是否开启固定IP:仅支持该功能的集群显示该选项,开启后可设置Pod IP的回收时间间隔,详情请参见为Pod配置固定IP。 IPv6共享带宽:仅支持该功能的集群显示该选项,开启后可为Pod的IPv6双栈网卡绑定共享带宽,详情请参见为IPv6双栈网卡的Pod配置共享带宽。 单击右下角“创建工作负载”。
  • 约束与限制 当您删除或扩缩有状态负载时,为保证数据安全,系统并不会删除它所关联的存储卷。 当您删除一个有状态负载时,为实现有状态负载中的Pod可以有序停止,请在删除之前将副本数缩容到0。 您需要在创建有状态负载的同时,创建一个Headless Service,用于解决有状态负载Pod互相访问的问题,详情请参见Headless Service。 节点不可用时,Pod状态变为“未就绪”,此时需要手工删除有状态工作负载的Pod,Pod实例才会迁移到正常节点上。
  • 申请与限制 在CPU配额和内存配额设置中,申请与限制的含义如下: 申请(Request):根据申请值调度该实例到满足条件的节点去部署工作负载。 限制(Limit):根据限制值限制工作负载使用的资源。 如果实例运行所在的节点具有足够的可用资源,实例可以使用超出申请的资源量,但不能超过限制的资源量。 例如,如果您将实例的内存申请值为1GiB、限制值为2GiB,而该实例被调度到一个具有8GiB CPU的节点上,且该节点上没有其他实例运行,那么该实例在负载压力较大的情况下可使用超过1GiB的内存,但内存使用量不得超过2GiB。若容器中的进程尝试使用超过2GiB的资源时,系统内核将会尝试将进程终止,出现内存不足(OOM)错误。 创建工作负载时,建议设置CPU和内存的资源上下限。同一个节点上部署的工作负载,对于未设置资源上下限的工作负载,如果其异常资源泄露会导致其它工作负载分配不到资源而异常。未设置资源上下限的工作负载,工作负载监控信息也会不准确。
  • 通过控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建负载”。 配置工作负载的信息。 基本信息 负载类型:选择守护进程DaemonSet。工作负载类型的介绍请参见工作负载概述。 负载名称:填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 容器运行时:CCE Standard集群默认使用普通运行时,CCE Turbo集群可以使用普通运行时或安全运行时。具体区别请参见安全运行时与普通运行时。 时区同步:选择是否开启时区同步。开启后容器与节点使用相同时区(时区同步功能依赖容器中挂载的本地磁盘,请勿修改删除),时区同步详细介绍请参见时区同步。 容器配置 容器信息 Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:配置容器的基本信息。 参数 说明 容器名称 为容器命名。 更新策略 镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 如果需要使用第三方镜像,请参见使用第三方镜像。 镜像版本 选择需要部署的镜像版本。 CPU配额 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 内存配额 申请:容器需要使用的内存最小值,默认512MiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 GPU配额(可选) 当集群中包含GPU节点时,才能设置GPU配额,且集群中需安装CCE AI套件(NVIDIA GPU)插件。 不限制:表示不使用GPU。 独享:单个容器独享GPU。 共享:容器需要使用的GPU百分比,例如设置为10%,表示该容器需使用GPU资源的10%。 关于如何在集群中使用GPU,请参见使用Kubernetes默认GPU调度。 NPU配额(可选) 使用NPU芯片(昇腾系列)的数量,必须为整数,且必须安装CCE AI套件(Ascend NPU)插件后才能使用。 关于如何在集群中使用NPU,请参见NPU调度。 特权容器(可选) 特权容器是指容器里面的程序具有一定的特权。 若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。 初始化容器(可选) 选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。 Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 健康检查(可选):根据需求选择是否设置存活探针、就绪探针及启动探针,详情请参见设置容器健康检查。 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。 数据存储(可选):在容器内挂载本地存储或云存储,不同类型的存储使用场景及挂载方式不同,详情请参见存储。 安全设置(可选):对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。 容器日志(可选):容器标准输出日志将默认上报至 AOM 服务,无需独立配置。您可以手动配置日志采集路径,详情请参见通过ICAgent采集容器日志(不推荐)。 如需要关闭当前负载的标准输出,您可在标签与注解中添加键为kubernetes.AOM.log.stdout,值为[]的注解,即可关闭当前负载下全部容器的标准输出。该注解的使用方法请参见表1。 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。 GPU显卡(可选):默认为不限制。当集群中存在GPU节点时,工作负载实例可以调度到指定GPU显卡类型的节点上。 服务配置(可选) 服务(Service)可为Pod提供外部访问。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以为这些Pod自动实现负载均衡。 您也可以在创建完工作负载之后再创建Service,不同类型的Service概念和使用方法请参见服务概述。 高级配置(可选) 升级策略:指定工作负载的升级方式及升级参数,支持滚动升级和替换升级,详情请参见工作负载升级策略。 调度策略:通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持节点亲和。 节点亲和:提供常用的负载亲和策略,快速实现负载亲和部署。 指定节点调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点,若不指定,将根据集群默认调度策略随机调度。 指定节点池调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点池,若不指定,将根据集群默认调度策略随机调度。 自定义亲和策略:根据需求自定义设置亲和与反亲和规则,详情请参见调度策略(亲和与反亲和)。 容忍策略:容忍策略与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详情请参见容忍策略。 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见标签与注解。 DNS配置:为工作负载单独配置DNS策略,详情请参见工作负载DNS配置说明。 性能管理配置:使用应用性能管理(APM)服务,为JAVA程序提供更精准的问题分析与定位,详情请参见性能管理配置(性能瓶颈分析)。 网络配置: Pod入/出口带宽限速:支持为Pod设置入/出口带宽限速,详情请参见为Pod配置QoS。 IPv6共享带宽:仅支持该功能的集群显示该选项,开启后可为Pod的IPv6双栈网卡绑定共享带宽,详情请参见为IPv6双栈网卡的Pod配置共享带宽。 单击右下角“创建工作负载”。
  • 通过kubectl命令行创建 本节以nginx工作负载为例,说明kubectl命令创建工作负载的方法。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建一个名为nginx-daemonset.yaml的描述文件。其中,nginx-daemonset.yaml为自定义名称,您可以随意命名。 vi nginx-daemonset.yaml 描述文件内容如下。此处仅为示例,daemonset的详细说明请参见kubernetes官方文档。 apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonset labels: app: nginx-daemonset spec: selector: matchLabels: app: nginx-daemonset template: metadata: labels: app: nginx-daemonset spec: nodeSelector: # 节点选择,当节点拥有daemon=need时才在节点上创建Pod daemon: need containers: - name: nginx-daemonset image: nginx:alpine resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi imagePullSecrets: - name: default-secret 这里可以看出没有Deployment或StatefulSet中的replicas参数,因为是每个节点固定一个。 Pod模板中有个nodeSelector,指定了只在有“daemon=need”的节点上才创建Pod,DaemonSet只在指定标签的节点上创建Pod。如果需要在每一个节点上创建Pod可以删除该标签。 创建daemonset。 kubectl create -f nginx-daemonset.yaml 回显如下表示已开始创建daemonset。 daemonset.apps/nginx-daemonset created 查看daemonset状态。 kubectl get ds $ kubectl get ds NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nginx-daemonset 1 1 0 1 0 daemon=need 116s 若工作负载需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见网络创建对应服务。
  • 操作场景 云容器引擎(CCE)提供多种类型的容器部署和管理能力,支持对容器工作负载的部署、配置、监控、扩容、升级、卸载、服务发现及负载均衡等特性。 其中守护进程集(DaemonSet)可以确保全部(或者某些)节点上仅运行一个Pod实例,当有节点加入集群时,也会为其新增一个 Pod 。 当有节点从集群移除时,这些Pod也会被回收。删除 DaemonSet 将会删除它创建的所有Pod。 使用DaemonSet的一些典型用法: 运行集群存储daemon,例如在每个节点上运行glusterd、ceph。 在每个节点上运行日志收集daemon,例如fluentd、logstash。 在每个节点上运行监控daemon,例如Prometheus Node Exporter、collectd、Datadog代理、New Relic代理,或Ganglia gmond。 一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个DaemonSet。一个稍微复杂的用法是为同一种守护进程部署多个DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU要求。
  • hostNetwork使用注意事项 Pod直接使用主机的网络会占用宿主机的端口,Pod的IP就是宿主机的IP,使用时需要考虑是否与主机上的端口冲突,因此一般情况下除非您知道某个特定应用需要占用宿主机上的特定端口,否则不建议使用主机网络。 由于Pod使用主机网络,访问Pod需要直接通过节点端口,因此要注意放通节点安全组端口,否则会出现访问不通的情况。 另外由于占用主机端口,使用Deployment部署hostNetwork类型Pod时,要注意Pod的副本数不要超过节点数量,否则会导致一个节点上调度了多个Pod,Pod启动时端口冲突无法创建。例如上面例子中的nginx,如果服务数为2,并部署在只有1个节点的集群上,就会有一个Pod无法创建,查询Pod日志会发现是由于端口占用导致nginx无法启动。 请避免在同一个节点上调度多个使用主机网络的Pod,否则在创建ClusterIP类型的Service访问Pod时,会出现访问ClusterIP不通的情况。 $ kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/2 2 1 67m $ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-6fdf99c8b-6wwft 1/1 Running 0 67m nginx-6fdf99c8b-rglm7 0/1 CrashLoopBackOff 13 44m $ kubectl logs nginx-6fdf99c8b-rglm7 /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2022/05/11 07:18:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to [::]:80 failed (98: Address in use) nginx: [emerg] bind() to [::]:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to [::]:80 failed (98: Address in use) nginx: [emerg] bind() to [::]:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to [::]:80 failed (98: Address in use) nginx: [emerg] bind() to [::]:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to [::]:80 failed (98: Address in use) nginx: [emerg] bind() to [::]:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: bind() to [::]:80 failed (98: Address in use) nginx: [emerg] bind() to [::]:80 failed (98: Address in use) 2022/05/11 07:18:11 [emerg] 1#1: still could not bind() nginx: [emerg] still could not bind()
  • 常见问题处理 插件中除log-operator外组件均未就绪,且出现异常事件“实例挂卷失败”。 解决方案:请查看log-operator日志,安装插件时,其余组件所需的配置文件需要log-operator生成,log-operator生成配置出错,会导致所有组件无法正常启动。 日志信息如下: MountVolume.SetUp failed for volume "otel-collector-config-vol":configmap "log-agent-otel-collector-config" not found log-operator标准输出报错:Failed to create log group, the number of log groups exceeds the quota 示例: 2023/05/05 12:17:20.799 [E] call 3 times faild, resion: create group failed, projectID: xxx, groupName: k8s-log-xxx, err: create groups status code: 400, response: {"error_code":"LTS.0104","error_msg":"Failed to create log group, the number of log groups exceeds the quota"}, url: https://lts.cn-north-4.myhuaweicloud.com/v2/xxx/groups, process will retry after 45s 解决方案:LTS日志组有配额限制,如果出现该报错,请前往LTS下删除部分无用的日志组。限制详情见:日志组。 配置了容器文件路径采集,采集的目录不是挂载到容器内的,且节点容器引擎为docker,采集不到日志。 解决方案: 请检查工作负载所在节点的容器存储模式是否为Device Mapper,Device Mapper不支持采集容器内日志(创建日志策略时已提示此限制,如图7所示)。检查方法如下: 进入业务工作负载所在节点。 执行docker info | grep "Storage Driver"。 若返回的Storage Driver值为Device Mapper,则该日志无法采集。 图7 创建日志策略 日志无法上报,otel组件标准输出报错:log's quota has full 解决方案: 云日志服务(LTS)有免费赠送的额度,超出后将收费,报错说明免费额度已用完,如果需要继续使用,请前往云日志服务控制台“配置中心”,打开“超额继续采集日志”开关。 图8 配额设置 采集容器内日志,且采集目录配置了通配符,日志无法采集。 排查方法:请检查工作负载配置中Volume挂载情况,如果业务容器的数据目录是通过数据卷(Volume)挂载的,插件不支持采集它的父目录,需设置采集目录为完整的数据目录。例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log或/var/log/*将采集不到该目录下的日志,需设置采集目录为/var/log/service。 解决方案:若日志生成目录为/application/logs/{应用名}/*.log,建议工作负载挂载Volume时,直接挂载/application/logs,日志策略中配置采集路径为/application/logs/*/*.log
  • 通过kubectl使用本地临时卷 请参见通过kubectl连接集群配置kubectl命令。 创建并编辑nginx-emptydir.yaml文件。 vi nginx-emptydir.yaml YAML文件内容如下: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-emptydir namespace: default spec: replicas: 2 selector: matchLabels: app: nginx-emptydir template: metadata: labels: app: nginx-emptydir spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: vol-emptydir # 卷名称,需与volumes字段中的卷名称对应 mountPath: /tmp # emptyDir挂载路径 imagePullSecrets: - name: default-secret volumes: - name: vol-emptydir # 卷名称,可自定义 emptyDir: medium: LocalVolume # emptyDir磁盘介质设置为LocalVolume,表示使用本地临时卷 sizeLimit: 1Gi # 卷容量大小 创建工作负载。 kubectl apply -f nginx-emptydir.yaml
  • 通过控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建负载”。 配置工作负载的信息。 基本信息 负载类型:选择任务Job。工作负载类型的介绍请参见工作负载概述。 负载名称:填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 实例数量:填写实例的数量,即工作负载Pod的数量。 容器运行时:CCE Standard集群默认使用普通运行时,CCE Turbo集群可以使用普通运行时或安全运行时。具体区别请参见安全运行时与普通运行时。 容器配置 容器信息 Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:配置容器的基本信息。 参数 说明 容器名称 为容器命名。 更新策略 镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 如果需要使用第三方镜像,请参见使用第三方镜像。 镜像版本 选择需要部署的镜像版本。 CPU配额 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 内存配额 申请:容器需要使用的内存最小值,默认512MiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。 GPU配额(可选) 当集群中包含GPU节点时,才能设置GPU配额,且集群中需安装CCE AI套件(NVIDIA GPU)插件。 不限制:表示不使用GPU。 独享:单个容器独享GPU。 共享:容器需要使用的GPU百分比,例如设置为10%,表示该容器需使用GPU资源的10%。 关于如何在集群中使用GPU,请参见使用Kubernetes默认GPU调度。 NPU配额(可选) 使用NPU芯片(昇腾系列)的数量,必须为整数,且必须安装CCE AI套件(Ascend NPU)插件后才能使用。 关于如何在集群中使用NPU,请参见NPU调度。 特权容器(可选) 特权容器是指容器里面的程序具有一定的特权。 若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。 初始化容器(可选) 选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。 Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。 数据存储(可选):在容器内挂载本地存储或云存储,不同类型的存储使用场景及挂载方式不同,详情请参见存储。 负载实例数大于1时,不支持挂载云硬盘类型的存储。 容器日志(可选):容器标准输出日志将默认上报至 AOM 服务,无需独立配置。您可以手动配置日志采集路径,详情请参见通过ICAgent采集容器日志(不推荐)。 如需要关闭当前负载的标准输出,您可在标签与注解中添加键为kubernetes.AOM.log.stdout,值为[]的注解,即可关闭当前负载下全部容器的标准输出。该注解的使用方法请参见表1。 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。 GPU显卡(可选):默认为不限制。当集群中存在GPU节点时,工作负载实例可以调度到指定GPU显卡类型的节点上。 高级配置(可选) 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见标签与注解。 任务设置: 并行数:任务负载执行过程中允许同时创建的最大实例数,并行数应不大于实例数。 超时时间(秒):当任务执行超出该时间时,任务将会被标识为执行失败,任务下的所有实例都会被删除。为空时表示不设置超时时间。 完成模式: 非索引:当执行成功的Pod数达到实例数时, Job执行成功。Job中每一个Pod都是同质的,Pod之间是独立无关。 索引:系统会为每个Pod分配索引值,取值为 0 到实例数-1。每个分配了索引的Pod都执行成功,则Job执行成功。索引模式下,Job中的Pod命名遵循$(job-name)-$(index)模式。 挂起任务:默认任务创建后被立即执行。选择挂起任务后,任务创建后处于挂起状态;将其关闭后,任务继续执行。 网络配置: Pod入/出口带宽限速:支持为Pod设置入/出口带宽限速,详情请参见为Pod配置QoS。 IPv6共享带宽:仅支持该功能的集群显示该选项,开启后可为Pod的IPv6双栈网卡绑定共享带宽,详情请参见为IPv6双栈网卡的Pod配置共享带宽。 单击右下角“创建工作负载”。
  • 操作场景 普通任务是一次性运行的短任务,部署完成后即可执行。正常退出(exit 0)后,任务即执行完成。 普通任务是用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、Statefulset)的主要区别是: 批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的spec.completions策略而不同,即: 单Pod型任务有一个Pod成功就标志完成。 定数成功型任务保证有N个任务全部成功。 工作队列型任务根据应用确认的全局成功而标志成功。
共100000条