При использовании API go-client после использования вызова api.PersistentVolumeClaims(namespace).Create(createOpts)
PersistentVolumeClaim отображается как ресурс, но остается в состоянии ожидания. Я не вижу никаких событий при использовании kubectl describe pvc
, я также не вижу создаваемых томов и т. Д.
$ kubectl describe pvc --namespace=test -R
Name: 93007732-9d8c-406e-be99-f48faed3a061
Namespace: test
StorageClass: microk8s-hostpath
Status: Pending
Volume: 93007732-9d8c-406e-be99-f48faed3a061
Labels: <none>
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 0
Access Modes:
VolumeMode: Filesystem
Events: <none>
Mounted By: <none>
Код, который я использую, выглядит следующим образом:
volume, errGo := uuid.NewRandom()
if errGo != nil {
job.failed = kv.Wrap(errGo).With("stack", stack.Trace().TrimRuntime())
return job.failed
}
job.volume = volume.String()
fs := v1.PersistentVolumeFilesystem
createOpts := &v1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: job.volume,
Namespace: job.namespace,
UID: types.UID(job.volume),
},
Spec: v1.PersistentVolumeClaimSpec{
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse("10Gi"),
},
},
VolumeName: job.volume,
VolumeMode: &fs,
},
Status: v1.PersistentVolumeClaimStatus{
Phase: v1.ClaimBound,
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
Capacity: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse("10Gi"),
},
},
}
api := Client().CoreV1()
if _, errGo = api.PersistentVolumeClaims(namespace).Create(createOpts); errGo != nil {
job.failed = kv.Wrap(errGo).With("stack", stack.Trace().TrimRuntime())
return job.failed
}
Я пытался найти хорошие примеры использования API создания с постоянными томами, но большинство примеров, как представляется, для наблюдателей и т. Д., И поэтому я потратил довольно много времени, пытаясь проанализировать код, ведя меня в явном виде, установив Status
, но, похоже, это оказали нулевое воздействие. Я также попытался по умолчанию использовать VolumeMode в Spec, что не помогло.
Примеры, которые я прочитал, взяты из:
https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/volume/persistentvolume/framework_test.go
https://godoc.org/k8s.io/api/core/v1#PersistentVolumeSpec
https://github.com/vladimirvivien/k8s-client-examples/tree/master/go/pvcwatch
https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-part-4-using-go-b1d0e3c1c899
Кто-нибудь знает на самом деле пример кода для этих API, который выходит за рамки модульного тестирования в файлах _test.go, или кто-нибудь может дать какие-либо подсказки о том, как заставить процесс создания действительно перемещаться в кластере? Я предположил, что нижестоящие ресурсы, необходимые, например, для тома и т. Д., Автоматически выделяются при попытке создать ресурс заявки.
Большое спасибо, что заглянули, если вы зашли так далеко ...