pcm-participant/participant/k8s/service/pvc.go

62 lines
1.4 KiB
Go

package service
import (
"context"
"crypto/rand"
"encoding/binary"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
const (
charSet = "abcdefghijklmnopqrstuvwxyz0123456789" // 36个字符
base = 36
length = 9
maxTries = 1000 // 最大尝试次数
)
var sc = "csi-s3"
func CreatePvc(client *kubernetes.Clientset) (string, error) {
randStr := generateRandomString()
pvc := v1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: randStr + "-pvc",
},
Spec: v1.PersistentVolumeClaimSpec{
AccessModes: []v1.PersistentVolumeAccessMode{
v1.ReadWriteMany,
},
Resources: v1.VolumeResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("1Gi"),
},
},
StorageClassName: &sc,
},
}
_, err := client.CoreV1().PersistentVolumeClaims("default").Create(context.Background(), &pvc, metav1.CreateOptions{})
if err != nil {
return "", err
}
return pvc.Name, nil
}
// 生成随机字符串
func generateRandomString() string {
var builder [length]byte
randomBuf := make([]byte, 8)
for i := 0; i < length; i++ {
if _, err := rand.Read(randomBuf); err != nil {
return ""
}
randomValue := binary.BigEndian.Uint64(randomBuf)
builder[i] = charSet[randomValue%base]
}
return string(builder[:])
}