華為云計(jì)算 云知識(shí) 創(chuàng)建PVC(待廢棄)CreateCloudPersistentVolumeClaims
創(chuàng)建PVC(待廢棄)CreateCloudPersistentVolumeClaims

 

功能介紹

該API用于在指定的Namespace下通過 云存儲(chǔ) 服務(wù)中的云存儲(chǔ)(EVS、 SFS 、OBS)去創(chuàng)建PVC(PersistentVolumeClaim)。該API待廢棄,請(qǐng)使用Kubernetes PVC相關(guān)接口。

存儲(chǔ)管理的URL格式為:https://{clusterid}.Endpoint/uri。其中{clusterid}為集群ID,uri為資源路徑,也即API訪問的路徑。如果使用https://Endpoint/uri,則必須指定請(qǐng)求header中的X-Cluster-ID參數(shù)。

調(diào)用方法

請(qǐng)參見如何調(diào)用API。

URI

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

表1 路徑參數(shù)

參數(shù)

是否必選

參數(shù)類型

描述

namespace

String

指定PersistentVolumeClaim所在的命名空間。

使用namespace有如下約束:

  • 用戶自定義的namespace,使用前必須先在集群中創(chuàng)建namespace

  • 系統(tǒng)自帶的namespace:default

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

請(qǐng)求參數(shù)

表2 請(qǐng)求Header參數(shù)

參數(shù)

是否必選

參數(shù)類型

描述

Content-Type

String

消息體的類型(格式)

X-Auth-Token

String

調(diào)用接口的認(rèn)證方式分為Token和AK/SK兩種,如果您使用的Token方式,此參數(shù)為必填,請(qǐng)?zhí)顚慣oken的值,獲取方式請(qǐng)參見獲取token。

X-Cluster-ID

String

集群ID,使用https://Endpoint/uri這種URL格式時(shí)必須指定此參數(shù)。獲取方式請(qǐng)參見如何獲取接口URI中參數(shù)

表3 請(qǐng)求Body參數(shù)

參數(shù)

是否必選

參數(shù)類型

描述

apiVersion

String

API版本,固定值v1

kind

String

API類型,固定值PersistentVolumeClaim

metadata

PersistentVolumeClaimMetadata object

metadata是集群對(duì)象的元數(shù)據(jù)定義,是集合類的元素類型,包含一組由不同名稱定義的屬性。

spec

PersistentVolumeClaimSpec object

spec是集合類的元素類型,用戶對(duì)需要管理的集群對(duì)象進(jìn)行詳細(xì)描述的主體部分都在spec中給出。系統(tǒng)通過spec的描述來創(chuàng)建或更新對(duì)象。

status

PersistentVolumeClaimStatus object

status是當(dāng)前PersistentVolumeClaim的狀態(tài)信息,創(chuàng)建時(shí)不需要添加status參數(shù)。

表4 PersistentVolumeClaimMetadata

參數(shù)

是否必選

參數(shù)類型

描述

name

String

PersistentVolumeClaim名稱,可以包含小寫字母、數(shù)字、連字符和點(diǎn),開頭和結(jié)尾必須是字母或數(shù)字,最長(zhǎng)253個(gè)字符,同一namespace下name不能重復(fù)。

labels

String

PersistentVolumeClaim標(biāo)簽,key/value對(duì)格式。

  • Key:必須以字母或數(shù)字開頭,可以包含字母、數(shù)字、連字符、下劃線和點(diǎn),最長(zhǎng)63個(gè)字符;另外可以使用DNS子域作為前綴,例如example.com/my-key,DNS子域最長(zhǎng)253個(gè)字符。

  • Value:可以為空或者非空字符串,非空字符串必須以字符或數(shù)字開頭,可以包含字母、數(shù)字、連字符、下劃線和點(diǎn),最長(zhǎng)63個(gè)字符。

表5 PersistentVolumeClaimSpec

參數(shù)

是否必選

參數(shù)類型

描述

volumeID

String

資源需為已經(jīng)存在的存儲(chǔ)資源

  • 如果存儲(chǔ)資源類型是SFS、EVS、SFS-Turbo,本參數(shù)需要填入對(duì)應(yīng)資源的ID

  • 如果資源類型為OBS,本參數(shù)填入OBS名稱

storageType

String

云存儲(chǔ)的類型,和volumeID搭配使用。即volumeID和storageType必須同時(shí)被配置。

accessModes

Array of strings

指定volume應(yīng)該具有的訪問模式,列表中僅第一個(gè)配置參數(shù)有效。

  • ReadWriteOnce:該卷可以被單個(gè)節(jié)點(diǎn)以讀/寫模式掛載

    說明:

    集群版本為v1.13.10且storage-driver版本為1.0.19時(shí),才支持此功能。

  • ReadOnlyMany:該卷可以被多個(gè)節(jié)點(diǎn)以只讀模式掛載(默認(rèn))

  • ReadWriteMany:該卷可以被多個(gè)節(jié)點(diǎn)以讀/寫模式掛載

storageClassName

String

PVC的StorageClass名稱

volumeName

String

PVC綁定的PV名稱

resources

ResourceRequirements object

資源需求和限制

volumeMode

String

PVC指定的PV類型

表6 ResourceRequirements

參數(shù)

是否必選

參數(shù)類型

描述

