华为云计算 云知识 创建PVC(待废弃)CreateCloudPersistentVolumeClaims
创建PVC(待废弃)CreateCloudPersistentVolumeClaims

 

功能介绍

该API用于在指定的Namespace下通过 云存储 服务中的云存储(EVS、 SFS 、OBS)去创建PVC(PersistentVolumeClaim)。该API待废弃,请使用Kubernetes PVC相关接口。

存储管理的URL格式为:https://{clusterid}.Endpoint/uri。其中{clusterid}为集群ID,uri为资源路径,也即API访问的路径。如果使用https://Endpoint/uri,则必须指定请求header中的X-Cluster-ID参数。

调用方法

请参见如何调用API

URI

POST /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims

表1 路径参数

参数

是否必选

参数类型

描述

namespace

String

指定PersistentVolumeClaim所在的命名空间。

使用namespace有如下约束:

  • 用户自定义的namespace,使用前必须先在集群中创建namespace

  • 系统自带的namespace:default

  • 不能使用kube-system与kube-public

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

消息体的类型(格式)

X-Auth-Token

String

调用接口的认证方式分为Token和AK/SK两种,如果您使用的Token方式,此参数为必填,请填写Token的值,获取方式请参见获取token

X-Cluster-ID

String

集群ID,使用https://Endpoint/uri这种URL格式时必须指定此参数。获取方式请参见如何获取接口URI中参数

表3 请求Body参数

参数

是否必选

参数类型

描述

apiVersion

String

API版本,固定值v1

kind

String

API类型,固定值PersistentVolumeClaim

metadata

PersistentVolumeClaimMetadata object

metadata是集群对象的元数据定义,是集合类的元素类型,包含一组由不同名称定义的属性。

spec

PersistentVolumeClaimSpec object

spec是集合类的元素类型,用户对需要管理的集群对象进行详细描述的主体部分都在spec中给出。系统通过spec的描述来创建或更新对象。

status

PersistentVolumeClaimStatus object

status是当前PersistentVolumeClaim的状态信息,创建时不需要添加status参数。

表4 PersistentVolumeClaimMetadata

参数

是否必选

参数类型

描述

name

String

PersistentVolumeClaim名称,可以包含小写字母、数字、连字符和点,开头和结尾必须是字母或数字,最长253个字符,同一namespace下name不能重复。

labels

String

PersistentVolumeClaim标签,key/value对格式。

  • Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀,例如example.com/my-key,DNS子域最长253个字符。

  • Value:可以为空或者非空字符串,非空字符串必须以字符或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。

表5 PersistentVolumeClaimSpec

参数

是否必选

参数类型

描述

volumeID

String

资源需为已经存在的存储资源

  • 如果存储资源类型是SFS、EVS、SFS-Turbo,本参数需要填入对应资源的ID

  • 如果资源类型为OBS,本参数填入OBS名称

storageType

String

云存储的类型,和volumeID搭配使用。即volumeID和storageType必须同时被配置。

accessModes

Array of strings

指定volume应该具有的访问模式,列表中仅第一个配置参数有效。

  • ReadWriteOnce:该卷可以被单个节点以读/写模式挂载

    说明:

    集群版本为v1.13.10且storage-driver版本为1.0.19时,才支持此功能。

  • ReadOnlyMany:该卷可以被多个节点以只读模式挂载(默认)

  • ReadWriteMany:该卷可以被多个节点以读/写模式挂载

storageClassName

String

PVC的StorageClass名称

volumeName

String

PVC绑定的PV名称

resources

ResourceRequirements object

资源需求和限制

volumeMode

String

PVC指定的PV类型

表6 ResourceRequirements

参数

是否必选

参数类型

描述

limits

Map<String,String>

资源限制,创建时指定无效

requests

Map<String,String>

资源需求,创建时指定无效

表7 PersistentVolumeClaimStatus

参数

是否必选

参数类型

描述

accessModes

Array of strings

显示volume实际具有的访问模式。

capacity

String

底层卷的实际资源

phase

String

PersistentVolumeClaim当前所处的状态

响应参数

状态码: 201

表8 响应Body参数

参数

参数类型

描述

apiVersion

String

API版本,固定值v1

kind

String

API类型,固定值PersistentVolumeClaim

metadata

