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

w8ntj3qf  于 12个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(140)

我需要以特定的顺序对k8s部署的pod(例如,扩展到3个副本)进行配置,以确保最老的成员(我在Akka / Apache Pekko集群中的集群领导者)是最后一个被关闭的pod。
我想使用controller.kubernetes.io/pod-deletion-cost注解,以便给予最老的成员最高的Pod删除成本。
我的部署是基于Helm的,所以现在我想知道我是否可以使用Helm pre-upgradeHook来:

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

我想知道这是否可能-我不是Helm钩子和Kubernetes注解的Maven,可能有错误的假设。

sh7euo9m

sh7euo9m1#

也许我可以帮助你。这个问题的核心是如何在升级前的钩子阶段执行访问api服务器的操作。一个常见和标准的方法是在pre-upgrade阶段创建一个作业来执行所需的操作。下面,我将详细解释如何创建这个作业:
1.您应该将与作业相关的YAML文件放在templates目录中,并将注解指定为“helm.sh/hook“:pre-upgrade。
1.通常,我们还需要与rbac相关的YAML文件,因为我们需要授予作业访问相应API的权限。
1.我们还需要控制每个文件的创建顺序,这可以通过使用“helm.sh/hook-weight“
1.不要忘记修补“helm.sh/hook-delete-policy“注解
你可以看到这个:https://artifacthub.io/packages/helm/vmware-tanzu/velero?modal=template&template=cleanup-crds.yaml,它在预删除时清理crds。实际上,你需要的所有文件可能如下:

  1. 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

字符串

  1. 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

  1. 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:
    ...

  1. templates/hooks/pre-updrade.yaml
    文件1~3用于确保pre-upgrade.yaml有足够的能力访问api-server。Pre-upgrade.yaml描述了你想在pre-upgrade中做什么。你可能需要为它构建一个base_image,其中使用kubelet。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

相关问题