华为云用户手册

  • 接口约束 您必须是桶拥有者或拥有恢复归档或深度归档存储对象的权限,才能恢复归档或深度归档存储对象。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:object:RestoreObject权限,如果使用桶策略则需授予RestoreObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 重复恢复归档或深度归档存储对象时在延长恢复有效期的同时,也将会对恢复时产生的恢复费用进行重复收取。产生的标准存储类别的对象副本有效期将会延长,并且收取延长时间段产生的标准存储副本费用。
  • 多版本控制简介(Node.js SDK) 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。 OBS支持保存一个对象的多个版本,您可以利用多版本控制,在一个桶中保留多个版本的对象。 多版本功能可以方便地检索和还原各个版本,在意外操作或应用程序故障时快速恢复数据。 在默认情况下,OBS中新创建的桶不会开启多版本功能,向同一个桶上传同名的对象时,新上传的对象将覆盖原有的对象。 更多关于多版本控制的内容请参见多版本控制。 父主题: 多版本控制(Node.js SDK)
  • SDK列表 在开始使用之前,请确保您安装的是最新版本的SDK。使用过时的版本可能会导致兼容性问题或无法使用最新功能。您可以在 SDK中心 查询版本信息。 表1提供了CBR服务支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导 .NET huaweicloud-sdk-net-v3 .Net SDK使用指导
  • psycopg2连接集群不支持CN Retry特性的问题说明 GaussDB (DWS)支持在SQL语句执行出错时的自动重试功能(简称CN Retry)。CN Retry对于客户端和驱动发送的SQL语句在执行失败时可以自动识别错误类型,并进行重试,详情请参见SQL语句出错自动重试。但使用psycopg2默认连接方式创建的连接在语句执行失败时没有自动重试,会直接报错退出。如常见的主备切换场景下,未自动重试会报如下错误,但在自动重试期间完成主备切换,则会返回正确结果。 1 psycopg2.errors.ConnectionFailure: pooler: failed to create 1 connections, Error Message: remote node dn_6003_6004, detail: could not connect to server: Operation now in progress 报错原因: psycopg2在发送SQL语句前先发送了BEGIN语句开启事务。 CN Retry不支持事务块中的语句是特性约束。 解决方案: 在同步方式连接时,可以通过主动结束驱动开启的事务。 1 2 3 4 cursor = conn.cursor() # 增加end语句主动结束驱动开启的事务 cursor.execute("end; select * from test order by 1;") rows = cursor.fetchall() 使用异步连接方式主动开启事务,异步连接介绍具体请参见pyscopg官网:https://www.psycopg.org/docs/advanced.html?highlight=async。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #!/usr/bin/env python3 # _*_ encoding=utf-8 _*_ import psycopg2 import select # psycopg2官方提供的异步连接方式时的wait函数 # 详见https://www.psycopg.org/docs/advanced.html?highlight=async def wait(conn): while True: state = conn.poll() if state == psycopg2.extensions.POLL_OK: break elif state == psycopg2.extensions.POLL_WRITE: select.select([], [conn.fileno()], []) elif state == psycopg2.extensions.POLL_READ: select.select([conn.fileno()], [], []) else: raise psycopg2.OperationalError("poll() returned %s" % state) def psycopg2_cnretry_sync(): # 创建连接 conn = psycopg2.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password', # 数据库用户密码 async=1) # 使用异步方式连接 wait(conn) # 执行查询 cursor = conn.cursor() cursor.execute("select * from test order by 1;") wait(conn) rows = cursor.fetchall() for row in rows: print(row[0], row[1]) # 关闭连接 conn.close() if __name__ == '__main__': psycopg2_cnretry_async()
  • 在Linux环境使用psycopg2第三方库连接集群 以root用户登录Linux环境。 执行以下命令创建python_dws.py文件。 vi python_dws.py 请复制粘贴以下内容放入python_dws.py文件中: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 #!/usr/bin/python # -*- coding: UTF-8 -*- from __future__ import print_function import psycopg2 def create_table(connection): print("Begin to create table") try: cursor = connection.cursor() cursor.execute("drop table if exists test;" "create table test(id int, name text);") connection.commit() except psycopg2.ProgrammingError as e: print(e) else: print("Table created successfully") cursor.close() def insert_data(connection): print("Begin to insert data") try: cursor = connection.cursor() cursor.execute("insert into test values(1,'number1');") cursor.execute("insert into test values(2,'number2');") cursor.execute("insert into test values(3,'number3');") connection.commit() except psycopg2.ProgrammingError as e: print(e) else: print("Insert data successfully") cursor.close() def update_data(connection): print("Begin to update data") try: cursor = connection.cursor() cursor.execute("update test set name = 'numberupdated' where id=1;") connection.commit() print("Total number of rows updated :", cursor.rowcount) cursor.execute("select * from test order by 1;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except psycopg2.ProgrammingError as e: print(e) else: print("After Update, Operation done successfully") def delete_data(connection): print("Begin to delete data") try: cursor = connection.cursor() cursor.execute("delete from test where id=3;") connection.commit() print("Total number of rows deleted :", cursor.rowcount) cursor.execute("select * from test order by 1;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except psycopg2.ProgrammingError as e: print(e) else: print("After Delete,Operation done successfully") def select_data(connection): print("Begin to select data") try: cursor = connection.cursor() cursor.execute("select * from test order by 1;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except psycopg2.ProgrammingError as e: print(e) print("select failed") else: print("Operation done successfully") cursor.close() if __name__ == '__main__': try: conn = psycopg2.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password') # 数据库用户密码 except psycopg2.DatabaseError as ex: print(ex) print("Connect database failed") else: print("Opened database successfully") create_table(conn) insert_data(conn) select_data(conn) update_data(conn) delete_data(conn) conn.close() 按照实际集群信息,修改python_dws.py文件中的集群公网访问地址、集群端口号、数据库名称、数据库用户名、数据库密码。 psycopg2接口不提供重试连接的能力,您需要在业务代码中实现重试处理。 1 2 3 4 5 conn = psycopg2.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password') # 数据库用户密码 执行以下命令,使用psycopg第三方库连接集群。 python python_dws.py
  • 使用约束 由于psycopg2是基于PostgreSQL的客户端接口,它的功能GaussDB(DWS)并不能完全支持。具体支持情况请见下表2。 以下接口支持情况是基于Python 3.8.5及psycopg 2.9.1版本。 表2 DWS对psycopg2主要接口支持情况 类名 功能描述 函数/成员变量 支持 备注 connections basic cursor(name=None, cursor_factory=None, scrollable=None, withhold=False) Y - commit() Y - rollback() Y - close() Y - Two-phase commit support methods xid(format_id, gtrid, bqual) Y - tpc_begin(xid) Y - tpc_prepare() N 内核不支持显式prepare transaction。 tpc_commit([xid]) Y - tpc_rollback([xid]) Y - tpc_recover() Y - closed Y - cancel() Y - reset() N 不支持DISCARD ALL。 dsn Y - Transaction control methods and attributes. set_session(isolation_level=None, readonly=None, deferrable=None, autocommit=None) Y 数据库不支持session中设置default_transaction_read_only。 autocommit Y - isolation_level Y - readonly N 数据库不支持session中设置default_transaction_read_only。 deferrable Y - set_isolation_level(level) Y - encoding Y - set_client_encoding(enc) Y - notices N 数据库不支持listen/notify。 notifies Y - cursor_factory Y - info Y - status Y - lobject N 数据库不支持大对象相关操作。 Methods related to asynchronous support poll() Y - fileno() Y - isexecuting() Y - Interoperation with other C API modules pgconn_ptr Y - get_native_connection() Y - informative methods of the native connection get_transaction_status() Y - protocol_version Y - server_version Y - get_backend_pid() Y 获取到的不是后台的pid,是逻辑连接的id号。 get_parameter_status(parameter) Y - get_dsn_parameters() Y - cursor basic description Y - close() Y - closed Y - connection Y - name Y - scrollable N 数据库不支持SCROLL CURSOR。 withhold N withhold cursor在commit前需要关闭。 Commands execution methods execute(query, vars=None) Y - executemany(query, vars_list) Y - callproc(procname[, parameters]) Y - mogrify(operation[, parameters]) Y - setinputsizes(sizes) Y - fetchone() Y - fetchmany([size=cursor.arraysize]) Y - fetchall() Y - scroll(value[, mode='relative']) N 数据库不支持SCROLL CURSOR。 arraysize Y - itersize Y - rowcount Y - rownumber Y - lastrowid Y - query Y - statusmessage Y - cast(oid, s) Y - tzinfo_factory Y - nextset() Y - setoutputsize(size[, column]) Y - COPY-related methods copy_from(file, table, sep='\\t', null='\\\\N', size=8192, columns=None) Y - copy_to(file, table, sep='\\t', null='\\\\N', columns=None) Y - copy_expert(sql, file, size=8192) Y - Interoperation with other C API modules pgresult_ptr Y -
  • 版本说明 由于GaussDB(DWS)集群、Python、psycopg2的版本较多,下方表格仅列举出当前主流版本的支持情况。 表1 psycopg2版本 Python版本 GaussDB(DWS)集群版本 2.7.x 3.8.x 8.1.3及以上 3.9.x 8.1.3及以上 2.8.x 3.8.x 8.1.3及以上 3.9.x 8.1.3及以上 2.9.x 3.8.x 8.1.3及以上 3.9.x 8.1.3及以上
  • 连接集群前的准备 GaussDB(DWS)集群已绑定弹性IP。 已获取GaussDB(DWS)集群的数据库管理员用户名和密码。 请注意,由于MD5算法已经被证实存在碰撞可能,已严禁将之用于密码校验算法。当前GaussDB(DWS)采用默认安全设计,默认禁止MD5算法的密码校验,可能导致开源客户端无法正常连接的问题。建议先检查数据库参数password_encryption_type参数是否为1,如果取值不为1,需要修改,修改方法参见修改GaussDB(DWS)集群GUC参数;然后修改一次准备使用的数据库用户的密码。 当前GaussDB(DWS)出于安全考虑,已经默认不再使用MD5存储密码摘要了,这将导致使用开源驱动或者客户端无法正常连接数据库。需要您调整密码策略后再创建一个新用户或者对老用户做一次密码修改,方可使用开源协议中的MD5认证算法。 数据库中是不会存储用户的密码原文,而是存储密码的HASH摘要,在密码校验时与客户端发来的密码摘要进行比对(中间会有加盐操作)。故当您改变了密码算法策略时,数据库也是无法还原您的密码,再生成新的HASH算法的摘要值的。必须您手动修改一次密码或者创建一个新用户,这时新的密码将会采用您设置的HASH算法进行摘要存储,用于下次连接认证。 已获取GaussDB(DWS)集群的公网访问地址,含IP地址和端口。具体请参见获取GaussDB(DWS)集群连接地址。 已安装psycopg2第三方库。下载地址:https://pypi.org/project/psycopg2/,安装部署操作请参见:https://www.psycopg.org/install/。 CentOS、Redhat等操作系统中使用yum命令安装,命令为: 1 yum install python-psycopg2 psycopg2的使用依赖于PostgreSQL的libpq动态库(32位的psycopg2需要对应32位的libpq;64位的psycopg2对应64位的libpq),Linux中可以依赖yum命令解决。在Windows系统使用psycopg2需要先安装libpq,主要方式有两种: 安装PostgreSQL,并配置libpq、ssl、crypto动态库位置到环境变量PATH中。 安装psqlodbc,使用PostgreSQL ODBC驱动携带的libpq、ssl、crypto动态库。
  • 查看本连接器全部用户排名 登录 交换数据空间 官网。 单击“管理控制台”,进入交换数据空间控制台界面。 单击“我的空间”,在交换数据空间实例中,选择实例,单击实例卡片上的“连接器”。 然后选择连接器,单击连接器卡片上的“前往”,进入连接器控制台界面。 选择界面左侧导航栏中的“连接器日志”,进入“连接器日志”界面。 单击“连接器日志”界面上方“本连接器操作日志”,单击“最热用户”右侧“全部用户排名”,进入“全部用户排名界面”,用户可查看排名、用户名称和操作次数。
  • 查看本连接器操作日志 登录交换数据空间官网。 单击“管理控制台”,进入交换数据空间控制台界面。 单击“我的空间”,在交换数据空间实例中,选择实例,单击实例卡片上的“连接器”。 然后选择连接器,单击连接器卡片上的“前往”,进入连接器控制台界面。 选择界面左侧导航栏中的“连接器日志”,进入“连接器日志”界面。 单击“连接器日志”界面上方“本连接器操作日志”,在“最热数据”下方按照时间顺序展示被操作的数据名称、数据编码、操作人、操作人连接器、操作时间和操作动作。 本连接器操作日志记录了本连接器内对数据合约的创建、终止和审批的操作记录,以及对归档数据的下载、查看、加工和加工另存的操作记录。
  • 查看本连接器全部数据排名 登录交换数据空间官网。 单击“管理控制台”,进入交换数据空间控制台界面。 单击“我的空间”,在交换数据空间实例中,选择实例,单击实例卡片上的“连接器”。 然后选择连接器,单击连接器卡片上的“前往”,进入连接器控制台界面。 选择界面左侧导航栏中的“连接器日志”,进入“连接器日志”界面。 单击“连接器日志”界面上方“本连接器操作日志”,单击“最热数据”右侧“全部数据排名”,进入“全部数据排名界面”,用户可查看排名、名称和操作次数。
  • 删除资源 登录交换数据空间官网。 单击“管理控制台”,进入交换数据空间控制台界面。 单击“我的空间”,在交换数据空间实例中,选择实例,单击实例卡片上的“连接器”。 然后选择连接器,单击连接器卡片上的“前往”,进入连接器控制台界面。 选择界面左侧导航栏中的“数据目录”,在“数据目录”界面,选择“我的数据”一栏。 单击待删除的资源文件或文件夹右侧“操作”列的“删除”。 在弹出的提示窗口,单击“确定”,完成删除。
  • 查看任务记录 登录交换数据空间官网。 单击“管理控制台”,进入交换数据空间控制台界面。 单击“我的空间”,在交换数据空间实例中,选择实例,单击实例卡片上的“连接器”。 然后选择连接器,单击连接器卡片上的“前往”,进入连接器控制台界面。 选择界面左侧导航栏中的“数据目录”,单击界面右上角的“任务记录”,查看任务名称、任务描述、任务状态、驱动类型、创建人和创建时间等详细信息。只可查看从数据源导入数据,驱动类型是 CDM 的任务。
  • 操作步骤 登录交换数据空间官网。 单击“管理控制台”,进入交换数据空间控制台界面。 单击“我的空间”,在交换数据空间实例中,选择实例,单击实例卡片上的“连接器”。 然后选择连接器,单击连接器卡片上的“前往”,进入连接器控制台界面。 选择界面左侧导航栏中的“应用实例”,进入“应用实例”界面。 单击实例上方“注册应用实例”,在“注册应用实例”窗口中填写以上应用的相关参数信息,如表1所示。 表1 注册无连接应用参数说明 参数 说明 应用 选择“PDF查看”或“LUCKY_EXCEL”,注册不同应用。 名称 填写应用实例的名称,请按照一定的命名规则填写文件名称,方便后续在应用实例中进行区分。 描述 用户可以根据需要在文本框中输入对该应用实例的描述信息。 图标 用户可以根据需要选择合适的应用图标,目前仅支持PNG、JPEG格式,最大不超过2.5MB,或者使用默认图标。 确认参数信息无误,单击“确定”。
  • 请求示例 替换指定的RoleBinding。 { "apiVersion" : "rbac.authorization.k8s.io/v1", "kind" : "RoleBinding", "metadata" : { "creationTimestamp" : "2020-04-07T08:25:46Z", "name" : "clusterrole_view_User_07b82a44a680d5661f01c00b448f8f50", "namespace" : "rbac-test", "resourceVersion" : "230608015", "selfLink" : "/apis/rbac.authorization.k8s.io/v1/namespaces/rbac-test/rolebindings/clusterrole_view_User_07b82a44a680d5661f01c00b448f8f50", "uid" : "6163c216-78a9-11ea-bcc5-340a9837e2a7" }, "roleRef" : { "apiGroup" : "rbac.authorization.k8s.io", "kind" : "ClusterRole", "name" : "view" }, "subjects" : [ { "apiGroup" : "rbac.authorization.k8s.io", "kind" : "User", "name" : "07b82a44a680d5661f01c00b448f8f50" } ] }
  • 响应示例 状态码: 200 OK { "apiVersion" : "rbac.authorization.k8s.io/v1", "kind" : "RoleBinding", "metadata" : { "creationTimestamp" : "2020-04-07T08:25:46Z", "name" : "clusterrole_view_User_07b82a44a680d5661f01c00b448f8f50", "namespace" : "rbac-test", "resourceVersion" : "230609819", "selfLink" : "/apis/rbac.authorization.k8s.io/v1/namespaces/rbac-test/rolebindings/clusterrole_view_User_07b82a44a680d5661f01c00b448f8f50", "uid" : "6163c216-78a9-11ea-bcc5-340a9837e2a7" }, "roleRef" : { "apiGroup" : "rbac.authorization.k8s.io", "kind" : "ClusterRole", "name" : "view" }, "subjects" : [ { "apiGroup" : "rbac.authorization.k8s.io", "kind" : "User", "name" : "07b82a44a680d5661f01c00b448f8f50" } ] }
  • 状态码 状态码 描述 200 OK 201 Created 400 BadRequest 401 Unauthorized 403 Forbidden 404 NotFound 405 MethodNotAllowed 406 NotAcceptable 409 Conflict 415 UnsupportedMediaType 422 Invalid 429 TooManyRequests 500 InternalError 503 ServiceUnavailable 504 ServerTimeout
  • URI PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} 表1 路径参数 参数 是否必选 参数类型 描述 name 是 String name of the RoleBinding namespace 是 String object name and auth scope, such as for teams and projects 表2 Query参数 参数 是否必选 参数类型 描述 dryRun 否 String When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed fieldManager 否 String fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. pretty 否 String If 'true', then the output is pretty printed.
  • 请求示例 将Ingress的servicePort由"8080"替换为"8081"。 { "apiVersion" : "extensions/v1beta1", "kind" : "Ingress", "metadata" : { "annotations" : { "kubernetes.io/elb.id" : "xxx", "kubernetes.io/elb.ip" : "192.168.137.182", "kubernetes.io/elb.port" : "6071" }, "labels" : { "app" : "redis", "isExternal" : "true", "zone" : "data" }, "name" : "redis" }, "spec" : { "rules" : [ { "http" : { "paths" : [ { "backend" : { "serviceName" : "redis", "servicePort" : 8081 }, "path" : "/" } ] } } ] } }
  • 响应示例 状态码: 200 OK { "apiVersion" : "extensions/v1beta1", "kind" : "Ingress", "metadata" : { "annotations" : { "kubernetes.io/elb.id" : "xxx", "kubernetes.io/elb.ip" : "192.168.137.182", "kubernetes.io/elb.port" : "6071" }, "creationTimestamp" : "2018-09-04T02:16:14Z", "generation" : 2, "labels" : { "app" : "redis", "isExternal" : "true", "zone" : "data" }, "name" : "redis", "namespace" : "namespace-test", "resourceVersion" : "5162744", "selfLink" : "/apis/extensions/v1beta1/namespaces/namespace-test/ingresses/redis", "uid" : "7f86c310-afe8-11e8-b6ef-f898ef6c78b4" }, "spec" : { "rules" : [ { "http" : { "paths" : [ { "backend" : { "serviceName" : "redis", "servicePort" : 8081 }, "path" : "/" } ] } } ] }, "status" : { "loadBalancer" : { "ingress" : [ { "ip" : "192.168.137.182" } ] } } }
  • URI PUT /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} 表1 路径参数 参数 是否必选 参数类型 描述 name 是 String name of the Ingress namespace 是 String object name and auth scope, such as for teams and projects 表2 Query参数 参数 是否必选 参数类型 描述 dryRun 否 String When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed fieldManager 否 String fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. pretty 否 String If 'true', then the output is pretty printed.
  • 状态码 状态码 描述 200 OK 201 Created 400 BadRequest 401 Unauthorized 403 Forbidden 404 NotFound 405 MethodNotAllowed 406 NotAcceptable 409 Conflict 415 UnsupportedMediaType 422 Invalid 429 TooManyRequests 500 InternalError 503 ServiceUnavailable 504 ServerTimeout
  • 响应示例 状态码: 200 OK { "apiVersion" : "crd.yangtse.cni/v1", "kind" : "EIPPool", "metadata" : { "creationTimestamp" : "2022-09-07T01:22:50Z", "finalizers" : [ "yangtse.io/eip-pool" ], "generation" : 1, "labels" : { "some-key" : "some-value" }, "name" : "eippool-test", "namespace" : "namespace-test", "resourceVersion" : "42396258", "selfLink" : "/apis/crd.yangtse.cni/v1/namespaces/namespace-test/eippools/eippool-test", "uid" : "e4dc5432-1d9b-4fcb-8840-ee445b6511ae" }, "spec" : { "amount" : 1, "eipAttributes" : { "bandwidth" : { "chargeMode" : "bandwidth", "name" : "eip-test", "shareType" : "PER", "size" : 5 }, "ipVersion" : 4, "networkType" : "5_g-vm" } }, "status" : { "eips" : [ { "alias" : "eip-test", "bandWidthChargeMode" : "bandwidth", "bandwidthShareType" : "PER", "bandwidthSize" : 5, "id" : "034a0bae-81f7-46f4-b933-3273adc32b54", "ipv4" : "100.85.221.2", "networkType" : "5_g-vm", "status" : "DOWN" } ], "usage" : "0/1" } }
  • 状态码 状态码 描述 200 OK 201 Created 400 BadRequest 401 Unauthorized 403 Forbidden 404 NotFound 405 MethodNotAllowed 406 NotAcceptable 409 Conflict 415 UnsupportedMediaType 422 Invalid 429 TooManyRequests 500 InternalError 503 ServiceUnavailable 504 ServerTimeout
  • URI PUT /apis/crd.yangtse.cni/v1/namespaces/{namespace}/eippools/{name} 表1 路径参数 参数 是否必选 参数类型 描述 name 是 String name of the EIPPool namespace 是 String object name and auth scope, such as for teams and projects 表2 Query参数 参数 是否必选 参数类型 描述 dryRun 否 String When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed fieldManager 否 String fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. pretty 否 String If 'true', then the output is pretty printed.
  • 请求示例 将已创建EIPPool中的label值替换为"some-key" : "some-value"。 { "apiVersion" : "crd.yangtse.cni/v1", "kind" : "EIPPool", "metadata" : { "creationTimestamp" : "2022-09-07T01:22:50Z", "finalizers" : [ "yangtse.io/eip-pool" ], "generation" : 1, "labels" : { "some-key" : "some-value" }, "name" : "eippool-test", "namespace" : "namespace-test", "resourceVersion" : "42396258", "selfLink" : "/apis/crd.yangtse.cni/v1/namespaces/namespace-test/eippools/eippool-test", "uid" : "e4dc5432-1d9b-4fcb-8840-ee445b6511ae" }, "spec" : { "amount" : 1, "eipAttributes" : { "bandwidth" : { "chargeMode" : "bandwidth", "name" : "eip-test", "shareType" : "PER", "size" : 5 }, "ipVersion" : 4, "networkType" : "5_g-vm" } }, "status" : { "eips" : [ { "alias" : "eip-test", "bandWidthChargeMode" : "bandwidth", "bandwidthShareType" : "PER", "bandwidthSize" : 5, "id" : "034a0bae-81f7-46f4-b933-3273adc32b54", "ipv4" : "100.85.221.2", "networkType" : "5_g-vm", "status" : "DOWN" } ], "usage" : "0/1" } }
  • 状态码 状态码 描述 200 OK 201 Created 400 BadRequest 401 Unauthorized 403 Forbidden 404 NotFound 405 MethodNotAllowed 406 NotAcceptable 409 Conflict 415 UnsupportedMediaType 422 Invalid 429 TooManyRequests 500 InternalError 503 ServiceUnavailable 504 ServerTimeout
  • 请求示例 将已创建Service的名称替换为“service-test”。 { "apiVersion" : "v1", "kind" : "Service", "metadata" : { "annotations" : { "kubernetes.io/elb.class" : "dnat", "kubernetes.io/natgateway.id" : "xxx", "tenant.kubernetes.io/domain-id" : "xxx", "tenant.kubernetes.io/project-id" : "xxx" }, "creationTimestamp" : "2022-09-06T06:28:09Z", "finalizers" : [ "service.kubernetes.io/load-balancer-cleanup" ], "labels" : { "app" : "service-test" }, "name" : "service-test", "namespace" : "namespace-test", "resourceVersion" : "41521168", "selfLink" : "/api/v1/namespaces/namespace-test/services/service-test", "uid" : "7dfc42ef-f938-401c-b44a-1f7bd79b3fcb" }, "spec" : { "clusterIP" : "10.247.64.172", "externalTrafficPolicy" : "Cluster", "loadBalancerIP" : "100.93.1.98", "ports" : [ { "name" : "service0", "nodePort" : 31966, "port" : 30157, "protocol" : "TCP", "targetPort" : 80 } ], "selector" : { "app" : "service-test" }, "sessionAffinity" : "None", "type" : "LoadBalancer" }, "status" : { "loadBalancer" : { } } }
  • 响应示例 状态码: 200 OK { "apiVersion" : "v1", "kind" : "Service", "metadata" : { "annotations" : { "kubernetes.io/elb.class" : "dnat", "kubernetes.io/natgateway.id" : "4ed25dd6-1887-439f-aef6-b1e3f2b57b5c", "tenant.kubernetes.io/domain-id" : "08a2c8ef8180d4150ff5c0012463ee60", "tenant.kubernetes.io/project-id" : "08a2c8ef8d80d4152ff8c001d0281c03" }, "creationTimestamp" : "2022-09-06T06:28:09Z", "finalizers" : [ "service.kubernetes.io/load-balancer-cleanup" ], "labels" : { "app" : "service-test" }, "name" : "service-test", "namespace" : "namespace-test", "resourceVersion" : "41521168", "selfLink" : "/api/v1/namespaces/namespace-test/services/service-test", "uid" : "7dfc42ef-f938-401c-b44a-1f7bd79b3fcb" }, "spec" : { "clusterIP" : "10.247.64.172", "externalTrafficPolicy" : "Cluster", "loadBalancerIP" : "100.93.1.98", "ports" : [ { "name" : "service0", "nodePort" : 31966, "port" : 30157, "protocol" : "TCP", "targetPort" : 80 } ], "selector" : { "app" : "service-test" }, "sessionAffinity" : "None", "type" : "LoadBalancer" }, "status" : { "loadBalancer" : { } } }
  • URI PUT /api/v1/namespaces/{namespace}/services/{name} 表1 路径参数 参数 是否必选 参数类型 描述 name 是 String name of the Service namespace 是 String object name and auth scope, such as for teams and projects 表2 Query参数 参数 是否必选 参数类型 描述 dryRun 否 String When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed fieldManager 否 String fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. pretty 否 String If 'true', then the output is pretty printed.
共100000条