删除后正在重新创建 K8S 中的 Statefulsets

问题描述

我正在使用 Elasticsearch 运算符 Kubernetes 并创建了两个有状态集(请参阅 https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-orchestration.html):

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
Metadata:
  name: quickstart
spec:
  version: 7.12.1
  nodeSets:
  - name: master-nodes
    count: 3
    config:
      node.roles: ["master"]
    volumeClaimTemplates:
    - Metadata:
        name: elasticsearch-data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi
        storageClassName: standard
  - name: data-nodes
    count: 3
    config:
      node.roles: ["data"]
    volumeClaimTemplates:
    - Metadata:
        name: elasticsearch-data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi
        storageClassName: standard

问题是我无法删除有状态集。删除后,它们会自动重新创建:

my-PC:~$ kubectl get sts
NAME                         READY   AGE
quickstart-es-data-nodes     0/0     14m
quickstart-es-master-nodes   0/0     18m
my-PC:~$ kubectl delete sts quickstart-es-data-nodes --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
statefulset.apps "quickstart-es-data-nodes" force deleted
my-PC:~$ kubectl get sts
NAME                         READY   AGE
quickstart-es-data-nodes     0/3     3s
quickstart-es-master-nodes   0/0     18m

删除之前,我已经将 statefulset 缩小到 0,以确保所有 pod 都被终止。但删除后,有状态会重新创建(请参阅 quickstart-es-data-nodes)。

那么,有人知道如何删除有状态集而不重新创建吗?

解决方法

这是由于您用于 Elasticsearch 的运算符。操作员管理 statefulset,如果您删除它,它将更新。

在幕后,ECK 翻译了在 将 Elasticsearch 资源转换为 Kubernetes 中的 StatefulSet。

如果您阅读文档:https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-orchestration.html#k8s-statefulsets

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#on-delete

,

您必须删除自定义对象。运营商拥有这些 StatefulSet,并将不断更新它们以匹配其预期内容。

,

我终于得到了答案......我需要运行以下命令进行删除:

kubectl delete elasticsearch quickstart

这最终删除了快速入门示例。