Helm 预升级挂钩可以在滚动更新之前修改 pod-deletion-cost 吗?

问题描述 投票:0回答:1

我需要按特定顺序部署 k8s 的 pod(例如扩展到 3 个副本),以确保最旧的成员(我在 Akka / Apache Pekko 集群中的集群领导者)是最后一个被关闭的 pod。

我想使用

controller.kubernetes.io/pod-deletion-cost
注释,以便为最老的成员提供最高的 Pod 删除成本

我的部署是基于 Helm 的,所以现在我想知道是否可以使用 Helm

pre-upgrade
Hook 以便:

  • pre-upgrade
    钩子阶段:
    • 查询 Apache Pekko 集群管理 API 以查找最旧的成员(集群领导者)
    • 计算
      pod-deletion-cost
    • pod-calculation-cost
      应用于我的部署的 Pod
  • 使用
    RollingUpdate
    updateStrategy
    执行升级
    • 遵守定义的
      controller.kubernetes.io/pod-deletion-cost
      并最后更新集群领导者

我想知道这是否可能 - 我不是 Helm hooks 和 Kubernetes 注释方面的专家,可能有错误的假设。

kubernetes akka kubernetes-helm
1个回答
0
投票

也许我可以帮助你。 这个问题的核心是在pre-upgrade hook阶段如何进行访问api-server的操作。一种常见且标准的方法是在“升级前”阶段创建一个作业来执行所需的操作。下面我就详细讲解一下如何创建这个工作:

    您应该将与作业相关的YAML文件放在templates目录中,并将注释指定为“helm.sh/hook”:预升级。
  1. 通常,我们还需要与
  2. rbac

    相关的YAML文件,因为我们需要授予作业访问相应API的权限。

  3. 我们还需要控制每个文件的创建顺序,可以使用“helm.sh/hook-weight”来实现
  4. 不要忘记补丁“helm.sh/hook-delete-policy”注释
  5. 你可以看到这个:
https://artifacthub.io/packages/helm/vmware-tanzu/velero?modal=template&template=cleanup-crds.yaml

,它会在预删除时清理crd。实际上,您需要的所有文件可能类似于:

templates/hooks/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: xxx annotations: "helm.sh/hook": pre-upgrade "helm.sh/hook-weight": "-5" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded labels: ... rules: - apiGroups: - xxx resources: - xxx verbs: - create - patch - update - get - list

templates/hooks/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: xxx labels: ... annotations: "helm.sh/hook": pre-upgrade "helm.sh/hook-weight": "-3" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded subjects: - kind: ServiceAccount namespace: xxx name: xxx roleRef: kind: ClusterRole name: xxx apiGroup: rbac.authorization.k8s.io

templates/hooks/serviceaccount.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: xxx namespace: xxx annotations: "helm.sh/hook": pre-upgrade "helm.sh/hook-weight": "-4" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded labels: ...

templates/hooks/pre-updrade.yaml
  1. 文件1~3用于确保pre-upgrade.yaml有足够的能力访问api-server。 Pre-upgrade.yaml 描述您想要在预升级中执行的操作。您可能需要为其构建一个带有 kubelet 的 base_image。 pre-upgrade.yaml 可能像这样:

spec: serviceAccountName: xxx containers: - name: kubectl image: your_kubectl_container_image imagePullPolicy: Always command: - /bin/sh args: - -c - | set -e kubectl get xxx
    
© www.soinside.com 2019 - 2024. All rights reserved.