华为云用户手册

  • 使用示例 KEY-LIST类型的使用示例 CREATE TABLE tbl_key_list ( col1 INT, col2 INT, col3 varchar(20), col4 DATE ) PARTITION BY KEY(col1) SUBPARTITION BY LIST(col2) ( PARTITION dp0 ( SUBPARTITION p0 VALUES in (1, 2), SUBPARTITION p1 VALUES in (3, 4), SUBPARTITION p2 VALUES in (5, 6) ), PARTITION dp1 ( SUBPARTITION p3 VALUES in (1, 2), SUBPARTITION p4 VALUES in (3, 4), SUBPARTITION p5 VALUES in (5, 6) ), PARTITION dp2 ( SUBPARTITION p6 VALUES in (1, 2), SUBPARTITION p7 VALUES in (3, 4), SUBPARTITION p8 VALUES in (5, 6) ) );
  • 语法 创建一个或多个KEY-LIST分区表,其中每个分区可能有一个或一个以上的子分区。 CREATE TABLE [ schema. ]table_name table_definition PARTITION BY [LINEAR] KEY(expr) SUBPARTITION BY LIST {(expr) | COLUMNS(column_list)} (partition_definition [, partition_definition] ...); 其中,partition_definition为: PARTITION partition_name (subpartition_definition [, subpartition_definition] ...) subpartition_definition为: SUBPARTITION subpartition_name VALUES IN (value_list) 表1 参数说明 参数名称 描述 table_name 要创建的表名称。 expr 分区字段表达式,目前只支持INT类型,不支持字符类型。 column_list LIST COLUMNS的情况下使用,分区字段列表,不支持表达式。 value_list 字段的值。 partition_name 分区名称,同一个表中不可重复。 subpartition_name 子分区名称,同一个表中不可重复。
  • 使用示例 RANGE-LIST类型的使用示例 CREATE TABLE tbl_range_list (col1 INT, col2 INT, col3 varchar(20)) PARTITION BY RANGE(col1) SUBPARTITION BY LIST(col2) ( PARTITION m1 VALUES LESS THAN(1000) ( SUBPARTITION p0 VALUES in (1, 2), SUBPARTITION p1 VALUES in (3, 4), SUBPARTITION p2 VALUES in (5, 6) ), PARTITION m2 VALUES LESS THAN(2000) ( SUBPARTITION p3 VALUES in (1, 2), SUBPARTITION p4 VALUES in (3, 4), SUBPARTITION p5 VALUES in (5, 6) ), PARTITION m3 VALUES LESS THAN(MAXVALUE) ( SUBPARTITION p6 VALUES in (1, 2), SUBPARTITION p7 VALUES in (3, 4), SUBPARTITION p8 VALUES in (5, 6) ) ); RANGE COLUMNS-LIST类型的使用示例 CREATE TABLE tbl_range_columns_list ( col1 INT, col2 INT, col3 varchar(20), col4 DATE ) PARTITION BY RANGE COLUMNS(col4) SUBPARTITION BY LIST(col1) ( PARTITION dp1 VALUES LESS THAN('2023-01-01')( SUBPARTITION p0 VALUES in (1, 2), SUBPARTITION p1 VALUES in (3, 4), SUBPARTITION p2 VALUES in (5, 6) ), PARTITION dp2 VALUES LESS THAN('2024-01-01')( SUBPARTITION p3 VALUES in (1, 2), SUBPARTITION p4 VALUES in (3, 4), SUBPARTITION p5 VALUES in (5, 6) ), PARTITION dp3 VALUES LESS THAN('2025-01-01')( SUBPARTITION p6 VALUES in (1, 2), SUBPARTITION p7 VALUES in (3, 4), SUBPARTITION p8 VALUES in (5, 6) ) );
  • 语法 创建一个或多个RANGE-LIST分区表,其中每个分区可能有一个或一个以上的子分区。 CREATE TABLE ... PARTITION BY RANGE {(expr) | COLUMNS(column_list)} SUBPARTITION BY LIST {(expr) | COLUMNS(column_list)} [(partition_definition [, partition_definition] ...)]; 其中,partition_definition为: PARTITION partition_name VALUES LESS THAN {(value | value_list) | MAXVALUE} [(subpartition_definition [, subpartition_definition] ...)] subpartition_definition为: SUBPARTITION subpartition_name VALUES IN {(value | value_list)} 表1 参数说明 参数名称 描述 expr 分区字段表达式。目前只支持INT类型,不支持字符类型。 column_list RANGE COLUMNS的情况下使用。分区字段列表,不支持表达式,可以支持多列。 value 分区边界值。 value_list RANGE COLUMNS的情况下使用,多个字段的边界值。 MAXVALUE 最大值。 partition_name 分区名称,同一个表中不可重复。 subpartition_name 子分区名称, 同一个表中不可重复。
  • 语法 创建一个或多个HASH-KEY分区表,其中每个分区可能有一个或一个以上的子分区。 CREATE TABLE [ schema. ]table_name table_definition PARTITION BY [LINEAR] HASH(expr) [PARTITIONS num] SUBPARTITION BY [LINEAR] KEY(expr) [SUBPARTITIONS sub_num] (partition_definition [, partition_definition] ...); 其中,partition_definition为: PARTITION partition_name (subpartition_definition [, subpartition_definition] ...) subpartition_definition为: SUBPARTITION subpartition_name 表1 参数说明 参数名称 描述 table_name 要创建的表名称。 expr 分区字段表达式,目前只支持INT类型,不支持字符类型。 partition_name 分区名称,同一个表中不可重复。 subpartition_name 子分区名称,同一个表中不可重复。
  • 语法 创建一个或多个HASH-HASH分区表,其中每个分区可能有一个或一个以上的子分区。 CREATE TABLE [ schema. ]table_name table_definition PARTITION BY [LINEAR] HASH(expr) [PARTITIONS num] SUBPARTITION BY [LINEAR] HASH(expr) [SUBPARTITIONS sub_num] [partition_definition [, partition_definition] ...]; 其中,partition_definition为: PARTITION partition_name (subpartition_definition [, subpartition_definition] ...) subpartition_definition为: SUBPARTITION subpartition_name 表1 参数说明 参数名称 描述 table_name 要创建的表名称。 expr 分区字段表达式,目前只支持INT类型,不支持字符类型。 num 用于分区是HASH或者KEY类型的分区表,来指定分区个数。 sub_num 用于二级分区是HASH或者KEY类型的分区表,来指定单个分区的子分区的个数。 partition_name 分区名称,同一个表中不可重复。 subpartition_name 子分区名称, 同一个表中不可重复。
  • 使用示例 HASH-HASH类型的使用示例 CREATE TABLE tbl_hash_hash ( col1 INT, col2 INT, col3 varchar(20), col4 DATE ) PARTITION BY HASH(col1) PARTITIONS 9 SUBPARTITION BY HASH(col2) SUBPARTITIONS 3;
  • 规则8:SELECT语句中拼接的参数值请谨慎使用入参变量 SELECT语句中,拼接的参数值请谨慎使用入参变量,以免引起SQL注入的风险。 错误代码示例 import * as db from 'db'; let errorDemo = "select id,name from object_demo where id = "; errorDemo += input.parameter let errorDemoResult = db.sql().exec(errorDemo) 其中,“input.parameter”为脚本入参。 正确代码示例 import * as db from 'db'; let correctDemo = "select id,name from object_demo where id = ?"; let correctDemoResult = db.sql().exec(correctDemo, { params: [input.parameter] }) 其中,“input.parameter”为脚本入参。
  • 规则7:SELECT语句中严禁使用“select from...”形式查询语句 严禁使用“select ...”形式查询语句,请指出select的具体字段。 错误代码示例 import * as db from 'db'; let errorDemo = db.sql().exec("select from object_demo where object_name = 'test'") 正确代码示例 import * as db from 'db'; let correctDemo = db.sql().exec("select id, object_type from object_demo where object_name = 'test'")
  • 规则10:SELECT语句中谨慎使用order by SELECT语句中,请谨慎使用order by。如果需要使用order by,请为排序字段增加索引,以提高查询效率。如果无法增加索引,需要关注是否存在查询性能低下的风险。 错误代码示例 import * as db from 'db'; let errorDemo = db.sql().exec("select object_name from object_demo where object_id = 'A' Orde by createdDate") 表“object_demo”中的“createdDate”,并没有创建索引。 正确代码示例 import * as db from 'db'; let correctDemo = db.sql().exec("select object_name from object_demo where id = 'A' Order by createdDate") “object_demo”中的“createdDate”,创建了索引。
  • 规则4:SELECT语句中查询字段不在表的索引库中 如果SELECT语句where条件中,查询字段并未创建索引,请判断该字段是否需要创建索引,以提高代码查询效率。 错误代码示例 import * as db from 'db'; let errorDemo = db.sql().exec("select object_name from object_demo where object_id = ?") 表“object_demo”中的“object_id”并没有创建索引。 正确代码示例 import * as db from 'db'; let correctDemo = db.sql().exec("select object_name from object_demo where id = ?") 表“object_demo”中的“id”创建了索引。
  • 规则6:SELECT语句中聚集函数必须增加别名 SELECT语句中,聚合函数必须使用别名方式存储查询结果,以免因聚合函数返回的结果不一致,导致存在兼容性问题。 错误代码示例 import * as db from 'db'; let errorDemo = db.sql().exec("select count(*) from object_demo where object_name = 'A'") 正确代码示例 import * as db from 'db'; let correctDemo = db.sql().exec("select count(*) as count from object_demo where object_name = 'A'") 推荐代码示例 ***聚合函数示例 **** select count(*) as count_res, select max(*) as max_res, select min(*) as min_res, select avg(*) as avg_res, select sum(*) as sum_res
  • 报表概述 AstroZero对内部数据提供了一种汇总方式的视图,即为报表。利用报表功能,可以让数据进行可视化的展示,并进行分析与洞察,更好地了解业务现存的问题与机遇。 AstroZero提供报表构建器,让您完成报表的开发。报表构建器由如下两个主要模块组成。 报表 报表定义了报表数据来源于哪些对象,以及对象的连接关系,支持创建一个带有多个对象连接起来的汇总报表,不必局限于单个对象。同时支持对已有的原始记录数据,进行归类、筛选、分组、公式计算以及数据汇总。 仪表板 仪表板是多张报表的可视化集合。通过仪表板,可以对一个主题对多张报表进行汇总,并以图表化的方式呈现。 报表构建器中的报表和仪表板既可以单独使用,也可以联合使用。仪表板则提供了丰富的图表功能,如下图所示。仪表板能够让用户高效地查看报表数据,有效洞察出当前系统存在的问题和机遇。 图1 仪表盘 在实际的应用开发过程中,需要先利用报表Widget创建一个报表展示页面,再调用本章节介绍的AstroZero创建报表或仪表板。 父主题: 报表和仪表板
  • 在脚本中调用连接器 在脚本中,调用已创建的连接器,实现与SMTP的对接。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图6 新建一个空白脚本 在脚本编辑器中,输入如下代码。 // 导入连接器 import * as connector from 'connector'; //新建SMTP邮件连接器,第一个参数固定是emailsmtp,第二个参数是连接器的名称 let client = connector.newClient("emailsmtp","命名空间__smtp01"); //构建请求消息头,包括收件人地址、邮件主题、邮件正文(主题和正文不能同时为空) //按内容发送 let req ={"address":"test@example.com","subject":"SMTP功能验证-脚本","body":"使用SMTP发送邮件"}; //按模板发送,如果有template模板参数,则主题和正文配置无效,按邮件模板中的内容发送 //let req={"address":"test@example.com","template":"smtptt1."} //发送邮件,其中第一个参数不用填写,第二个参数为消息体 let resp = client.invoke("",req); 其中,connector.newClient中“命名空间__smtp01”为连接器的名称,“address”为收件人,“subject”为主题,“body”为邮件内容。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,执行脚本。 2中已设置入参,故此处不需要再设置,直接单击测试窗口右上角的。 检查收件人是否收到邮件。 收到邮件,表示成功调用连接器,如图7。 图7 接收邮件内容 单击脚本编辑器页面上方的,启用脚本。
  • 删除事件 事件不再使用时,可通过删除功能,将事件从应用中删除,避免占用账号的资源配额。 参考登录AstroZero新版应用设计器中操作,登录应用设计器。 在左侧导航栏中,选择“数据”。 将鼠标放在对应的事件上,单击,选择“删除”。 在弹出的确认框中,勾选“同时删除资源中的记录?”,单击“确认”。 删除事件时,如果不勾选“同时删除资源中的记录?”,仅会删除该事件,使用该事件的功能模块不会受到影响可正常使用。
  • 克隆事件 事件创建后,支持将事件克隆到当前应用中。例如,应用A中存在两个或多个功能相似的事件,此时可基于已创建的事件克隆出一个新事件,基于克隆后的事件进行修改,减少重复创建的操作。 参考登录AstroZero新版应用设计器中操作,登录应用设计器。 在左侧导航栏中,选择“数据”。 将鼠标放在对应的事件上,单击,选择“克隆”。 设置事件的唯一标识,单击“确认”。 克隆成功后,在事件目录下,可查看到克隆成功的事件。
  • 移动事件 事件创建完成后,支持将事件移动到拥有开发权限的应用中。例如,A应用中创建的事件,在B应用中也会用到,为避免多次重复创建,可以将A中的事件先克隆,再移动到B应用中。 参考登录AstroZero新版应用设计器中操作,登录应用设计器。 在左侧导航栏中,选择“数据”。 将鼠标放在对应的事件上,单击,选择“移动”。 在移动到其他应用中,选择待移动的元素,单击“下一步”。 选择事件待移动到的应用,单击“确认”。 只支持移动到有开发权限的应用下。
  • 什么是视图? 视图是业务数据在不同场景的展示页面,其功能是根据不同的用户角色或不同的业务场景,展现出不同的目标数据。AstroZero零代码中的每个工作表默认都会存在一个名叫“全部”的表格视图,该视图会显示所有的数据。一个表单中,可以包含多个视图,同一个表单中的所有视图共用一套数据,如果数据被修改,则该数据所在的所有视图中也会同步修改。 图5 应用与表单、视图之间的关系 例如,某点餐收集应用,按照部门点餐的情况,为每个部门各建立一个视图,如A部门点餐收集、B部门点餐收集、C部门点餐收集。在视图里(编辑视图功能)筛选出对应部门的信息,便于订餐员快速管理。 图6 逻辑视图
  • 什么是表单? 表单由文本框、单选、多选和下拉列表等组件构成,用于用户填报提交数据,并收集数据的工具。一个应用中,可以创建一个或多个表单,一个表单管理一类数据,多个表单共同组成了一个应用。 在AstroZero零代码平台中,数据的收集和录入都需要对应的工作表,如AstroZero零代码平台“新手指引”应用由“Hi,小伙伴”、“新手指引”、“试试问卷”、“试试小订餐”、“试试设备故障管理”和“期待你的应用哦”六张表单组成。 图3 表单
  • 安全组规则修改(可选) 该解决方案使用22端口用来远程登录弹性云服务器 E CS ,默认对该方案创建的VPC子网网段放开,请参考修改安全组规则,配置IP地址白名单,以便能正常访问服务。 安全组实际是网络流量访问策略,包括网络流量入方向规则和出方向规则,通过这些规则为安全组内具有相同保护需求并且相互信任的云服务器、云容器、云数据库等实例提供安全保护。 如果您的实例关联的安全组策略无法满足使用需求,比如需要添加、修改、删除某个TCP端口,请参考以下内容进行修改。 添加安全组规则:根据业务使用需求需要开放某个TCP端口,请参考添加安全组规则添加入方向规则,打开指定的TCP端口。 修改安全组规则:安全组规则设置不当会造成严重的安全隐患。您可以参考修改安全组规则,来修改安全组中不合理的规则,保证云服务器等实例的网络安全。 删除安全组规则:当安全组规则入方向、出方向源地址/目的地址有变化时,或者不需要开放某个端口时,您可以参考删除安全组规则进行安全组规则删除。
  • 资源和成本规划 该解决方案主要部署如下资源,不同产品的花费仅供参考,实际以收费账单为准,具体请参考华为云官网价格: 表1 资源和成本规划(包年包月) 华为云服务 配置示例 每月预估花费 弹性云服务器 ECS 区域:华北-北京四 计费模式:包年包月 规格:X86计算 | ECS | s6.large.2 | 2vCPUs | 4GiB 镜像:CentOS 7.8 64bit 系统盘:高IO | 40GB 数据盘:通用型SSD | 100GB 购买时长:1个月 购买量:1 236.20元 弹性公网IP EIP 区域:华北-北京四 计费模式:包年包月 线路:全动态BGP 公网带宽:按带宽计费 带宽大小:5Mbit/s 购买时长:1个月 购买量:1 115.00元 合计 351.20 元 表2 资源和成本规划(按需计费) 华为云服务 计费说明 每月花费 弹性云服务器 按需计费:0.48/小时 区域:华北-北京四 计费模式:按需计费 规格:X86计算 | ECS | s6.large.2 | 2vCPUs | 4GiB 镜像:CentOS 7.8 64bit 系统盘:高IO | 40GB 数据盘:通用型SSD | 100GB 购买时长:1个月 购买量:1 345.60元 弹性公网IP 按需计费(按带宽计费):0.34元/5M/小时 区域:华北-北京四 计费模式:按带宽计费 线路:全动态BGP 公网带宽:按带宽计费 带宽大小:5Mbit/s 购买时长:1个月 购买量:1 244.80元 合计 590.40元
  • 操作步骤 下载ucs-ctl二进制工具,放到任一台本地集群的管控节点/root/ucs目录下。 将所有节点密码信息记录到表格中,并保存到二进制所在节点/root/ucs/update_cert.csv。格式请参考表1。 表1 表格模板 字段 说明 Node IP 必填,节点IP地址 Node Role 必填,节点角色(选填master/node) User 必填,节点登录用户 Password 选填,节点登录密码 Auth Type 选填,节点认证类型(选填password/key) Key Path 选填,节点登录密钥路径 样例如下: Node IP,Node Role,User,Password,Auth Type,Key Path 192.168.0.145,master,root,xxx,password, 192.168.0.225,master,root,xxx,password, 192.168.0.68,master,root,xxx,password, 192.168.0.89,node,root,xxx,password, 导出环境变量 export CUSTOM_DOMAIN={ucs_endpoint},10.247.0.1 其中ucs_endpoint为server访问地址,可通过以下方式获取。 cat /var/paas/srv/kubernetes/kubeconfig | grep server 执行证书更新。 cd /root/ucs ./ucs-ctl kcm update-cert {cluster_name} -c update_cert.csv 失败后重试。 ./ucs-ctl kcm update-cert {cluster_name} -c update_cert.csv -r 失败后回滚。 ./ucs-ctl kcm rollback-cert {cluster_name} -c update_cert.csv
  • 处理手段 可执行如下操作进行资源残留清理,并在清理后重新开启监控。 kubectl delete ns monitoring kubectl delete ClusterRole cluster-problem-detector custom-metrics-resource-aggregated-reader event-exporter prometheus-operator prometheus-server ucsaddon-cie-collector-kube-state-metrics kubectl delete ClusterRoleBinding ucsaddon-cie-collector-kube-state-metrics cluster-problem-detector event-exporter prometheus-operator prometheus-server kubectl delete apiservice v1beta1.custom.metrics.k8s.io
  • 如何获取访问密钥AK/SK? 在注册多云集群时,您需要获取访问密钥AK/SK(Access Key ID/Secret Access Key),以便在AWS账户中创建与多云集群相关的资源(如EC2实例、安全组、弹性IP和负载均衡器等)。本文将为您提供获取访问密钥AK/SK的方法。 该密钥将被加密妥善保存,您无需担心信息泄露的风险。 使用AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 IAM 控制台。 要获取 AWS 账户 ID,请联系您 AWS 账户的管理员。 在右上角的导航栏中,选择您的用户名,然后选择“安全凭据”。 图1 选择“安全凭据” 在“访问密钥”区域中,单击“创建访问密钥”。如果您已经有两个访问密钥,则此按钮将被停用,您必须先删除一个访问密钥,然后才能创建新的访问密钥。您也可以使用已有的密钥来创建UCS on AWS集群。 图2 创建访问密钥 在“检索访问密钥”页面上,单击“显示”获取用户的秘密访问密钥的值,或单击“下载 .csv 文件”按钮。这是您保存秘密访问密钥的唯一机会。将秘密访问密钥保存在安全位置后,请单击“完成”。 图3 获取秘密访问密钥 在您使用UCS on AWS期间,在对应的集群被删除之前,请不要轮转、停用或者删除该密钥,否则会影响集群的后续更新和删除操作。 父主题: 多云集群
  • 如何清理多云集群资源? 在多云集群注销过程中,若因某些原因导致注销失败,您可以尝试重新进行注销操作。但在此之前,请确保已经在AWS控制台手动删除了集群关联的资源。本章节将为您提供这些资源的名称和数量,您可以分别访问AWS的EC2面板和VPC面板,查看并删除相应资源。 表1中,${clusterName}为您的集群名称,${random5}为长度是5的随机字符串。 表1 资源的名称和数量 控制台 资源类型 数量 名称 EC2面板 EC2 控制节点:3 工作节点:n 控制节点:${clusterName}-cp-${random5} 工作节点:${clusterName}-md-${i}-${random5},其中${i}默认为0 安全组 5 ${clusterName}-node ${clusterName}-lb ${clusterName}-apiserver-lb ${clusterName}-controlplane default 以上安全组对应的VPC均为:${clusterName}-vpc 弹性IP 3 ${clusterName}-eip-apiserver 存储卷 节点总数 * 2 根据卷挂载的EC2实例名,判断该卷属于哪个节点 ELB 1 ${clusterName}-apiserver,对应VPC为:${clusterName}-vpc 网络接口 4 Name为空,对应VPC均为:${clusterName}-vpc VPC面板 VPC 1 ${clusterName}-vpc NAT 3 ${clusterName}-nat 对应VPC为:${clusterName}-vpc;对应子网为:${clusterName}-subnet-public-${az1} ${clusterName}-nat 对应VPC为:${clusterName}-vpc;对应子网为:${clusterName}-subnet-public-${az2} ${clusterName}-nat 对应VPC为:${clusterName}-vpc;对应子网为:${clusterName}-subnet-public-${az3} 子网 6 ${clusterName}-subnet-public-${az1} ${clusterName}-subnet-private-${az1} ${clusterName}-subnet-public-${az2} ${clusterName}-subnet-private-${az2} ${clusterName}-subnet-public-${az3} ${clusterName}-subnet-private-${az3} 以上子网对应的VPC均为:${clusterName}-vpc 路由表 7 ${clusterName}-rt-public-${az1},显式子网关联为:${clusterName}-subnet-public-${az1} ${clusterName}-rt-private-${az1},显式子网关联为:${clusterName}-subnet-private-${az1} ${clusterName}-rt-public-${az2},显式子网关联为:${clusterName}-subnet-public-${az2} ${clusterName}-rt-private-${az2},显式子网关联为:${clusterName}-subnet-private-${az2} ${clusterName}-rt-public-${az3},显式子网关联为:${clusterName}-subnet-public-${az3} ${clusterName}-rt-private-${az3},显式子网关联为:${clusterName}-subnet-private-${az3} Name为空,显式子网关联为空 以上路由表对应的VPC均为:${clusterName}-vpc 互联网网关 1 ${clusterName}-igw,对应VPC为:${clusterName}-vpc 网络ACL 1 Name为空,关联对象为“6子网”,对应VPC为:${clusterName}-vpc 父主题: 多云集群
  • 策略中心运行异常怎么办? 策略中心运行异常的可能原因为Gatekeeper插件损坏,或者被删除。根据失败情况请使用以下方案排查修复: 检查gatekeeper-system命名空间中gatekeeper-controller-manager、gatekeeper-audit这两个Deployment是否为就绪状态,如果不是,请自行排查未就绪原因。 如果这两个Deployment被删除,则可以先将策略中心功能停用后再重新启用。 父主题: 策略中心
  • 排查项二:集群与UCS网络连接状态 公网接入: 检查集群是否绑定公网IP或配置公网NAT网关。 检查集群安全组的出方向是否放通。如需对出方向做访问控制,请联系技术支持获取目的地址和端口号。 解决网络问题后,删掉已有的proxy-agent Pod使其重新生成Pod资源,查看新建Pod的日志中是否存在“Start serving”的日志打印。 kubectl -n kube-system logs proxy-agent-*** | grep "Start serving" 日志正常打印后,刷新UCS控制台页面,查看集群是否正常连接。 私网接入: 检查集群安全组的出方向是否放通。如需对出方向做访问控制,请联系技术支持获取目的地址和端口号。 排除集群与UCS和IDC之间的网络连接故障。 根据网络连接方式不同,请参考以下文档进行故障排除。 云专线(DC):请参考故障排除。 虚拟专用网络 (VPN):请参考故障排除。 排除集群私网接入的VPCEP故障,VPCEP状态需为“已接受”。如VPCEP被误删除,则需重新创建,请参见私网接入的集群误删除VPCEP后如何恢复?。 图1 VPCEP状态 解决网络问题后,删掉已有的proxy-agent Pod使其重新生成Pod资源,查看新建Pod的日志中是否存在“Start serving”的日志打印。 kubectl -n kube-system logs proxy-agent-*** | grep "Start serving" 日志正常打印后,刷新UCS控制台页面,查看集群是否正常连接。
  • 排查项一:proxy-agent的运行状态 集群从UCS注销后,原有proxy-agent配置文件中包含的认证信息将会失效,请同时删除集群中已部署的proxy-agent实例。如需再次接入UCS,必须重新从UCS控制台下载proxy-agent配置文件进行部署。 登录目标集群Master节点。 查看集群代理部署状态。 kubectl -n kube-system get pod | grep proxy-agent 如果部署成功,预期输出如下: proxy-agent-*** 1/1 Running 0 9s 说明proxy-agent部署正常,如proxy-agent没有处于正常Running状态,可以使用kubectl -n kube-system describe pod proxy-agent-***查看Pod的告警信息,详细排查思路可参考proxy-agent部署失败怎么办?。 proxy-agent默认部署两个Pod实例,存在一个Pod正常Running即可使用基本功能,但是高可用性无法保证。 打印proxy-agent的Pod日志,查看代理程序是否可以连接到UCS。 kubectl -n kube-system logs proxy-agent-*** | grep "Start serving" 如没有“Start serving”的日志打印但是proxy-agent实例状态正常,则需要继续检查其他排查项。
  • 排查项三:集群认证信息变化 如错误显示“cluster responded with non-successful status: [401][Unauthorized]”,通过观察集群三个Master节点“/var/paas/sys/log/kubernetes/auth-server.log”日志,可能是IAM网络连通故障。请确认IAM 域名 解析能力,及IAM服务连通性正常。 常见问题日志如下: Failed to authenticate token: *******: dial tcp: lookup iam.myhuaweicloud.com on *.*.*.*:53: no such host 此类日志说明,节点缺少对iam.myhuaweicloud.com解析能力,请参考安装前准备,配置对应的域名解析。 Failed to authenticate token: Get *******: dial tcp *.*.*.*:443: i/o timeout 此类日志说明,节点访问IAM服务超时,请确保节点与华为云IAM服务能正常通信。 currently only supports Agency token 此类日志说明请求不是从UCS服务发起,目前本地集群只支持UCS服务IAM Token访问。 IAM assumed user has no authorization/iam assumed user should allowed by TEAdmin 此类日志说明UCS服务访问集群故障,请联系华为技术人员进行排障。 Failed to authenticate token: token expired, please acquire a new token 此类日志说明Token存在过期现象,请使用date命令确定时间是否差距过大,如果节点时间与标准时间差距过大,请同步时间后,查看集群是否恢复。如果长时间未恢复,可能需要重装集群,请联系华为技术人员进行排障。 解决上述问题后,请使用crictl ps | grep auth | awk '{print $1}' | xargs crictl stop命令重启auth-server容器。
  • 排查思路 舰队或集群关联权限时出现异常事件的排查思路大致可根据报错信息进行定位,如表1所示。 表1 报错信息说明 报错信息 说明 推荐排查项 ClusterRole failed reason:Get \"https://kubernetes.default.svc.cluster.local/apis/rbac.authorization.k8s.io/v1/clusterroles/XXXXXXX?timeout=30s\": Precondition Required" Or Get ClusterRole failed reason:an error on the server (\"unknown\") has prevented the request from succeeding (get clusterroles.rbac.authorization.k8s.io 出现该错误的原因大概率为集群还未接入,接入集群中的proxy-agent运行状态异常,或者网络异常。 排查项一:proxy-agent的运行状态 排查项二:集群与UCS网络连接状态 Unauthorized 出现该错误的原因可能是多样的,请根据实际状态码进行排查。 例如状态码401表示用户没有访问权限,可能的原因是集群认证信息过期。 排查项三:集群认证信息变化 Get cluster namesapce[x] failed. Or Reason:namespace "x" not found. 出现该错误的原因是集群内没有对应的命名空间。 在集群下创建对应的命名空间并进行重试操作。 如:kubectl create namespace ns_name 如果不需要使用该命名空间,该异常事件可以忽略。
共100000条