@
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. 创建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 |
| |
| |
| var resourceQuantity resource.Quantity |
| resourceQuantity.Set(request.StorageSize * 1000 * 1000 * 1000) |
| pvcSrc.Spec.Resources.Requests = coreV1.ResourceList{ |
| "storage": resourceQuantity, |
| } |
| |
| |
| if len(request.StorageClassName) != 0 { |
| pvcSrc.Spec.StorageClassName = &request.StorageClassName |
| } |
| |
| |
| 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语言开发k8s(client-go)-03-Deployment挂载configmap、pvc、host path》

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?