limits

Map<String,String>

資源限制,創(chuàng)建時(shí)指定無效

requests

Map<String,String>

資源需求,創(chuàng)建時(shí)指定無效

表7 PersistentVolumeClaimStatus

參數(shù)

是否必選

參數(shù)類型

描述

accessModes

Array of strings

顯示volume實(shí)際具有的訪問模式。

capacity

String

底層卷的實(shí)際資源

phase

String

PersistentVolumeClaim當(dāng)前所處的狀態(tài)

響應(yīng)參數(shù)

狀態(tài)碼: 201

表8 響應(yīng)Body參數(shù)

參數(shù)

參數(shù)類型

描述

apiVersion

String

API版本,固定值v1

kind

String

API類型,固定值PersistentVolumeClaim

metadata

PersistentVolumeClaimMetadata object

metadata是集群對(duì)象的元數(shù)據(jù)定義,是集合類的元素類型,包含一組由不同名稱定義的屬性。

spec

PersistentVolumeClaimSpec object

spec是集合類的元素類型,用戶對(duì)需要管理的集群對(duì)象進(jìn)行詳細(xì)描述的主體部分都在spec中給出。系統(tǒng)通過spec的描述來創(chuàng)建或更新對(duì)象。

status

PersistentVolumeClaimStatus object

status是當(dāng)前PersistentVolumeClaim的狀態(tài)信息,創(chuàng)建時(shí)不需要添加status參數(shù)。

表9 PersistentVolumeClaimMetadata

參數(shù)

參數(shù)類型

描述

name

String

PersistentVolumeClaim名稱,可以包含小寫字母、數(shù)字、連字符和點(diǎn),開頭和結(jié)尾必須是字母或數(shù)字,最長(zhǎng)253個(gè)字符,同一namespace下name不能重復(fù)。

labels

String

PersistentVolumeClaim標(biāo)簽,key/value對(duì)格式。

  • Key:必須以字母或數(shù)字開頭,可以包含字母、數(shù)字、連字符、下劃線和點(diǎn),最長(zhǎng)63個(gè)字符;另外可以使用DNS子域作為前綴,例如example.com/my-key,DNS子域最長(zhǎng)253個(gè)字符。

  • Value:可以為空或者非空字符串,非空字符串必須以字符或數(shù)字開頭,可以包含字母、數(shù)字、連字符、下劃線和點(diǎn),最長(zhǎng)63個(gè)字符。

表10 PersistentVolumeClaimSpec

參數(shù)

參數(shù)類型

描述

volumeID

String

資源需為已經(jīng)存在的存儲(chǔ)資源

  • 如果存儲(chǔ)資源類型是SFS、EVS、SFS-Turbo,本參數(shù)需要填入對(duì)應(yīng)資源的ID

  • 如果資源類型為OBS,本參數(shù)填入OBS名稱

storageType

String

云存儲(chǔ)的類型,和volumeID搭配使用。即volumeID和storageType必須同時(shí)被配置。

  • bs:EVS云存儲(chǔ)

  • nfs:SFS彈性文件存儲(chǔ)

  • obs:OBS對(duì)象存儲(chǔ)

  • efs:SFS Turbo極速文件存儲(chǔ)

accessModes

Array of strings

指定volume應(yīng)該具有的訪問模式,列表中僅第一個(gè)配置參數(shù)有效。

  • ReadWriteOnce:該卷可以被單個(gè)節(jié)點(diǎn)以讀/寫模式掛載

    說明:

    集群版本為v1.13.10且storage-driver版本為1.0.19時(shí),才支持此功能。

  • ReadOnlyMany:該卷可以被多個(gè)節(jié)點(diǎn)以只讀模式掛載(默認(rèn))

  • ReadWriteMany:該卷可以被多個(gè)節(jié)點(diǎn)以讀/寫模式掛載

storageClassName

String

PVC的StorageClass名稱

volumeName

String

PVC綁定的PV名稱

resources

ResourceRequirements object

資源需求和限制

volumeMode

String

PVC指定的PV類型

表11 ResourceRequirements

參數(shù)

參數(shù)類型

描述

limits

Map<String,String>

資源限制,創(chuàng)建時(shí)指定無效

requests

Map<String,String>

資源需求,創(chuàng)建時(shí)指定無效

表12 PersistentVolumeClaimStatus

參數(shù)

參數(shù)類型

描述

accessModes

Array of strings

顯示volume實(shí)際具有的訪問模式。

capacity

String

底層卷的實(shí)際資源

phase

String

PersistentVolumeClaim當(dāng)前所處的狀態(tài)

請(qǐng)求示例

指定EVS 云硬盤 ID創(chuàng)建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" ]
  }
}

響應(yīng)示例

狀態(tài)碼: 201

創(chuàng)建PersistentVolumeClaim作業(yè)下發(fā)成功。

{
  "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創(chuàng)建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創(chuàng)建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創(chuàng)建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代碼示例,請(qǐng)參見API Explorer的代碼示例頁簽,可生成自動(dòng)對(duì)應(yīng)的SDK代碼示例。

狀態(tài)碼

狀態(tài)碼

描述

201

創(chuàng)建PersistentVolumeClaim作業(yè)下發(fā)成功。

錯(cuò)誤碼

請(qǐng)參見錯(cuò)誤碼。