62 lines
1.4 KiB
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[:])
|
|
}
|