Вы можете сделать это так, как оператор Prometheus выполняет очистку (хук предварительного удаления) в своей диаграмме управления: Использование kubectl оператора Prometheus
в основном, вы можете использовать изображение = k8s.gcr.io/hyperkube:v1.12.1
как-то так:
apiVersion: batch/v1
kind: Job
metadata:
name:somename-operator-cleanup
namespace: somenamespace
annotations:
"helm.sh/hook": pre-delete
"helm.sh/hook-weight": "3"
"helm.sh/hook-delete-policy": hook-succeeded
labels:
app: someapp-operator
spec:
template:
metadata:
name: somename-operator-cleanup
labels:
app: someapp
spec:
{{- if .Values.global.rbac.create }}
serviceAccountName: {{ template "prometheus-operator.operator.serviceAccountName" . }}
{{- end }}
containers:
- name: kubectl
image: "k8s.gcr.io/hyperkube:v1.12.1"
imagePullPolicy: "IfNotPresent"
command:
- /bin/sh
- -c
- >
kubectl your command here.
kubectl delete alertmanager --all;
kubectl delete prometheus --all;
kubectl delete prometheusrule --all;
kubectl delete servicemonitor --all;
sleep 10;
kubectl delete crd alertmanagers.monitoring.coreos.com;
kubectl delete crd prometheuses.monitoring.coreos.com;
kubectl delete crd prometheusrules.monitoring.coreos.com;
kubectl delete crd servicemonitors.monitoring.coreos.com;
kubectl delete crd podmonitors.monitoring.coreos.com;
restartPolicy: OnFailure
Другой вариант - CURL для API Kubernetes, например здесь обратите внимание, что вам нужно automountServiceAccountToken: true
, а затем вы можете использовать токен Barear из /var/run/secrets/kubernetes.io/serviceaccount/token
Вам просто нужно изображение с завитком для этого. Для этого вы можете использовать zakkg3 / opennebula-alpine-bootstrap.
Например, здесь я создаю секрет на основе файла, используя curl вместо kubectl:
url -s -X POST -k https://kubernetes.default.svc/api/v1/namespaces/${NAMESPACE}/secrets \
-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\": \"{{ include "opennebula.fullname" . }}-ssh-keys\", \"namespace\": \"${NAMESPACE}\" }, \"type\": \"Opaque\", \"data\": { \"authorized_keys\": \"$( cat opennebula-ssh-keys/authorized_keys | base64 | tr -d '\n' )\", \"config\": \"$( cat opennebula-ssh-keys/config | base64 | tr -d '\n' )\", \"id_rsa\": \"$( cat opennebula-ssh-keys/id_rsa | base64 | tr -d '\n' )\", \"id_rsa.pub\": \"$( cat opennebula-ssh-keys/id_rsa.pub | base64 | tr -d '\n' )\" } }" > /dev/null
Обратите внимание, что рекомендуетсявывод в> / dev / null, иначе вы получите этот вывод в вашем управлении журналами (ELK / LOKI).