Go語言K8S開發(fā)-06-PVC

1. 獲取PVC列表

獲取指定namespace下pvc列表

import (
    "context"
    coreV1 "k8s.io/api/core/v1"
    "k8s.io/apimachinery/pkg/api/resource"
    metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
)
func GetPVCList(clientSet *kubernetes.Clientset, namespaceName string) (pvcList *coreV1.PersistentVolumeClaimList, err error) {
    pvcList, err = clientSet.CoreV1().PersistentVolumeClaims(namespaceName).List(context.TODO(), metaV1.ListOptions{})
    if err != nil {
        return nil, err
    }
    return pvcList, err
}

2. 獲取指定PVC

import (
    "context"
    coreV1 "k8s.io/api/core/v1"
    "k8s.io/apimachinery/pkg/api/resource"
    metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
)

func GetPVC(clientSet *kubernetes.Clientset, namespaceName string, PVCName string) (pvcInfo *coreV1.PersistentVolumeClaim, err error) {
    pvcInfo, err = clientSet.CoreV1().PersistentVolumeClaims(namespaceName).Get(context.TODO(), PVCName, metaV1.GetOptions{})
    if err != nil {
        return nil, err
    }
    return pvcInfo, err
}

3. 創(chuàng)建PVC

import (
    "context"
    coreV1 "k8s.io/api/core/v1"
    "k8s.io/apimachinery/pkg/api/resource"
    metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
)

type CreatePVCRequest struct {
    NamespaceName    string                              `json:"namespace_name"`
    PvcName          string                              `json:"pvc_name"`
    AccessModes      []coreV1.PersistentVolumeAccessMode `json:"access_modes"`
    StorageSize      int64                               `json:"storage_size"`
    StorageClassName string                              `json:"storage_class_name"`
}

func CreatePVC(clientSet *kubernetes.Clientset, request CreatePVCRequest) (pvcInfo *coreV1.PersistentVolumeClaim, err error) {

    pvcSrc := new(coreV1.PersistentVolumeClaim)
    pvcSrc.ObjectMeta.Name = request.PvcName
    pvcSrc.Spec.AccessModes = request.AccessModes

    //設(shè)置存儲(chǔ)大小
    var resourceQuantity resource.Quantity
    resourceQuantity.Set(request.StorageSize * 1000 * 1000 * 1000)
    pvcSrc.Spec.Resources.Requests = coreV1.ResourceList{
        "storage": resourceQuantity,
    }

    //使用存儲(chǔ)卷名字
    if len(request.StorageClassName) != 0 {
        pvcSrc.Spec.StorageClassName = &request.StorageClassName
    }

    //創(chuàng)建pvc
    pvcInfo, err = clientSet.CoreV1().PersistentVolumeClaims(request.NamespaceName).Create(context.TODO(), pvcSrc, metaV1.CreateOptions{})
    if err != nil {
        return nil, err
    }
    return pvcInfo, err
}

4. 刪除指定PVC

import (
    "context"
    coreV1 "k8s.io/api/core/v1"
    "k8s.io/apimachinery/pkg/api/resource"
    metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
)

type DeletePVCRequest struct {
    NamespaceName string `json:"namespace_name"`
    PvcName       string `json:"pvc_name"`
}

func DeletePvc(clientSet *kubernetes.Clientset, request DeletePVCRequest) (err error) {
    err = clientSet.CoreV1().PersistentVolumeClaims(request.NamespaceName).Delete(context.TODO(), request.PvcName, metaV1.DeleteOptions{})
    if err != nil {
        return err
    }
    return nil
}

5. Deployment使用pvc

另一篇有說明: 《Go語言開發(fā)k8s(client-go)-03-Deployment掛載configmap、pvc、host path》


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容