PersistentVolumeClaimMetadata object

metadata是集群对象的元数据定义,是集合类的元素类型,包含一组由不同名称定义的属性。

spec

PersistentVolumeClaimSpec object

spec是集合类的元素类型,用户对需要管理的集群对象进行详细描述的主体部分都在spec中给出。系统通过spec的描述来创建或更新对象。

status

PersistentVolumeClaimStatus object

status是当前PersistentVolumeClaim的状态信息,创建时不需要添加status参数。

表9 PersistentVolumeClaimMetadata

参数

参数类型

描述

name

String

PersistentVolumeClaim名称,可以包含小写字母、数字、连字符和点,开头和结尾必须是字母或数字,最长253个字符,同一namespace下name不能重复。

labels

String

PersistentVolumeClaim标签,key/value对格式。

  • Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀,例如example.com/my-key,DNS子域最长253个字符。

  • Value:可以为空或者非空字符串,非空字符串必须以字符或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。

表10 PersistentVolumeClaimSpec

参数

参数类型

描述

volumeID

String

资源需为已经存在的存储资源

  • 如果存储资源类型是SFS、EVS、SFS-Turbo,本参数需要填入对应资源的ID

  • 如果资源类型为OBS,本参数填入OBS名称

storageType

String

云存储的类型,和volumeID搭配使用。即volumeID和storageType必须同时被配置。

  • bs:EVS云存储

  • nfs:SFS弹性文件存储

  • obs:OBS对象存储

  • efs:SFS Turbo极速文件存储

accessModes

Array of strings

指定volume应该具有的访问模式,列表中仅第一个配置参数有效。

  • ReadWriteOnce:该卷可以被单个节点以读/写模式挂载

    说明:

    集群版本为v1.13.10且storage-driver版本为1.0.19时,才支持此功能。

  • ReadOnlyMany:该卷可以被多个节点以只读模式挂载(默认)

  • ReadWriteMany:该卷可以被多个节点以读/写模式挂载

storageClassName

String

PVC的StorageClass名称

volumeName

String

PVC绑定的PV名称

resources

ResourceRequirements object

资源需求和限制

volumeMode

String

PVC指定的PV类型

表11 ResourceRequirements

参数

参数类型

描述

limits

Map<String,String>

资源限制,创建时指定无效

requests

Map<String,String>

资源需求,创建时指定无效

表12 PersistentVolumeClaimStatus

参数

参数类型

描述

accessModes

Array of strings

显示volume实际具有的访问模式。

capacity

String

底层卷的实际资源

phase

String

PersistentVolumeClaim当前所处的状态

请求示例

指定EVS 云硬盘 ID创建PersistentVolumeClaim

POST /api/v1/namespaces/default/cloudpersistentvolumeclaims

{
  "apiVersion" : "v1",
  "kind" : "PersistentVolumeClaim",
  "metadata" : {
    "name" : "csms-dev-create",
    "namespace" : "default"
  },
  "spec" : {
    "volumeID" : "86b29e16-23db-11e7-9c83-fa163ec08232",
    "storageType" : "bs",
    "accessModes" : [ "ReadWriteMany" ]
  }
}

响应示例

状态码: 201

创建PersistentVolumeClaim作业下发成功。

{
  "kind" : "PersistentVolumeClaim",
  "apiVersion" : "v1",
  "metadata" : {
    "name" : " csms-dev-create ",
    "namespace" : "default",
    "selfLink" : "/api/v1/namespaces/default/persistentvolumeclaims/db-mysql-0",
    "uid" : "86b29e16-23db-11e7-9c83-fa163ec08232",
    "resourceVersion" : "1793115",
    "creationTimestamp" : "2017-04-18T02:05:42Z"
  },
  "spec" : {
    "volumeName" : "csms-dev-create ",
    "accessModes" : [ "ReadWriteMany" ],
    "resources" : {
      "requests" : {
        "storage" : "1Gi"
      }
    }
  },
  "status" : {
    "phase" : "Pending",
    "accessModes" : [ "ReadWriteMany" ]
  }
}

SDK代码示例

SDK代码示例如下。

  • Java
  • Python
  • Go
  • 更多

指定EVS云硬盘ID创建PersistentVolumeClaim

