Поскольку вы не изменили ничего на стороне HELM, например, значения или спецификации / шаблоны, HELM не будет выполнять никаких изменений. В этом случае ваш код является внешним источником и выглядит с точки зрения HELM, это правильно.
Я могу предложить несколько альтернатив для достижения того, что вы хотите:
- Используйте HELM с Флаг FORCE Используйте
helm upgrade --force
для обновления своего развертывания. Хелм документы : - принудительно - принудительное обновление ресурсов с помощью стратегии замены
В этом case Helm воссоздаст все ресурсы вашей диаграммы, следовательно, стручки, а затем повторно запустит initContainers
, снова выполняя ваш скрипт.
Использование Kubernetes CronJob В этом случае вы создадите модуль, который смонтирует ваш том и запустит необходимый скрипт / команду.
Пример Kubernetes CronJob :
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: nice-count
spec:
schedule: "*/2 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: nice-job
image: alpine
command: ['sh', '-c', 'echo "HelloWorld" > /usr/share/nginx/html/index.html']
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
restartPolicy: Never
В этом примере CronJob будет запускаться каждые 2 часа , монтировать том task-pv-storage
в /usr/share/nginx/html
и выполнять команду echo "HelloWorld" > /usr/share/nginx/html/index.html
.
Вы должны вызвать CronJob, вручную создавая задание, с помощью команды:
kubectl create job --from=cronjob/<CRON_JOB_NAME> <JOB_NAME>
В приведенном выше примере команда выглядит следующим образом:
kubectl create job --from=cronjob/nice-count nice-count-job
Выполнить задание вручную или с помощью CI / CD Вы можете выполнить задание напрямую или, если у вас есть решение CI / CD, вы можете создать задание для однократного запуска вместо использования CronJob, в этом случае вы следует использовать этот шаблон:
apiVersion: batch/v1
kind: Job
metadata:
name: nice-count-job
spec:
template:
spec:
containers:
- image: alpine
name: my-job
volumeMounts:
- mountPath: /usr/share/nginx/html
name: task-pv-storage
command:
- sh
- -c
- echo "hello" > /usr/share/nginx/html/index.html
restartPolicy: Never
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
Я протестировал этот пример и работает в обоих случаях.
Пожалуйста, дайте мне знать, если это помогло!