Pv + Pvc for admiralty purpose
This commit is contained in:
@@ -599,11 +599,38 @@ func (k *KubernetesService) CreateSecret(context context.Context, minioId string
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreatePVC creates a PersistentVolumeClaim in the given namespace.
|
// CreatePVC creates a static PersistentVolume + PersistentVolumeClaim in the given namespace.
|
||||||
// Uses "local-path-immediate" StorageClass (volumeBindingMode: Immediate) to avoid
|
// Static provisioning (no StorageClass) avoids the WaitForFirstConsumer deadlock
|
||||||
// the WaitForFirstConsumer deadlock with Admiralty virtual nodes.
|
// with Admiralty virtual nodes — the PVC binds immediately.
|
||||||
func (k *KubernetesService) CreatePVC(ctx context.Context, name, namespace, storageSize string) error {
|
func (k *KubernetesService) CreatePVC(ctx context.Context, name, namespace, storageSize string) error {
|
||||||
storageClassName := "local-path-immediate"
|
storageClassName := ""
|
||||||
|
pv := &v1.PersistentVolume{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
},
|
||||||
|
Spec: v1.PersistentVolumeSpec{
|
||||||
|
Capacity: v1.ResourceList{
|
||||||
|
v1.ResourceStorage: resource.MustParse(storageSize),
|
||||||
|
},
|
||||||
|
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
|
||||||
|
StorageClassName: storageClassName,
|
||||||
|
PersistentVolumeReclaimPolicy: v1.PersistentVolumeReclaimDelete,
|
||||||
|
PersistentVolumeSource: v1.PersistentVolumeSource{
|
||||||
|
HostPath: &v1.HostPathVolumeSource{
|
||||||
|
Path: "/var/lib/oc-storage/" + name,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ClaimRef: &v1.ObjectReference{
|
||||||
|
Namespace: namespace,
|
||||||
|
Name: name,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_, err := k.Set.CoreV1().PersistentVolumes().Create(ctx, pv, metav1.CreateOptions{})
|
||||||
|
if err != nil && !apierrors.IsAlreadyExists(err) {
|
||||||
|
return fmt.Errorf("CreatePV %s: %w", name, err)
|
||||||
|
}
|
||||||
|
|
||||||
pvc := &v1.PersistentVolumeClaim{
|
pvc := &v1.PersistentVolumeClaim{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
@@ -612,6 +639,7 @@ func (k *KubernetesService) CreatePVC(ctx context.Context, name, namespace, stor
|
|||||||
Spec: v1.PersistentVolumeClaimSpec{
|
Spec: v1.PersistentVolumeClaimSpec{
|
||||||
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
|
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
|
||||||
StorageClassName: &storageClassName,
|
StorageClassName: &storageClassName,
|
||||||
|
VolumeName: name,
|
||||||
Resources: v1.VolumeResourceRequirements{
|
Resources: v1.VolumeResourceRequirements{
|
||||||
Requests: v1.ResourceList{
|
Requests: v1.ResourceList{
|
||||||
v1.ResourceStorage: resource.MustParse(storageSize),
|
v1.ResourceStorage: resource.MustParse(storageSize),
|
||||||
@@ -619,19 +647,23 @@ func (k *KubernetesService) CreatePVC(ctx context.Context, name, namespace, stor
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_, err := k.Set.CoreV1().PersistentVolumeClaims(namespace).Create(ctx, pvc, metav1.CreateOptions{})
|
_, err = k.Set.CoreV1().PersistentVolumeClaims(namespace).Create(ctx, pvc, metav1.CreateOptions{})
|
||||||
if err != nil && !apierrors.IsAlreadyExists(err) {
|
if err != nil && !apierrors.IsAlreadyExists(err) {
|
||||||
return fmt.Errorf("CreatePVC %s/%s: %w", namespace, name, err)
|
return fmt.Errorf("CreatePVC %s/%s: %w", namespace, name, err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeletePVC deletes a PersistentVolumeClaim from the given namespace.
|
// DeletePVC deletes a PersistentVolumeClaim and its associated PersistentVolume.
|
||||||
func (k *KubernetesService) DeletePVC(ctx context.Context, name, namespace string) error {
|
func (k *KubernetesService) DeletePVC(ctx context.Context, name, namespace string) error {
|
||||||
err := k.Set.CoreV1().PersistentVolumeClaims(namespace).Delete(ctx, name, metav1.DeleteOptions{})
|
err := k.Set.CoreV1().PersistentVolumeClaims(namespace).Delete(ctx, name, metav1.DeleteOptions{})
|
||||||
if err != nil && !apierrors.IsNotFound(err) {
|
if err != nil && !apierrors.IsNotFound(err) {
|
||||||
return fmt.Errorf("DeletePVC %s/%s: %w", namespace, name, err)
|
return fmt.Errorf("DeletePVC %s/%s: %w", namespace, name, err)
|
||||||
}
|
}
|
||||||
|
err = k.Set.CoreV1().PersistentVolumes().Delete(ctx, name, metav1.DeleteOptions{})
|
||||||
|
if err != nil && !apierrors.IsNotFound(err) {
|
||||||
|
return fmt.Errorf("DeletePV %s: %w", name, err)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user