我需要以特定的顺序对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钩子和Kubernetes注解的Maven,可能有错误的假设。
1条答案
按热度按时间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~3用于确保pre-upgrade.yaml有足够的能力访问api-server。Pre-upgrade.yaml描述了你想在pre-upgrade中做什么。你可能需要为它构建一个base_image,其中使用kubelet。pre-upgrade.yaml可能会喜欢这样:
型