我在通过helm install
挂钩执行pre-install
时创建了一些秘密。
一切都很好。但是,执行helm delete
时,不会删除创建的机密。这是因为使用pre-install
安装的任何资源都被视为自我管理。所以我读到这可以使用post-delete
挂钩来完成。
所以问题是:
如何在删除后删除机密?
如果我们删除pre-install
个钩子,那么删除工作就好了。但是,当我们执行helm install
时,如何保证在创建pod之前创建机密?
答案 0 :(得分:3)
Tiller按特定顺序创建资源(在此处的源代码中找到它:https://github.com/kubernetes/helm/blob/master/pkg/tiller/kind_sorter.go#L26)
因此,对于这个特定的用户案例,不需要挂钩或任何其他机制,只需包含你的秘密和你的吊舱,魔法就会发生;)
也就是说,预安装的对象仍然存在问题。文档说明这是所需的行为:
实际上,这意味着如果你在一个创建资源 hook,你不能依赖helm delete来删除资源。至 破坏这些资源,你需要编写代码来执行此操作 在删除前或删除后挂钩或添加操作 " helm.sh/hook-delete-policy"钩子模板文件的注释。
唯一的解决方案是使用 post-delete 挂钩向图表添加作业,删除这些资源。
答案 1 :(得分:1)
您可以使用任何安装了kubectl的图像通过预删除钩将其删除,例如@ignacio-millán。为此,您还需要一个角色来特权地运行此作业,以便它可以删除机密。
或者您可以只使用K8s REST API并像这样卷曲它:
apiVersion: batch/v1
kind: Job
metadata:
labels:
annotations:
"helm.sh/hook": pre-delete # << run before delete (we still need the role)
...
spec:
template:
spec:
serviceAccountName: your-privileged-serviceaccount
automountServiceAccountToken: true
# this will mount var/run/secrets/kubernetes.io/serviceaccount/token
containers:
- name: pre-delete
image: "appropriate/curl" # alpine + curl (3 MB)
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
command:
- "/bin/sh"
- "-ec"
- |
curl -s -X DELETE -k https://kubernetes.default.svc/api/v1/namespaces/${NAMESPACE}/secrets/your-secret-name-nere \
-H "Authorization: Bearer $( cat /var/run/secrets/kubernetes.io/serviceaccount/token )" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d "{ \"kind\": \"Secret\", \"apiVersion\": \"v1\", \"metadata\": { \"name\": \"your-secret-name-nere\", \"namespace\": \"${NAMESPACE}\" } }" > /dev/null
{{- end }}
我们需要“角色绑定”具有角色(或clusterRole)的ServiceAccount。使用helm.sh/hook-weight来订购所有这些。 该角色应具有以下内容:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role # Roles works only in namespace vs ClusterRole works in all the cluster (warning!)
metadata:
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": "20"
"helm.sh/hook-delete-policy": before-hook-creation
labels:
....
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list", "create", "update"]
请注意,我们使用> / dev / null将curl输出转发为null,我们不希望在日志中使用它。 ;)对此进行注释,并在“ helm.sh/hook-delete-policy”中进行调试。
此处正在进行一项工作,此处应用了以下内容:
https://github.com/Flag5/consul-helm/tree/tls-encryption/templates 请参阅tls-*。yaml文件。
希望它会有所帮助:)
答案 2 :(得分:0)
您可以添加此行。
"helm.sh/hook-delete-policy": "hook-succeeded"