我需要按特定顺序部署 k8s 的 pod(例如扩展到 3 个副本),以确保最旧的成员(我在 Akka / Apache Pekko 集群中的集群领导者)是最后一个被关闭的 pod。
我想使用
controller.kubernetes.io/pod-deletion-cost
注释,以便为最老的成员提供最高的 Pod 删除成本。
我的部署是基于 Helm 的,所以现在我想知道是否可以使用 Helm
pre-upgrade
Hook 以便:
pre-upgrade
钩子阶段:
pod-deletion-cost
pod-calculation-cost
应用于我的部署的 Pod RollingUpdate
updateStrategy
执行升级
controller.kubernetes.io/pod-deletion-cost
并最后更新集群领导者我想知道这是否可能 - 我不是 Helm hooks 和 Kubernetes 注释方面的专家,可能有错误的假设。
也许我可以帮助你。 这个问题的核心是在pre-upgrade hook阶段如何进行访问api-server的操作。一种常见且标准的方法是在“升级前”阶段创建一个作业来执行所需的操作。下面我就详细讲解一下如何创建这个工作:
,它会在预删除时清理crd。实际上,您需要的所有文件可能类似于:
templates/hooks/clusterrole.yamlapiVersion: 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
spec:
serviceAccountName: xxx
containers:
- name: kubectl
image: your_kubectl_container_image
imagePullPolicy: Always
command:
- /bin/sh
args:
- -c
- |
set -e
kubectl get xxx