helm部署的Kubernetes服务是否可以配置为通过kubectl手动删除时重启?

Can Kubernetes services deployed by helm configured to be restarted when manually deleting via kubectl?

我试图了解 helm 部署的一般性质。我有一个由 helm 管理的部署,它使用 service.yaml 文件启动了 jdbc 服务。

部署后,根据 service.yaml 文件,我可以清楚地看到该服务处于活动状态。

如果我手动删除服务,服务就死了。

我的问题是:如果我使用 kubectl delete 手动删除服务,是否应该重新启动该服务,因为部署是 helm 管理的? 即使在手动删除时,是否有任何选项可以配置服务重启? 这是默认和预期的行为吗?

我尝试了很多选项并搜索了文档,但我无法找到导致服务在删除时重新启动的 spec/option/config,这与 pods 不同,'Always Restart' ]选项。

apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.exampleJDBCService.name }}
  namespace: {{ .Release.Namespace }}
spec:
  type: {{ .Values.exampleJDBCService.type }}
  sessionAffinity: "{{ .Values.sessionAffinity.type }}"
  {{- if (eq .Values.sessionAffinity.type "ClientIP") }}
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: {{ .Values.sessionAffinity.timeoutSeconds }}
  {{- end }}
  selector:
    {{ template "spark-example.fullname" . }}: "true"
  ports:
    - protocol: TCP
      port: {{ .Values.exampleJDBCService.clusterNodePort }}
      targetPort: {{ .Values.exampleJDBCService.targetPort }}
      {{- if (and (eq .Values.exampleJDBCService.type "NodePort") (not (empty .Values.exampleJDBCService.clusterNodePort))) }}
      nodePort: {{ .Values.exampleJDBCService.clusterNodePort }}
      {{- end }}

你有点混搭。

您在 pod 上定义的 RestartAlways 配置它总是在完成或失败时重新启动。

您看到 pod 在删除时重新创建的原因是它有一个创建它的部署对象,并且它希望始终具有所需的 pods 数量。

Helm 不与集群中对象的删除交互,一旦他创建了他的对象,他就不再与它们交互,直到下一个 helm 命令。

希望它能帮助您更好地理解术语。

Deleted/corrupted Kubernetes 资源对象(在您的情况下是服务)不能由 tiller 自动 "restarted",但幸运的是可以使用以下 helm 命令恢复到所需的配置状态:

helm upgrade <your-release-name> <repo-name>/<chart-name> --reuse-values --force

例如

helm upgrade my-ingress stable/nginx-ingress --reuse-values --force

您还可以使用:

  helm history <release_name>

  helm rollback --force [RELEASE] [REVISION]

--force 参数在这两种情况下,如果需要

强制通过 delete/recreate 更新资源