package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.cce.v3.region.CceRegion;
import com.huaweicloud.sdk.cce.v3.*;
import com.huaweicloud.sdk.cce.v3.model.*;

import java.util.List;
import java.util.ArrayList;

public class CreateCloudPersistentVolumeClaimsSolution {

    public static void main(String[] args) {
        String ak = "<YOUR AK>";
        String sk = "<YOUR SK>";

        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);

        CceClient client = CceClient.newBuilder()
                .withCredential(auth)
                .withRegion(CceRegion.valueOf("cn-north-4"))
                .build();
        CreateCloudPersistentVolumeClaimsRequest request = new CreateCloudPersistentVolumeClaimsRequest();
        request.withNamespace("<namespace>");
        PersistentVolumeClaim body = new PersistentVolumeClaim();
        List<PersistentVolumeClaimSpec.AccessModesEnum> listSpecAccessModes = new ArrayList<>();
        listSpecAccessModes.add(PersistentVolumeClaimSpec.AccessModesEnum.fromValue("ReadWriteMany"));
        PersistentVolumeClaimSpec specbody = new PersistentVolumeClaimSpec();
        specbody.withVolumeID("86b29e16-23db-11e7-9c83-fa163ec08232")
            .withStorageType("bs")
            .withAccessModes(listSpecAccessModes);
        PersistentVolumeClaimMetadata metadatabody = new PersistentVolumeClaimMetadata();
        metadatabody.withName("csms-dev-create");
        body.withSpec(specbody);
        body.withMetadata(metadatabody);
        body.withKind("PersistentVolumeClaim");
        body.withApiVersion("v1");
        request.withBody(body);
        try {
            CreateCloudPersistentVolumeClaimsResponse response = client.createCloudPersistentVolumeClaims(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

指定EVS云硬盘ID创建PersistentVolumeClaim

# coding: utf-8

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcce.v3.region.cce_region import CceRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkcce.v3 import *

if __name__ == "__main__":
    ak = "<YOUR AK>"
    sk = "<YOUR SK>"

    credentials = BasicCredentials(ak, sk) \

    client = CceClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(CceRegion.value_of("cn-north-4")) \
        .build()

    try:
        request = CreateCloudPersistentVolumeClaimsRequest()
        request.namespace = "<namespace>"
        listAccessModesSpec = [
            "ReadWriteMany"
        ]
        specbody = PersistentVolumeClaimSpec(
            volume_id="86b29e16-23db-11e7-9c83-fa163ec08232",
            storage_type="bs",
            access_modes=listAccessModesSpec
        )
        metadatabody = PersistentVolumeClaimMetadata(
            name="csms-dev-create"
        )
        request.body = PersistentVolumeClaim(
            spec=specbody,
            metadata=metadatabody,
            kind="PersistentVolumeClaim",
            api_version="v1"
        )
        response = client.create_cloud_persistent_volume_claims(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

指定EVS云硬盘ID创建PersistentVolumeClaim

package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region"
)

func main() {
    ak := "<YOUR AK>"
    sk := "<YOUR SK>"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        Build()

    client := cce.NewCceClient(
        cce.CceClientBuilder().
            WithRegion(region.ValueOf("cn-north-4")).
            WithCredential(auth).
            Build())

    request := &model.CreateCloudPersistentVolumeClaimsRequest{}
	request.Namespace = "<namespace>"
	var listAccessModesSpec = []model.PersistentVolumeClaimSpecAccessModes{
        model.GetPersistentVolumeClaimSpecAccessModesEnum().READ_WRITE_MANY,
    }
	specbody := &model.PersistentVolumeClaimSpec{
		VolumeID: "86b29e16-23db-11e7-9c83-fa163ec08232",
		StorageType: "bs",
		AccessModes: listAccessModesSpec,
	}
	metadatabody := &model.PersistentVolumeClaimMetadata{
		Name: "csms-dev-create",
	}
	request.Body = &model.PersistentVolumeClaim{
		Spec: specbody,
		Metadata: metadatabody,
		Kind: "PersistentVolumeClaim",
		ApiVersion: "v1",
	}
	response, err := client.CreateCloudPersistentVolumeClaims(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

201

创建PersistentVolumeClaim作业下发成功。

错误码

请参见错误码

 

上一篇:企业自主构建视频能力会面临哪些挑战? 下一篇:CDN用户请求调度