华为云用户手册

  • URI GET /apis/kubeflow.org/v1/namespaces/{namespace}/tfjobs/{name} 表1 Path参数 参数 是否必选 描述 name Yes name of the TFJob namespace Yes object name and auth scope, such as for teams and projects 表2 Query参数 参数 是否必选 描述 pretty No If 'true’, then the output is pretty printed.
  • 请求消息 请求参数: 请求参数的详细描述请参见表154。 请求示例: { "apiVersion": "kubeflow.org/v1", "kind": "TFJob", "metadata": { "name": "tfjob-test" }, "spec": { "backoffLimit": 6, "tfReplicaSpecs": { "Ps": { "replicas": 1, "template": { "spec": { "containers": [ { "args": [ "python", "/opt/tf-benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py", "--batch_size=1", "--model=resnet50", "--variable_update=parameter_server", "--flush_stdout=true", "--num_gpus=1", "--local_parameter_device=cpu", "--device=cpu", "--data_format=NHWC" ], "image": "*.*.*.215:20202/cci/tf-benchmarks-cpu:v1", "name": "tensorflow", "ports": [ { "containerPort": 2222, "name": "tfjob-port" } ], "resources": { "limits": { "cpu": "2", "memory": "4Gi" }, "requests": { "cpu": "2", "memory": "4Gi" } } } ], "restartPolicy": "OnFailure", "imagePullSecrets": [ { "name": "imagepull-secret" } ] } } }, "Worker": { "replicas": 1, "template": { "spec": { "containers": [ { "args": [ "python", "/opt/tf-benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py", "--batch_size=1", "--model=resnet50", "--variable_update=parameter_server", "--flush_stdout=true", "--local_parameter_device=cpu", "--device=cpu", "--data_format=NHWC" ], "image": "*.*.*.215:20202/cci/tf-benchmarks-cpu:v1", "name": "tensorflow", "ports": [ { "containerPort": 2222, "name": "tfjob-port" } ], "resources": { "limits": { "cpu": "2", "memory": "4Gi" }, "requests": { "cpu": "2", "memory": "4Gi" } } } ], "restartPolicy": "OnFailure", "imagePullSecrets": [ { "name": "imagepull-secret" } ] } } } } } }
  • 响应消息 响应参数: 响应参数的详细描述请参考表154。 响应示例: { "apiVersion": "kubeflow.org/v1", "kind": "TFJob", "metadata": { "creationTimestamp": "2019-07-23T12:39:47Z", "generation": 1, "name": "tfjob-test", "namespace": "kube-test", "resourceVersion": "72050567", "selfLink": "/apis/kubeflow.org/v1/namespaces/kube-test/tfjobs/tfjob-test", "uid": "f461f966-ad46-11e9-aaa4-340a9837e413" }, "spec": { "backoffLimit": 6, "tfReplicaSpecs": { "Ps": { "replicas": 1, "template": { "spec": { "containers": [ { "args": [ "python", "/opt/tf-benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py", "--batch_size=1", "--model=resnet50", "--variable_update=parameter_server", "--flush_stdout=true", "--num_gpus=1", "--local_parameter_device=cpu", "--device=cpu", "--data_format=NHWC" ], "image": "*.*.*.215:20202/cci/tf-benchmarks-cpu:v1", "name": "tensorflow", "ports": [ { "containerPort": 2222, "name": "tfjob-port" } ], "resources": { "limits": { "cpu": "2", "memory": "4Gi" }, "requests": { "cpu": "2", "memory": "4Gi" } } } ], "imagePullSecrets": [ { "name": "imagepull-secret" } ], "restartPolicy": "OnFailure" } } }, "Worker": { "replicas": 1, "template": { "spec": { "containers": [ { "args": [ "python", "/opt/tf-benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py", "--batch_size=1", "--model=resnet50", "--variable_update=parameter_server", "--flush_stdout=true", "--local_parameter_device=cpu", "--device=cpu", "--data_format=NHWC" ], "image": "*.*.*.215:20202/cci/tf-benchmarks-cpu:v1", "name": "tensorflow", "ports": [ { "containerPort": 2222, "name": "tfjob-port" } ], "resources": { "limits": { "cpu": "2", "memory": "4Gi" }, "requests": { "cpu": "2", "memory": "4Gi" } } } ], "imagePullSecrets": [ { "name": "imagepull-secret" } ], "restartPolicy": "OnFailure" } } } } }, "status": { } }
  • URI POST /apis/kubeflow.org/v1/namespaces/{namespace}/tfjobs 表1 Path参数 参数 是否必选 描述 namespace Yes object name and auth scope, such as for teams and projects 表2 Query参数 参数 是否必选 描述 pretty No If 'true’, then the output is pretty printed.
  • 修订记录 发布日期 修订记录 2020-09-30 废弃API TFJob。 MXJob。 PyTorchJob。 2020-07-30 删除API 删除迁移Namespace到专属集群接口。 删除MPIJob接口。 2020-05-25 修改API 更新删除Deployment。 更新权限和授权项。 2020-05-15 新增API 新增ClusterRole和RoleBinding。 2020-03-15 修改表结构 表20:新增emptyDir参数。 2019-10-18 新增API 新增TFJob。 新增MXJob。 新增PyTorchJob。 2019-09-10 新增API 导入存储:导入已有存储到指定的命名空间。 查询导入的PVC:查询指定命名空间下的PVC。 解绑存储:从指定命名空间解绑存储的接口。 修改数据结构 表10:annotations参数增加限制说明。 表31:删除policy参数。
  • 限制条件 挂载OBS时有如下限制: 创建Pod时需要添加annotations字段:obssidecar-injector-webhook/inject: 'true'。 obssidecar-injector-webhook/inject: 'true' : 表示挂载OBS需要创建obssidecar容器。 挂载obs并行文件系统时,obssidecar容器需预留一定内存以保障业务可靠性,防止容器因资源不足异常退出。当业务容器挂载单个obs并行文件系统时,CPU和内存规格建议配置如下: "obssidecar-injector-webhook/cpu": "500m", "obssidecar-injector-webhook/memory": "1024Mi" 当业务容器挂载多个obs并行文件系统时,相应CPU和内存规格逐倍增加。 obssidecar-injector-webhook/cpu: 表示obssidecar容器cpu规格。 obssidecar-injector-webhook/memory: 表示obssidecar容器memory规格。 挂载obs并行文件系统时,可指定挂载的umask来限制文件或目录权限。 obssidecar-injector-webhook/umask:表示obssidecar容器挂载时的权限掩码。
  • URI DELETE /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name} 表1 Path参数 参数 是否必选 参数类型 描述 namespace Yes String 命名空间。 name Yes String persistentvolumeclaims名称 表2 Query参数 参数 是否必选 参数类型 描述 deleteVolume No Boolean 是否删除volume,可选值为true和false: true: 同时删除使用的存储 false:保留存储,只删除pvc storageType No String Type of storage,目前支持: bs: 云硬盘存储 nfs: 文件存储 说明: 当deleteVolume=true时,storageType为非必填项;当deleteVolume=false时,storageType为必填项。
  • 响应消息 响应参数 表3 响应参数 参数 参数类型 描述 PersistentVolumeClaim Object 详情请参见表175。 PersistentVolume Object 详情请参见表184。 StorageInfo Object 详情请参见表199。 响应示例 [ { "persistentVolumeClaim": { "metadata": { "name": "cci-evs-jxzqegxe-k1z3", "namespace": "test-namespace", "selfLink": "/api/v1/namespaces/csms/persistentvolumeclaims/cci-evs-jxzqegxe-k1z3", "uid": "e82c1574-a46d-11e9-be8a-b44326d0c915", "resourceVersion": "65003551", "creationTimestamp": "2019-07-12T06:25:56Z", "annotations": { "pv.kubernetes.io/bind-completed": "yes", "pv.kubernetes.io/bound-by-controller": "yes", "volume.beta.kubernetes.io/storage-provisioner": "flexvolume-huawei.com/fuxivol" }, "finalizers": [ "kubernetes.io/pvc-protection" ], "enable": true }, "spec": { "accessModes": [ "ReadWriteMany" ], "resources": { "requests": { "storage": "10Gi" } }, "volumeName": "pvc-e82c1574-a46d-11e9-be8a-b44326d0c915", "storageClassName": "sata" }, "status": { "phase": "Bound", "accessModes": [ "ReadWriteMany" ], "capacity": { "storage": "10Gi" } } }, "persistentVolume": { "metadata": { "name": "pvc-e82c1574-a46d-11e9-be8a-b44326d0c915", "selfLink": "/api/v1/persistentvolumes/pvc-e82c1574-a46d-11e9-be8a-b44326d0c915", "uid": "eb0a0ca1-a46d-11e9-be8a-b44326d0c915", "resourceVersion": "65003549", "creationTimestamp": "2019-07-12T06:26:01Z", "labels": { "tenant.kubernetes.io/domain-id": "f0c61dbd65974140956ed37a91ea860f", "tenant.kubernetes.io/project-id": "cdb4249297a44665a63eec4f27ad09bf" }, "annotations": { "kubernetes.io/createdby": "huawei.com/fuxivol-dynamic-provisioner", "pv.kubernetes.io/bound-by-controller": "yes", "pv.kubernetes.io/namespace": "test-namespace", "pv.kubernetes.io/provisioned-by": "flexvolume-huawei.com/fuxivol", "tenant.kubernetes.io/domain-id": "f0c61dbd65974140956ed37a91ea860f", "tenant.kubernetes.io/project-id": "cdb4249297a44665a63eec4f27ad09bf" }, "finalizers": [ "kubernetes.io/pv-protection" ] }, "spec": { "capacity": { "storage": "10Gi" }, "flexVolume": { "driver": "huawei.com/fuxivol", "fsType": "ext4", "options": { "fsType": "ext4", "volumeID": "06e10708-6412-4190-8496-f9531fb5fd0c" } }, "accessModes": [ "ReadWriteMany" ], "claimRef": { "kind": "PersistentVolumeClaim", "namespace": "test-namespace", "name": "cci-evs-jxzqegxe-k1z3", "uid": "e82c1574-a46d-11e9-be8a-b44326d0c915", "apiVersion": "v1", "resourceVersion": "65003516" }, "persistentVolumeReclaimPolicy": "Delete", "storageClassName": "sata" }, "status": { "phase": "Bound" } }, "storageInfo": { "kind": "Volume", "apiVersion": "paas/v1beta1", "metadata": { "name": "pvc-e82c1574-a46d-11e9-be8a-b44326d0c915", "creationTimestamp": "2019-07-12T06:25:56Z", "labels": { "__system__volume_name": "pvc-e82c1574-a46d-11e9-be8a-b44326d0c915", "hw:passthrough": "true", "kubernetes.io/namespace": "test-namespace", "tenant.kubernetes.io/domain-id": "f0c61dbd65974140956ed37a91ea860f", "tenant.kubernetes.io/project-id": "cdb4249297a44665a63eec4f27ad09bf" } }, "spec": { "name": "pvc-e82c1574-a46d-11e9-be8a-b44326d0c915", "size": 10, "inresourcepool": false, "availability_zone": "cn-north-1a", "volume_type": "sata", "multiattach": true, "access": { "": { "access_type": "", "access_to": "", "access_level": "", "id": "", "state": "" } }, "vpc_id": "" }, "status": { "id": "06e10708-6412-4190-8496-f9531fb5fd0c", "status": "available", "created_at": "2019-07-12T06:25:56Z", "attachments": null, "app_info": null } } } ]
  • URI GET /api/v1/namespaces/{namespace}/extended-persistentvolumeclaims 表1 Path参数 参数 是否必选 参数类型 描述 namespace Yes String 命名空间。 表2 Query参数 参数 是否必选 参数类型 描述 storageType No String Type of storage,目前支持: bs: 云硬盘存储 nfs: 文件存储 efs: 极速文件存储 如果本参数未指定,将默认返回当前命名空间下bs(云硬盘存储)类型的PVC信息。
  • 响应消息 响应参数 表4 响应参数 参数 类型 描述 PersistentVolumeClaim Object 详情请参见表175。 响应示例 { "metadata": { "name": "pvc-import-evs", "namespace": "test-namespace", "selfLink": "/api/v1/namespaces/test-namespace/persistentvolumeclaims/pvc-import-evs", "uid": "17646a17-a471-11e9-be8a-b44326d0c915", "resourceVersion": "65016560", "creationTimestamp": "2019-07-12T06:48:44Z", "annotations": { "kubernetes.io/volumeId": "378dfa73-3ae4-4179-81c0-67699976b505" } }, "spec": { "accessModes": [ "ReadWriteMany" ], "resources": { "requests": { "storage": "10" } }, "storageClassName": "sata" }, "status": { "phase": "Pending" } }
  • 功能介绍 导入已有存储到指定的命名空间。 当前支持导入EVS(云硬盘卷,块存储)、SFS(文件存储卷)、SFS Turbo(极速文件存储卷)、OBS(对象存储卷),使用时 spec.storageClassName 参数的取值如下: sata:普通I/O云硬盘卷 sas:高I/O云硬盘卷 ssd:超高I/O云硬盘卷 nfs-rw:标准文件协议类型文件存储卷 efs-performance:性能型极速文件存储卷 efs-standard:标准型极速文件存储卷 obs:对象存储卷 回收策略采用 DELETE,即PVC被删除后,立即删除存储。如果需要保留存储,可使用解绑存储接口。 OBS对象存储包含“对象桶”和“并行文件系统”两种类型。并行文件系统是OBS提供的一种经过优化的高性能文件系统,提供毫秒级别访问时延,以及TB/s级别带宽和百万级别的IOPS,相较于OBS对象存储在稳定性、性能上更具优势。因此如需通过挂载方式,生产环境中推荐您使用OBS并行文件系统,而不推荐OBS对象存储。
  • 请求消息 请求参数 表2 PersistentVolumeClaim v1 数据结构说明 参数 是否必选 参数类型 描述 apiVersion Yes String APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. kind Yes String Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. metadata Yes Object Standard object's metadata. 详情请参见表10。 其中annotations字段请参见表3。 spec Yes Object Spec defines the desired characteristics of a volume requested by a pod author. 详情请参见表177。 status No Object Status represents the current information/status of a persistent volume claim. Read-only. 详情请参见表178。 表3 metadata.annotations字段说明 参数 是否必选 参数类型 描述 fsType Yes String 文件系统名称。可设置为: 块存储:ext4 对象存储: obs 文件存储、极速文件存储: nfs volumeID Yes String 卷id。 deviceMountPath No String 共享路径。 说明: 只有文件存储卷和极速文件存储卷需要设置该值。 请求示例 { "apiVersion": "v1", "kind": "PersistentVolumeClaim", "metadata": { "annotations": { "fsType": "nfs", "volumeID": "378dfa73-3ae4-4179-81c0-67699976b505", "deviceMountPath": "sfs-nas01.cn-north-4b.myhuaweicloud.com:/share-84b38e4d" }, "name": "cci-sfs-jxre8q80-ylpd", "namespace": "test-namespace" }, "spec": { "resources": { "requests": { "storage": "10Gi" } }, "storageClassName": "nfs-rw" } }
  • 基本概念 账号 用户注册时的账号,账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用用户进行日常管理工作。 用户 由账号在 IAM 中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 在我的凭证下,您可以查看账号ID和IAM用户ID。通常在调用API的鉴权过程中,您需要用到账号、用户和密码等信息。 区域(Region) 从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 详情请参见区域和可用区。 可用区(AZ,Availability Zone) 一个可用区是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 项目 区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。如果您希望进行更加精细的权限控制,可以在区域默认的项目中创建子项目,并在子项目中创建资源,然后以子项目为单位进行授权,使得用户仅能访问特定子项目中的资源,使得资源的权限控制更加精确。 图1 项目隔离模型 同样在我的凭证下,您可以查看项目ID。 企业项目 企业项目是项目的升级版,针对企业不同项目间的资源进行分组和管理,是逻辑隔离。企业项目中可以包含多个区域的资源,且项目中的资源可以迁入迁出。 关于企业项目ID的获取及企业项目特性的详细信息,请参见《企业管理用户指南》。 父主题: 使用前必读
  • 概述 欢迎使用云容器实例(Cloud Container Instance)。云容器实例提供 Serverless Container(无服务器容器)引擎,让您无需创建和管理服务器集群即可直接运行容器。 您可以使用本文档提供API对云容器实例进行相关操作,如创建、删除、变更规格等。 在调用云容器实例API之前,请确保已经充分了解云容器实例相关概念,并对Kubernetes基本概念与知识有一定了解,详细信息请参见产品介绍。 父主题: 使用前必读
  • 错误码说明 当您使用云容器实例的API时,如果遇到“APIGW”开头的错误码,请参见API网关错误码进行处理。 状态码 错误码 错误信息 描述 处理措施 400 CCI.01.400101 request body error 请求错误: 请求体不合法 按接口文档排查请求体 400 CCI.01.400102 provide namespace requested 查询namespace详情失败:未指定待查询的namespace 请指定待查询的namespace,请修改后重试 400 CCI.01.400103 missing user token in the request header 创建网络失败:请求头未携带最终用户的token:X-User-Token 请求头携带最终用户的token:X-User-Token 400 CCI.01.400104 no agency quota found from iam,please enlarge your quota 委托配额不足,请到配额中心申请调整配额 请到配额中心申请调整配额 400 CCI.01.400105 must specify namespace name through fieldSelector, example: fieldSelector=metadata.name=namespaceName 必须通过fieldSelector来指定namespace名称,例如:fieldSelector=metadata.name=namespaceName 请通过fieldSelector来指定namespace名称 400 CCI.01.400106 volume import:request body error 卷导入接口的请求体不合法 按卷导入接口文档排查请求体 400 CCI.01.400107 enterprise id not valid 企业项目id不合法 企业项目id不合法,请修改后重试 400 CCI.01.400201 subnet cidr subnet inavlid:within the coverage of VPC, and no more subnets overlap 子网cidr非法:在vpc的覆盖范围内,不和其他的子网重叠 修改子网网段,不与其他子网重叠 400 CCI.01.400202 project id in network request body invaild 创建网络失败:请求体的Annotation中未携带project_id 请求体的Annotation中需携带project_id,请修改后重试 400 CCI.01.400301 storage type parametre invaild : nfs/obs/bs 存储类型参数错误,当前支持的存储类型有:nfs、obs和bs 存储类型参数错误,请修改后重试 400 CCI.01.400302 storage volume id format invaild: the beginning and end of a numeric letter, which may contain an underline in the middle of the numeric letter 存储卷id格式非法:数字字母的开头和结尾,数字字母的中间可以包含下划线 请修改存储卷id格式后重试 400 CCI.01.400303 storage volume id len invaild:no bigger than 64 存储卷id长度非法:最大长度为64 存储卷id长度最大为64,请修改后重试 400 CCI.01.400304 storage request body invaild 释放存储卷失败:delete_volume字段不合法 请修改delete_volume字段后重试 400 CCI.01.400305 storage volume not avalible 导入存储卷失败:存储卷状态异常 联系技术支持排查存储卷问题后重试 400 CCI.01.400306 storage volume is not found 导入存储卷失败:指定的存储卷不存在 请确定导入的存储卷存在后尝试 400 CCI.01.400307 nfs storage class type err,use “nfs-rw” 导入存储卷失败:指定的nfs存储的storageclass不支持,当前支持:nfs-rw 请导入nfs-rw 400 CCI.01.400308 storage volume type err ,avalible: sas/ssd/sata 导入存储卷失败:存储规格不支持,支持的规格为:sas、ssd和sata 请导入支持的存储格式,如 sas、ssd和sata 400 CCI.01.400309 storage volume already provisioned 导入存储卷失败:当前卷已经被导入 请确认当前卷是否已经被导入 400 CCI.01.400401 invalid billing request body: unsupported billing status billing接口失败:不支持的status字段 请修改支持的status字段 400 CCI.01.400402 invalid billing request body: unsupported billing resource type billing接口失败:不支持的resource type字段 请修改支持的resource type字段 400 CCI.01.400403 invalid billing request user: inner user can not be freeze or unfreeze billing接口失败:不支持操作内部租户 修改user为非内部用户 400 CCI.01.400404 invalid billing request body: resourceinfos can not match scene billing接口失败:不支持的scene字段 请修改支持的scene字段 500 CCI.01.500101 find no cluster endpoint for namespace xxx from icluster response header 通过namespace查询集群地址失败 联系技术支持解决 403 CCI.01.403009 your account is in arrears, please recharge 请求错误:账户欠费 请先给账户充值 403 CCI.01.403010 your account has been frozen, please contact customer service 请求错误:账户已被冻结 请提交工单联系客服处理 403 CCI.01.403101 only gpu beta users can use gpu in cci 请求出错:未申请GPU公测 请先申请GPU公测 403 CCI.01.403102 only obs beta users can use obs in cci 请求出错:未申请OBS公测 请先申请OBS公测 403 CCI.01.403103 user's token can not match auth token for resourceUser's 鉴权出错: token中domain与请求domain不匹配 请确认token中domain与请求domain相匹配 403 CCI.01.403104 current user has no right 鉴权出错:用户无权限进行当前操作 用户无权限进行当前操作,请确认当前用户是否有操作权限 403 CCI.01.403105 insufficient operation permission, require cci:namespace:create 创建命名空间失败,您可能没有cci:namespace:create权限 请向管理员申请namespace create权限 403 CCI.01.403106 insufficient operation permission, require cci:namespace:delete 删除命名空间失败,您可能没有cci:namespace:delete权限 请向管理员申请namespace delete权限 403 CCI.01.403107 insufficient operation permission, require cci:namespace:update 更新命名空间失败,您可能没有cci:namespace:update权限 请向管理员申请namespace update权限 403 CCI.01.403108 insufficient operation permission, require cci:namespace:get 获取命名空间失败,您可能没有cci:namespace:get权限 请向管理员申请namespace get权限 403 CCI.01.403109 insufficient operation permission, require cci:namespace:list 获取命名空间列表失败,您可能没有cci:namespace:list权限 请向管理员申请namespace list权限 403 CCI.01.403110 insufficient operation permission, require cci:namespaceSubResource:create 创建资源失败,您可能没有cci:namespaceSubResource:create权限 请向管理员申请namespaceSubResource create权限 403 CCI.01.403111 insufficient operation permission, require cci:namespaceSubResource:delete 删除资源失败,您可能没有cci:namespaceSubResource:delete权限 请向管理员申请namespaceSubResource delete权限 403 CCI.01.403112 insufficient operation permission, require cci:namespaceSubResource:update 更新资源失败,您可能没有cci:namespaceSubResource:update权限 请向管理员申请namespaceSubResource update权限 403 CCI.01.403113 insufficient operation permission, require cci:namespaceSubResource:get 获取资源失败,您可能没有cci:namespaceSubResource:get权限 请向管理员申请namespaceSubResource get权限 403 CCI.01.403114 insufficient operation permission, require cci:namespaceSubResource:list 获取资源列表失败,您可能没有cci:namespaceSubResource:list权限 请向管理员申请namespaceSubResource list权限 404 CCI.01.404101 no agency found for user 请求出错:查找的授信关系不存在 请登录前端界面,选到对应region的CCI服务,点击“服务授权”中“同意授权”,CCI将创建委托 401 CCI.01.401102 user has no agency to cci,please apply a agency to cci 请求失败,请先授信CCI服务 请先授信CCI服务 403 CCI.04.403112 Chart must have same name and version with original chart 更新模板失败:模板版本和名称必须与原始模板一致 请确保模板版本和名称必须与原始模板一致 403 CCI.04.403124 The official charts is forbidden to be downloaded 下载模板错误:官方模板禁止下载 请联系技术支持 403 CCI.04.403125 Chart is used, can't deleted 模板删除失败:有应用使用了该模板 请联系技术支持 403 CCI.04.403126 The chart is deprecated, please select a higher version 当前选择的模板版本已废弃,请选择更新的版本 请选择更新的版本 403 CCI.04.403129 Only addon charts have readme.md now, the target chart is not an addon chart 操作失败,readme.md关联的不是插件模板 请关联插件模板 403 CCI.04.403130 Not allowed to update chart belong to other tenant 请求失败:禁止操作其他用户的模板 禁止操作其他用户的模板 403 CCI.04.403131 Update release is forbidden:The status of release is not DEPLOYED or FAILED 更新失败:当前应用状态不支持更新,安装成功/失败的应用支持更新 请联系技术支持 400 CCI.04.400104 Validate chart version failed 请求失败:模板版本不合法,版本格式要求:长度不大于64位且需满足SemVer语义化版本控制规范。正确示例:1.0.0、1.0.0-alpha、1.0.0-alpha+001 请提供符合版本格式要求的模板版本 400 CCI.04.400105 the ID should not be empty 模板ID不能为空 请输入正确的模板ID 400 CCI.04.400111 Only addon allowed 请求失败:该请求只支持插件模板 请提供插件模板 400 CCI.04.400112 the length of ID is more than 64 请求失败:模板ID长度超过最大64位限制 请输入正确的模板ID 400 CCI.04.400113 Chart ID format is Invalid, must match the regex 请求失败:模板ID格式出错 请输入正确的模板ID 400 CCI.04.400118 Validate chart failed 请求失败:模板文件格式错误,文件后缀名必须是"tgz",默认最大长度为2兆 请提供文件后缀名是"tgz",默认长度为2兆内的模板文件 400 CCI.04.400119 Chart file not found 请求失败: 模板文件内容为空 请提供内容不为空的模板文件 400 CCI.04.400121 Chart format is invalid,Chart package name and version must be same with chart name and version 模板包格式错误,模板包名称和版本必须与模板名称和版本一致 请提供模板包名称和版本与模板名称和版本一致的模板包 400 CCI.04.400126 No target version selected, select one please 请求失败:未指定插件版本 请指定插件版本 400 CCI.04.400131 Unsupport language 删除readme文件出错:请求参数的语言模式不正确,当前仅支持中文和英文 请确保readme文件的语言模式为中文或英文 400 CCI.04.400201 Invalid release name 请求失败:实例名称不能为空 请输入正确的实例名称 400 CCI.04.400202 Release name length error 请求失败:实例名长度超过24限制 请输入正确的实例名称 400 CCI.04.400203 Release name not match regex 请求失败:实例名不符合格式要求。格式要求:字母开头,字母/数字结尾,中间支持字母、数字和中划线 请输入正确的实例名称 400 CCI.04.400214 The update action must be either upgrade or rollback 更新应用失败: 请求的action不合法,支持:upgrade和rollback 请求的action只支持upgrade和rollback 400 CCI.04.400218 Invalid release version 请求失败:请求的version字段不合法 请输入正确的version字段 400 CCI.04.400302 Failed to Unmarshal 请求失败,请检查body格式是否正确 请提供正确的body格式 400 CCI.04.400304 The request body is too large 请求失败:模板包超过了2M的最大限制 请确保模板包小于2M 400 CCI.04.400306 Validate chart package failed 校验模板包格式时发生错误,请检查模板中yaml文件格式是否正确 请检查模板中yaml文件格式是否正确 404 CCI.04.404204 Release not found 请求失败:查询的应用不存在 请查询正确的应用 409 CCI.04.409112 The chart is already existed in database 模板上传失败,模板名字已存在 请修改模板名字后重试 409 CCI.04.409123 The chart name is conflict with public charts 模板上传失败,模板名与官方模板名冲突 请修改模板名字后重试 409 CCI.04.409213 Release already exists in this cluster 创建实例失败,实例名称重复 请修改实例名称后重试 400 CCI.02.400101 ummarshal ERROR:BadNamespaceRequestBody 创建namespace失败:请求结构体错误 根据接口文档排查请求体错误 400 CCI.02.400102 get service account tenant name failed 资源租户获取租户名失败:资源租户不在白名单内 请获取存在白名单内的租户 400 CCI.02.400103 Unsupported Content Type 请求携带文本类型错误 请提供正确的文本类型 400 CCI.02.400104 ummarshal ERROR:BadQuotaRequestBody 创建配额失败:请求结构体错误 请提供正确的结构体 400 CCI.02.400105 update quotas failed 配额更新失败 请联系技术支持 400 CCI.02.400106 used namespaces exceeds quota, could not create any more 创建namespace失败:namespace配额不足 请联系技术支持 400 CCI.02.400107 delete namespace failed, namespace is empty 删除namespace失败:namespace为空,无法删除 请删除不为空的namespace 400 CCI.02.400108 get flavor info by name failed,flavor name is empty 通过name查询flavor信息失败:name字段为空 请输入正确的name字段 400 CCI.02.400109 Create namespace failed: NamespaceNameInvalid 创建namespace失败:Name字段不合法 请输入正确的name字段 400 CCI.02.400110 Create namespace failed: NamespaceFlavorInvalid 创建namespace失败:Flavor字段不合法 请输入正确的Flavor字段 400 CCI.02.400111 Create namespace failed: NamespaceFlavorMissed 创建namespace失败:Flavor字段为空 请输入正确的Flavor字段 400 CCI.02.400112 Create namespace failed: NamespaceDomainIDMissed 创建namespace失败:DomainID字段为空 请输入正确的DomainID字段 400 CCI.02.400113 Create namespace failed: NamespaceProjectIDMissed 创建namespace失败:ProjectID字段为空 请输入正确的ProjectID字段 400 CCI.02.400114 Get namespace failed: NamespaceProjectIDMissed 查询namespace失败:ProjectID字段为空 请输入正确的ProjectID字段 400 CCI.02.400116 Get available cluster info from resourcemanager failed: NoAllocatedCluster 创建namespace失败:当前集群资源不足,请稍后重试 请联系技术支持 400 CCI.02.400117 Get namespace failed: PaginationParameterInvalid 查询namespace失败:分页参数不合法 请输入正确的分页参数 400 CCI.02.400118 Create namespace failed: EnterpriseProjectIDEmpty 创建namespace失败:企业项目ID为空 请输入正确的企业项目ID 400 CCI.02.400119 Create namespace failed: EnterpriseProjectNotSupported 创建namespace失败:不支持设置企业项目 请联系技术支持 404 CCI.02.404101 flavor not found 查询flavor信息失败:请求flavor不存在 请查询正确的flavor 404 CCI.02.404102 resourcequota not found 查询资源配额信息失败:请求资源配额不存在 请查询正确的资源配额 404 CCI.02.404103 quota not found 查询配额信息失败:请求配额不存在 请查询正确的资源配额 409 CCI.02.409101 namespace name is already exist 创建namespace失败:namespace名称已存在 请修改namespace名称后重试 409 CCI.02.409102 Failed to migrate the namespace 迁移namespace失败:namespace已属于专属节点 请选择非专属命名空间 500 CCI.03.500102 Internal error 内部错误:与 CS B交互时出错 请联系客服或等待一段时间后重试 500 CCI.03.500101 Return error 返回出错:返回体JSON转换失败 请联系客服或等待一段时间后重试 500 CCI.03.500002 Database request error 数据库请求出错 请联系客服或等待一段时间后重试 500 CCI.03.500001 An internal processing error occurs 内部处理错误 请联系客服或等待一段时间后重试 400 CCI.03.400105 Request error 请求错误:未携带套餐包信息 请传入有效订单请求 400 CCI.03.400106 Request failed 请求失败:当前用户无权购买该套餐包 请联系客服申请开通购买权限 400 CCI.03.400107 Request failed 请求失败:当前用户购买该套餐包总数已达上限 请在当前套餐包使用完后继续购买 400 CCI.03.400108 Request failed 请求失败:当前用户指定周期内购买该套餐包数量已达上限 请在下个周期内继续购买 400 CCI.02.400122 Failed to migrate the namespace. 迁移namespace失败:namespace状态异常 请修复命名空间状态后重试 400 CCI.02.400121 Failed to migrate the namespace. 迁移namespace失败:namespace下无可用专属节点 请联系客服购买专属节点 400 CCI.03.400109 Request failed 请求失败:该套餐包剩余可购买数量不足 请扩大套餐包配额或者减少购买量 400 CCI.02.400120 Failed to migrate the namespace. 迁移namespace失败:按需弹性承载参数不合法 请配置有效参数 400 CCI.03.400110 Request failed 请求失败:无效的活动套餐包 请购买有效套餐包 400 CCI.03.400111 Request failed 请求失败:活动ID无效,可能为空或字段过长 请输入有效活动ID 400 CCI.03.400001 The request does not carry a token 请求未携带token 请在请求体中携带有效token 400 CCI.03.400101 Request error 请求错误:请求体不合法 请传入有效请求体 400 CCI.03.400102 Request error 请求错误:请求体JSON解析失败 请传入有效订单请求 400 CCI.03.400103 Request failed 请求失败:Token缺失用户信息 请传入有效Token 400 CCI.03.400104 Request failed 请求失败:无效的POC套餐包 请购买有效套餐包
  • 错误响应Body体格式说明 当接口调用出错时,会返回错误码及错误信息说明,错误响应的Body体格式如下所示。 { "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "namespace name is already exist", "reason": "Conflict", "code": 409, "errorCode": "CCI.02.409101" } 其中,code表示HTTP状态码,errorCode表示错误码,message表示错误描述信息。
  • 调用API获取项目ID 项目ID可以通过调用查询指定条件下的项目列表API获取。 获取项目ID的接口为“GET https://{Endpoint}/v3/projects”,其中{Endpoint}为IAM的终端节点,可以从地区和终端节点获取。接口的认证鉴权请参见认证鉴权。 响应示例如下,其中projects下的“id”即为项目ID。 { "projects": [ { "domain_id": "65ewtrgaggshhk1223245sghjlse684b", "is_domain": false, "parent_id": "65ewtrgaggshhk1223245sghjlse684b", "name": "project_name", "description": "", "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects/a4adasfjljaaaakla12334jklga9sasfg" }, "id": "a4adasfjljaaaakla12334jklga9sasfg", "enabled": true } ], "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects" } }
  • 授权项分类 表1 Namespace 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Namespace POST /api/v1/namespaces CCI:namespace:create √ √ 查询namespace GET /api/v1/namespaces/{name} CCI:namespace:get √ √ 列出namespaces GET /api/v1/namespaces CCI:namespace:list √ √ 删除namespace DELETE /api/v1/namespaces/{name} CCI:namespace:delete √ √ 表2 Pod 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Pod POST /api/v1/namespaces/{namespace}/pods CCI:namespaceSubResource:Create √ √ 查询Pod GET /api/v1/namespaces/{namespace}/pods/{name} CCI:namespaceSubResource:Get √ √ 查询指定Namespace下所有Pod GET /api/v1/namespaces/{namespace}/pods CCI:namespaceSubResource:List √ √ 查询Pod状态 GET /api/v1/namespaces/{namespace}/pods/{name}/status CCI:namespaceSubResource:Get √ √ 查询Pod日志 GET /api/v1/namespaces/{namespace}/pods/{name}/log CCI:namespaceSubResource:Get √ √ 列出用户所有的Pod GET /api/v1/pods cci:namespaceSubResource:List √ √ 替换Pod PUT /api/v1/namespaces/{namespace}/pods/{name} CCI:namespaceSubResource:Update √ √ 更新Pod PATCH /api/v1/namespaces/{namespace}/pods/{name} CCI:namespaceSubResource:Update √ √ 删除Pod DELETE /api/v1/namespaces/{namespace}/pods/{name} CCI:namespaceSubResource:Delete √ √ 删除所有Pod DELETE /api/v1/namespaces/{namespace}/pods CCI:namespaceSubResource:Delete √ √ 表3 Deployment 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Deployment POST /apis/apps/v1/namespaces/{namespace}/deployments CCI:namespaceSubResource:Create elb:loadbalancers:create √ √ 查询Deployment GET /apis/apps/v1/namespaces/{namespace}/deployments/{name} CCI:namespaceSubResource:Get √ √ 查询Namespace下所有Deployment GET /apis/apps/v1/namespaces/{namespace}/deployments CCI:namespaceSubResource:List √ √ 查询Deployment的状态 GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status CCI:namespaceSubResource:Get √ √ 查询Deployment伸缩操作 GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale CCI:namespaceSubResource:Get √ √ 列出用户所有的Deployment GET /apis/apps/v1/deployments CCI:namespaceSubResource:List √ √ 替换Deployment PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name} CCI:namespaceSubResource:Update √ √ 替换Deployment伸缩操作 PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale CCI:namespaceSubResource:Update √ √ 更新Deployment PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name} CCI:namespaceSubResource:Update √ √ 更新Deployment伸缩操作 PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale CCI:namespaceSubResource:Update √ √ 删除Deployment DELETE /apis/apps/v1/namespaces/{namespace}/deployments/{name} CCI:namespaceSubResource:Delete √ √ 删除Namespace下所有Deployment DELETE /apis/apps/v1/namespaces/{namespace}/deployments CCI:namespaceSubResource:Delete √ √ 表4 StatefulSet 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建StatefulSet POST /apis/apps/v1/namespaces/{namespace}/statefulsets CCI:namespaceSubResource:Create elb:loadbalancers:create √ √ 查询StatefulSet GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} CCI:namespaceSubResource:Get √ √ 查询指定Namespace下所有StatefulSet GET /apis/apps/v1/namespaces/{namespace}/statefulsets CCI:namespaceSubResource:List √ √ 查询StatefulSet状态 GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status CCI:namespaceSubResource:Get √ √ 列出用户所有的Statefulset GET /apis/apps/v1/statefulsets CCI:namespaceSubResource:List √ √ 替换StatefulSet PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} CCI:namespaceSubResource:Update √ √ 更新StatefulSet PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} CCI:namespaceSubResource:Update √ √ 删除StatefulSet DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets/{name} CCI:namespaceSubResource:Delete √ √ 删除所有StatefulSet DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets CCI:namespaceSubResource:Delete √ √ 表5 Job 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Job POST /apis/batch/v1/namespaces/{namespace}/jobs CCI:namespaceSubResource:Create elb:loadbalancers:create √ √ 查询Job GET /apis/batch/v1/namespaces/{namespace}/jobs/{name} CCI:namespaceSubResource:Get √ √ 查询指定Namespace下所有Job GET /apis/batch/v1/namespaces/{namespace}/jobs CCI:namespaceSubResource:List √ √ 查询Job状态 GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status CCI:namespaceSubResource:Get √ √ 列出用户所有Job GET /apis/batch/v1/jobs CCI:namespaceSubResource:List √ √ 替换Job PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name} CCI:namespaceSubResource:Update √ √ 更新Job PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name} CCI:namespaceSubResource:Update √ √ 删除Job DELETE /apis/batch/v1/namespaces/{namespace}/jobs/{name} CCI:namespaceSubResource:Delete √ √ 删除所有Job DELETE /apis/batch/v1/namespaces/{namespace}/jobs CCI:namespaceSubResource:Delete √ √ 表6 Service 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Service POST /api/v1/namespaces/{namespace}/services CCI:namespaceSubResource:Create elb:loadbalancers:create √ √ 查询Service GET /api/v1/namespaces/{namespace}/services/{name} CCI:namespaceSubResource:Get √ √ 查询所有Service GET /api/v1/namespaces/{namespace}/services CCI:namespaceSubResource:List √ √ 查询Service状态 GET /api/v1/namespaces/{namespace}/services/{name}/status CCI:namespaceSubResource:Get √ √ 删除Service DELETE /api/v1/namespaces/{namespace}/services/{name} CCI:namespaceSubResource:Delete √ √ 表7 Ingress 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Ingress POST /apis/extensions/v1beta1/namespaces/{namespace}/ingresses CCI:namespaceSubResource:Create elb:loadbalancers:create √ √ 查询Ingress GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} CCI:namespaceSubResource:Get √ √ 查询所有Ingress GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses CCI:namespaceSubResource:List √ √ 查询Ingress状态 GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status CCI:namespaceSubResource:Get √ √ 替换Ingress PUT /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} CCI:namespaceSubResource:Update √ √ 更新Ingress PATCH /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} CCI:namespaceSubResource:Update √ √ 删除Ingress DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name} CCI:namespaceSubResource:Delete √ √ 删除所有Ingress DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses CCI:namespaceSubResource:Delete √ √ 表8 Network 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Network POST /apis/networking.cci.io/v1beta1/namespaces/{namespace}/networks CCI:network:Create vpc:vpcs:create vpc:ports:create vpc:vpcs:get vpc:subnets:get vpc:publicIps:get vpc:bandwidths:get vpc:ports:get vpc:peerings:get vpc:quotas:list vpc:privateIps:get vpc:securityGroups:get vpc:securityGroupRules:get vpc:networks:get vpc:routers:get vpc:floatingIps:get vpc:firewallRules:get √ √ 查询Network GET /apis/networking.cci.io/v1beta1/namespaces/{namespace}/networks/{name} CCI:network:Get √ √ 查询所有Network GET /apis/networking.cci.io/v1beta1/namespaces/{namespace}/networks CCI:network:List √ √ 查询Network状态 GET /apis/networking.cci.io/v1beta1/namespaces/{namespace}/networks/{name}/status CCI:network:Get √ √ 删除Network DELETE /apis/networking.cci.io/v1beta1/namespaces/{namespace}/networks/{name} CCI:network:Delete vpc:vpcs:delete vpc:ports:delete √ √ 删除所有Network对象 DELETE /apis/networking.cci.io/v1beta1/namespaces/{namespace}/networks CCI:network:Delete vpc:vpcs:delete vpc:ports:delete √ √ 表9 PersistentVolumeClaim 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建PersistentVolumeClaim POST /api/v1/namespaces/{namespace}/persistentvolumeclaims CCI:namespaceSubResource:Create 云硬盘存储卷 evs:volumes:create evs:volumes:get evs:types:get 文件存储卷 sfs:shares:createShare sfs:shares:getOSQuotaSets sfs:shares:ShareAction √ √ 查询PersistentVolumeClaim GET /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name} CCI:namespaceSubResource:Get 云硬盘存储卷 evs:volumes:get 文件存储卷 sfs:shares:getAllSharesDetail √ √ 查询所有PersistentVolumeClaim GET /api/v1/namespaces/{namespace}/persistentvolumeclaims CCI:namespaceSubResource:List 云硬盘存储卷 evs:volumes:list 文件存储卷 sfs:shares:getAllSharesDetail sfs:shares:ShareAction 对象存储卷 obs:bucket:ListAllMyBuckets √ √ 删除PersistentVolumeClaim DELETE /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name} CCI:namespaceSubResource:Delete 云硬盘存储卷 evs:volumes:delete evs:volumes:get 文件存储卷 sfs:shares:deleteShare √ √ 表10 ConfigMap 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建ConfigMap POST /api/v1/namespaces/{namespace}/configmaps CCI:namespaceSubResource:Create √ √ 查询ConfigMap GET /api/v1/namespaces/{namespace}/configmaps/{name} CCI:namespaceSubResource:Get √ √ 查询所有ConfigMap GET /api/v1/namespaces/{namespace}/configmaps CCI:namespaceSubResource:List √ √ 替换ConfigMap PUT /api/v1/namespaces/{namespace}/configmaps/{name} CCI:namespaceSubResource:Update √ √ 更新ConfigMap PATCH /api/v1/namespaces/{namespace}/configmaps/{name} CCI:namespaceSubResource:Update √ √ 删除ConfigMap DELETE /api/v1/namespaces/{namespace}/configmaps/{name} CCI:namespaceSubResource:Delete √ √ 删除所有ConfigMap DELETE /api/v1/namespaces/{namespace}/configmaps CCI:namespaceSubResource:Delete √ √ 表11 Secret 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建Secret POST /api/v1/namespaces/{namespace}/secrets CCI:namespaceSubResource:Create √ √ 替换Secret PUT /api/v1/namespaces/{namespace}/secrets/{name} CCI:namespaceSubResource:Update √ √ 更新Secret PATCH /api/v1/namespaces/{namespace}/secrets/{name} CCI:namespaceSubResource:Update √ √ 删除Secret DELETE /api/v1/namespaces/{namespace}/secrets/{name} CCI:namespaceSubResource:Delete √ √ 删除所有Secret DELETE /api/v1/namespaces/{namespace}/secrets CCI:namespaceSubResource:Delete √ √ 表12 ClusterRole 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 获取指定的ClusterRole GET /apis/rbac.authorization.k8s.io/v1/clusterroles/{name} CCI:rbac:Get √ √ 获取ClusterRole列表 GET /apis/rbac.authorization.k8s.io/v1/clusterroles CCI:rbac:List √ √ 表13 RoleBinding 权限 对应API接口 授权项 IAM项目(Project) 企业项目(Enterprise Project) 创建RoleBinding POST /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings CCI:rbac:Create √ √ 更新指定的RoleBinding PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} CCI:rbac:Update √ √ 替换指定的RoleBinding PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} CCI:rbac:Update √ √ 删除指定的RoleBinding DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} CCI:rbac:Delete √ √ 获取指定的RoleBinding GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name} CCI:rbac:Get √ √ 获取指定namespace下RoleBinding列表 GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings CCI:rbac:List √ √ 获取RoleBinding列表 GET /apis/rbac.authorization.k8s.io/v1/rolebindings CCI:rbac:List √ √ 父主题: 权限和授权项
  • 支持的授权项 策略包含系统策略和自定义策略,如果系统策略不满足授权要求,管理员可以创建自定义策略,并通过给用户组授予自定义策略来进行精细的访问控制。策略支持的操作与API相对应,授权项列表说明如下: 权限:允许或拒绝某项操作。 对应API接口:自定义策略实际调用的API接口。 授权项:自定义策略中支持的Action,在自定义策略中的Action中写入授权项,可以实现授权项对应的权限功能。 IAM项目(Project)/企业项目(Enterprise Project):自定义策略的授权范围,包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目,表示此授权项对应的自定义策略,可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目,不支持企业项目,表示仅能在IAM中给用户组授权并生效,如果在企业管理中授权,则该自定义策略不生效。关于IAM项目与企业项目的区别,详情请参见:IAM与企业管理的区别。 “√”表示支持,“x”表示暂不支持。 云容器实例(CCI)支持的自定义策略授权项如下所示: Namespace,Namespace对象管理接口,包括Namespace对象的创建、查询、修改、删除等接口。 Pod,Pod对象管理接口,包括Pod对象的查询接口。 Deployment,Deployment对象管理接口,包括Deployment对象的创建、查询、修改、删除等接口。 StatefulSet,Statefulset对象管理接口,包括Statefulset对象的创建、查询、修改、删除等接口。 Job,Job对象管理接口,包括Job对象的创建、查询、修改、删除等接口。 Service,Service对象管理接口,包括Service对象的创建、查询、修改、删除等接口。 Ingress,Ingress对象管理接口,包括Ingress对象的创建、查询、修改、删除等接口。 Network,Network对象管理接口,包括Network对象的创建、查询、删除等接口。 PersistentVolumeClaim,PersistentVolumeClaim对象管理接口,包括PersistentVolumeClaim对象的创建、查询、修改、删除等接口。 ConfigMap,Configmap对象管理接口,包括Configmap对象的创建、查询、修改、删除等接口。 Secret,Secret对象管理接口,包括Secret对象的创建、查询、修改、删除等接口。 ClusterRole,ClusterRole对象管理接口,包括ClusterRole的查询等接口。 RoleBinding,RoleBinding对象管理接口,包括RoleBinding对象的创建、查询、修改、删除等接口。
  • 状态码 状态码 编码 状态说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。 例如,切换到HTTP的新版本协议。 200 OK GET、PUT、POST操作正常返回。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 NoContent 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 BadRequest 非法请求。 建议直接修改该请求,不要重试该请求。 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 NotFound 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 MethodNotAllowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Time-out 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested range not satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 UnprocessableEntity 请求格式正确,但是由于含有语义错误,无法响应。 429 TooManyRequests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 InternalServerError 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 ServiceUnavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 ServerTimeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。 父主题: 附录
  • 创建Nginx负载 调用创建Namespace接口创建命名空间,并指定使用GPU型资源。 { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "namespace-test", "annotations": { "namespace.kubernetes.io/flavor": "gpu-accelerated" } }, "spec": { "finalizers": [ "kubernetes" ] } } 您需要指定如下参数。 name:命名空间的名称。 namespace.kubernetes.io/flavor:命名空间的类型,当前支持GPU加速型(gpu-accelerated)和通用计算型(general-computing)。GPU加速型命名空间中可以使用GPU显卡。 调用创建Network接口创建网络,与VPC与子网关联。 { "apiVersion": "networking.cci.io/v1beta1", "kind": "Network", "metadata": { "name": "test-network", "annotations": { "network.alpha.kubernetes.io/default-security-group": "security-group-id", "network.alpha.kubernetes.io/domain-id": "domain-id", "network.alpha.kubernetes.io/project-id": "project-id" } }, "spec": { "cidr": "192.168.0.0/24", "attachedVPC": "vpc-id", "networkID": "network-id", "subnetID": "subnet-id", "networkType": "underlay_neutron" } } 您需要指定如下参数。 name:网络对象的名称。 network.alpha.kubernetes.io/default-security-group:安全组ID,您可以在安全组控制台查看。 network.alpha.kubernetes.io/domain-id:账号ID,获取方法请参见获取账号ID。 network.alpha.kubernetes.io/project-id:项目ID,获取方法请参见获取项目ID。 cidr:网段地址,虚拟私有云下可用子网的范围。 attachedVPC:命名空间所在VPC(虚拟私有云)的ID,您可以在虚拟私有云控制台中查询,也可以通过查询VPC列表API查询。 networkID:VPC内子网的网络ID,您可以在虚拟私有云控制台中查询,也可以通过查询子网列表API查询。 subnetID:VPC内子网的ID,您可以在虚拟私有云控制台中查询,也可以通过查询子网列表API查询。 调用创建Deployment接口创建nginx容器负载。 负载名称为nginx,使用开源镜像中心的nginx:latest镜像,容器的资源规格为0.25核CPU、1G内存。调用接口后,云容器实例会创建一个运行nginx的容器。 { "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "nginx" }, "spec": { "replicas": 1, "selector": { "matchLabels": { "app": "nginx" } }, "template": { "metadata": { "labels": { "app": "nginx" } }, "spec": { "containers": [ { "image": "nginx:latest", "name": "container-0", "resources": { "limits": { "cpu": "250m", "memory": "1Gi" }, "requests": { "cpu": "250m", "memory": "1Gi" } } } ], "imagePullSecrets": [ { "name": "imagepull-secret" } ] } } } } 您需要指定如下参数。 name:Deployment的名称。 replicas:Pod的数量,即Deployment下有几个Pod。 selector.matchLabels:Deployment使用哪些标签选择Pod,例如这里设置的标签app=nginx,当Pod有这个标签时,就会被Deployment选中管理。 template:Pod的模板,定义Pod的各种配置和规格。 metadata.labels:Pod的标签。 spec.containers:Pod中容器的定义。 image:创建容器使用的镜像。 resources.limits:容器使用资源的大小限制,即容器使用的资源不能超过这个限制。 resources.requests:容器申请使用资源的大小。 Nginx负载创建完后,您可以在云容器实例控制台云容器实例控制台查看到负载。 图1 nginx
  • 请求消息体(可选) 该部分可选。请求消息体通常以结构化格式(如JSON或XML)发出,与请求消息头中Content-Type对应,传递除请求消息头之外的内容。若请求消息体中的参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于管理员创建IAM用户接口,您可以从接口的请求部分看到所需的请求参数及参数说明,将消息体加入后的请求如下所示,其中加粗的字段需要根据实际值填写。 accountid为IAM用户所属的账号ID。 username为要创建的IAM用户名。 email为IAM用户的邮箱。 **********为IAM用户的登录密码。 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users Content-Type: application/json X-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=**************** { "user": { "domain_id": "accountid", "name": "username", "password": "**********", "email": "email", "description": "IAM User Description" } } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中的“X-Subject-Token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务您正在请求什么类型的操作。 表2 HTTP方法 方法 说明 GET 请求服务器返回指定资源。 PUT 请求服务器更新指定资源。 POST 请求服务器新增资源或执行特殊操作。 DELETE 请求服务器删除指定资源,如删除对象等。 HEAD 请求服务器资源头部。 PATCH 请求服务器更新资源的部分内容。 当资源不存在的时候,PATCH可能会去创建一个新的资源。 在管理员创建IAM用户的URI部分,您可以看到其请求方法为“POST”,则其请求为: 1 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 详细的公共请求消息头字段请参见表3。 表3 公共请求消息头 名称 描述 是否必选 示例 Host 请求的服务器信息,从服务API的URL中获取。值为hostname[:port]。端口缺省时使用默认的端口,https的默认端口为443。 否 使用AK/SK认证时该字段必选。 code.test.com or code.test.com:443 Content-Type 消息体的类型(格式)。推荐用户使用默认值application/json,有其他取值时会在具体接口中专门说明。 是 application/json Content-Length 请求body长度,单位为Byte。 否 3495 X-Project-Id project id,项目编号。请参考获取项目ID章节获取项目编号。 否 如果是专属云场景采用AK/SK认证方式的接口请求,或者多project场景采用AK/SK认证的接口请求,则该字段必选。 e9993fc787d94b6c886cbaa340f9c0f4 X-Auth-Token 用户Token。 用户Token也就是调用获取用户Token接口的响应值,该接口是唯一不需要认证的接口。 请求响应成功后在响应消息头(Headers)中包含的“X-Subject-Token”的值即为Token值。 否 使用Token认证时该字段必选。 注:以下仅为Token示例片段。 MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ API同时支持使用AK/SK认证,AK/SK认证使用SDK对请求进行签名,签名过程会自动往请求中添加Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。 AK/SK认证的详细说明请参见认证鉴权的“AK/SK认证”。 对于管理员创建IAM用户接口,使用AK/SK方式认证时,添加消息头后的请求如下所示。 1 2 3 4 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users Content-Type: application/json X-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=****************
  • 请求URI 请求URI由如下部分组成: {URI-scheme}://{Endpoint}/{resource-path}?{query-string} 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 表1 URI中的参数说明 参数 描述 URI-scheme 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 指定承载REST服务端点的服务器 域名 或IP,不同服务不同区域的Endpoint不同,您可以从地区和终端节点获取。 例如IAM服务在“华北-北京四”区域的Endpoint为“iam.cn-north-4.myhuaweicloud.com”。 resource-path 资源路径,即API访问路径。从具体API的URI模块获取,例如“获取用户Token”API的resource-path为“/v3/auth/tokens”。 query-string 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“?limit=10”,表示查询不超过10条数据。 例如您需要创建IAM用户,由于IAM为全局服务,则使用任一区域的Endpoint,比如“华北-北京四”区域的Endpoint(iam.cn-north-4.myhuaweicloud.com),并在管理员创建IAM用户的URI部分找到resource-path(/v3.0/OS-USER/users),拼接起来如下所示。 1 https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users 图1 URI示意图 为方便查看,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • Token认证 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头中,从而通过身份认证,获得操作API的权限。Token可通过调用获取用户Token接口获取。 调用本服务API需要项目级别的Token,即调用获取用户Token接口时,请求body中auth.scope的取值需要选择project,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", //IAM用户名 "password": $ADMIN_PASS, //IAM用户密码,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全 "domain": { "name": "domainname" //IAM用户所属账号名 } } } }, "scope": { "project": { "name": "xxxxxxxx" //项目名称 } } } } 获取Token 后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。 1 2 3 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users Content-Type: application/json X-Auth-Token: ABCDEFJ.... 您还可以通过这个视频教程了解如何使用Token认证:https://bbs.huaweicloud.com/videos/101333。
  • AK/SK认证 AK/SK签名认证方式仅支持消息体大小在12MB以内,12MB以上的请求请使用Token认证。 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):私有访问密钥。与访问密钥ID结合使用,对请求进行加密签名,可标识发送方,并防止请求被修改。 使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见API签名指南。 签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。
  • 状态码 状态码 描述 200 OK 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
  • 如何配置安全组? RabbitMQ实例支持VPC内访问和公网访问,配置安全组的方式如下: VPC内访问实例 客户端只能部署在与RabbitMQ实例处于相同虚拟私有云(VPC)的弹性云服务器(ECS)上。 除了ECS、RabbitMQ实例必须处于相同VPC之外,还需要他们的安全组分别配置了正确的规则,客户端才能访问RabbitMQ实例。 建议ECS、RabbitMQ实例配置相同的安全组。安全组创建后,默认包含组内网络访问不受限制的规则。 如果配置了不同安全组,可参考如下配置方式: 假设ECS、RabbitMQ实例分别配置了安全组:sg-53d4、Default_All。 以下规则,远端可使用安全组,也可以使用具体的IP地址。 ECS所在安全组需要增加如下规则,以保证客户端能正常访问RabbitMQ实例。 图1 配置ECS安全组 表1 安全组规则 方向 协议端口 目的地址 出方向 全部放通 Default_All RabbitMQ实例所在安全组需要增加如下规则,以保证能被客户端访问。 图2 配置RabbitMQ实例安全组 表2 安全组规则 方向 协议端口 源地址 入方向 全部放通 sg-53d4 通过公网访问实例 RabbitMQ实例所在安全组需要增加如下规则,以保证能被客户端访问。 表3中的源地址以全网段放通为例,可根据实际安全需要修改为客户端的IP地址。 表3 安全组规则 方向 协议端口 源地址 入方向 TCP:5672 RabbitMQ客户端所在的IP地址或地址组 具体如图3所示。 图3 安全组规则1 父主题: 连接问题
  • 替代方案 未开启延迟消息插件的RabbitMQ实例,如果需要使用延迟消息功能,建议使用分布式消息服务RocketMQ版的定时/延迟消息代替。 已开启延迟消息插件的RabbitMQ实例,建议尽快将使用延迟消息的业务改造迁移至RocketMQ实例,并关闭原RabbitMQ实例延迟插件,否则可能存在内存高水位阻塞生产消息,以及节点重启后无法快速恢复业务的风险。迁移时建议先切消费,再切生产,对业务无影响。
共100000条