Не удалось полностью удалить Kubernetes CustomResource

У меня возникли проблемы при удалении определения пользовательских ресурсов. Я пытаюсь обновить kubeless с v1.0.0-alpha.7 до v1.0.0-alpha.8.

Я попытался удалить все созданные пользовательские ресурсы, выполнив

kubectl delete -f kubeless-v1.0.0-alpha.7.yaml

И я вижу следующий вывод

deployment "kubeless-controller-manager" deleted
serviceaccount "controller-acct" deleted
clusterrole "kubeless-controller-deployer" deleted
clusterrolebinding "kubeless-controller-deployer" deleted
customresourcedefinition "functions.kubeless.io" deleted
customresourcedefinition "httptriggers.kubeless.io" deleted
customresourcedefinition "cronjobtriggers.kubeless.io" deleted
configmap "kubeless-config" deleted

Но когда я пытаюсь

kubectl get customresourcedefinition
NAME                    AGE
functions.kubeless.io   21d

И из-за этого, когда я в следующий раз пытаюсь обновить, выполнив

kubectl create -f kubeless-v1.0.0-alpha.8.yaml

Я вижу,

Error from server (AlreadyExists): error when creating "kubeless-v1.0.0-alpha.8.yaml": object is being deleted: customresourcedefinitions.apiextensions.k8s.io "functions.kubeless.io" already exists

Я думаю, что из-за этого несоответствия в определении функции пример hello world терпит неудачу.

kubeless function deploy hellopy --runtime python2.7 --from-file test.py --handler test.hello INFO[0000] Deploying function... FATA[0000] Failed to deploy hellopy. Received: the server does not allow this method on the requested resource (post functions.kubeless.io)

Наконец, вот вывод kubectl describe customresourcedefinitions.apiextensions.k8s.io

Name: functions.kubeless.io Namespace: Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apiextensions.k8s.io/v1beta1","description":"Kubernetes Native Serverless Framework","kind":"CustomResourceDefinition","metadata":{"anno... API Version: apiextensions.k8s.io/v1beta1 Kind: CustomResourceDefinition Metadata: Creation Timestamp: 2018-08-02T17:22:07Z Deletion Grace Period Seconds: 0 Deletion Timestamp: 2018-08-24T17:15:39Z Finalizers: customresourcecleanup.apiextensions.k8s.io Generation: 1 Resource Version: 99792247 Self Link: /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/functions.kubeless.io UID: 951713a6-9678-11e8-bd68-0a34b6111990 Spec: Group: kubeless.io Names: Kind: Function List Kind: FunctionList Plural: functions Singular: function Scope: Namespaced Version: v1beta1 Status: Accepted Names: Kind: Function List Kind: FunctionList Plural: functions Singular: function Conditions: Last Transition Time: 2018-08-02T17:22:07Z Message: no conflicts found Reason: NoConflicts Status: True Type: NamesAccepted Last Transition Time: 2018-08-02T17:22:07Z Message: the initial names have been accepted Reason: InitialNamesAccepted Status: True Type: Established Last Transition Time: 2018-08-23T13:29:45Z Message: CustomResource deletion is in progress Reason: InstanceDeletionInProgress Status: True Type: Terminating Events: <none>

5 ответов

Решение

Получается, что основной причиной было то, что пользовательские ресурсы с финализаторами могут "тупиковыми". CustomResource "functions.kubeless.io" имел

Finalizers: customresourcecleanup.apiextensions.k8s.io

и это может оставить его в плохом состоянии при удалении.

https://github.com/kubernetes/kubernetes/issues/60538

Я выполнил действия, упомянутые в этом обходном пути, и теперь он удаляется. Надеюсь, что это помогает всем, кто сталкивается с этим.

$ kc get crd

NAME                                                            CREATED AT
accesscontrolpolicies.networking.zephyr.solo.io                 2020-04-22T12:58:39Z
istiooperators.install.istio.io                                 2020-04-22T13:49:20Z
kubernetesclusters.discovery.zephyr.solo.io                     2020-04-22T12:58:39Z
meshes.discovery.zephyr.solo.io                                 2020-04-22T12:58:39Z
meshservices.discovery.zephyr.solo.io                           2020-04-22T12:58:39Z
meshworkloads.discovery.zephyr.solo.io                          2020-04-22T12:58:39Z
trafficpolicies.networking.zephyr.solo.io                       2020-04-22T12:58:39Z
virtualmeshcertificatesigningrequests.security.zephyr.solo.io   2020-04-22T12:58:39Z
virtualmeshes.networking.zephyr.solo.io                         2020-04-22T12:58:39Z
$ kubectl delete crd istiooperators.install.istio.io

delete error

$ kubectl patch crd/istiooperators.install.istio.io -p '{"metadata":{"finalizers":[]}}' --type=merge
success delete crd istiooperators.install.istio.io

результат

NAME                                                            CREATED AT
accesscontrolpolicies.networking.zephyr.solo.io                 2020-04-22T12:58:39Z
kubernetesclusters.discovery.zephyr.solo.io                     2020-04-22T12:58:39Z
meshes.discovery.zephyr.solo.io                                 2020-04-22T12:58:39Z
meshservices.discovery.zephyr.solo.io                           2020-04-22T12:58:39Z
meshworkloads.discovery.zephyr.solo.io                          2020-04-22T12:58:39Z
trafficpolicies.networking.zephyr.solo.io                       2020-04-22T12:58:39Z
virtualmeshcertificatesigningrequests.security.zephyr.solo.io   2020-04-22T12:58:39Z
virtualmeshes.networking.zephyr.solo.io                         2020-04-22T12:58:39Z

Пытаться:

      oc patch some.crd/crd_name -p '{"metadata":{"finalizers":[]}}' --type=merge

Решил мою проблему после того, как попытка принудительного удаления застряла.

Мне пришлось избавиться от еще нескольких вещей

kubectl get mutatingwebhookconfiguration | ack consul | awk '{print $1}' | xargs -I {} kubectl delete mutatingwebhookconfiguration {}

kubectl get clusterrolebinding | ack consul | awk '{print $1}' | xargs -I {} kubectl delete clusterrolebinding {}

kubectl get clusterrolebinding | ack consul | awk '{print $1}' | xargs -I {} kubectl delete clusterrole {}

В моем случае проблема заключалась в том, что я удалил пользовательский объект ресурса, но не пользовательское определение ресурса (CRD).

Я исправил это с помощью: kubectl delete -f resourcedefinition.yaml, В этом файле я определил свои CRD.

Поэтому я считаю, что лучше не удалять пользовательские объекты вручную, а удалять файлы, в которых вы определяете как объект, так и CRD. Ссылка

Другие вопросы по тегам