我想从升级前的kubectl
运行helm hook
命令,但是对于如何实现此目的,似乎没有任何文档。
我是否必须创建一个包含kubectl
的docker镜像才能实现?
还是有一些无需使用容器即可实现这一目标的方法?
我有一个基本的helm hook
,看起来像这样
apiVersion: batch/v1
kind: Job
metadata:
name: {{ .Chart.Name }}-change-pvc-hook
labels:
app: {{ .Chart.Name }}
annotations:
"helm.sh/hook": pre-upgrade
"helm.sh/hook-delete-policy": hook-succeeded, before-hook-creation
spec:
template:
metadata:
name: "{{.Release.Name}}"
labels:
app: {{ .Chart.Name }}
spec:
restartPolicy: Never
containers:
- name: pre-upgrade-change-pvc
如果有人可以解释如何在没有容器的情况下运行kubectl
或我如何实现这一点,那就太好了
答案 0 :(得分:0)
我正在用头盔挂钩做类似的事情。
在环顾四周时,我发现了以下问题: Running kubectl commands Helm post install
但是它所提供的功能不多,我目前正在研究头盔插件 https://helm.sh/docs/related/#helm-plugins
希望您找到答案
答案 1 :(得分:0)
我是否必须创建一个包含kubectl的docker镜像才能 实现这一目标?
是的,您必须创建它,因为容器通常是轻量级的,并且包含最基本的内容。 您可以使用Dockerfile使用kubernetes创建容器。
第二个选项是创建自己的mutating webhook,它将修改PVC(使用patch)。
更改接纳许可首先调用Webhooks,并且可以修改对象 发送到API服务器以实施自定义默认值。毕竟对象 修改完成,并且传入对象得到验证之后 由API服务器调用验证入网钩子,并且可以 拒绝执行自定义策略的请求。
这样,您可以在let locations = [{
name: 'location1',
value: 11
}, {
name: 'location2',
value: 21
},
{
name: 'location3',
value: 31
}, {
name: 'location4',
value: 41
},
{
name: 'location5',
value: 51
}, {
name: 'location6',
value: 61
},
{
name: 'location7',
value: 71
}, {
name: 'location8',
value: 71
},
{
name: 'location9',
value: 71
},
];
for (let i = 0; i < locations.length; i++) {
if (i == 0 || i % 3 == 0) {
$('#map-card').append(`<div class="columns"></div>`);
}
$('#map-card .columns:last').append(`<div class="column">${i}th Column created</div>`)
}
创建发行版之前修改PVC。
答案 2 :(得分:0)
您可以像Prometheus运算符一样在其掌舵图中执行清理(预删除钩子):prometheus operator kubectl usage
基本上,您可以使用图片= for (i = 0; i < 3; i++)
像这样的东西:
k8s.gcr.io/hyperkube:v1.12.1
其他选择是使用CURL到Kubernetes API,例如here
请注意,您需要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
然后您可以使用automountServiceAccountToken: true
您只需要为此而卷曲的图像。您可以为此使用zakkg3 / opennebula-alpine-bootstrap。
例如,在这里我使用curl而不是kubectl基于文件创建一个秘密:
/var/run/secrets/kubernetes.io/serviceaccount/token
请注意将其输出为> / dev / null,这是一种好的做法,否则您将在日志记录管理(ELK / LOKI)中得到此输出。