web-dev-qa-db-ja.com

Kubernetes cronjobのスケジュールを変更する方法、または手動で開始する方法は?

kubernetes cronjobのスケジュールを変更する簡単な方法はありますかkubectl change cronjob my-cronjob "10 10 * * *"のように?または、kubectl apply -f deployment.ymlを実行する必要のない他の方法?特にビルドプロセスでテンプレートからファイルを作成する場合は特にないため、デプロイメントyamlを手動で編集することは望ましくないため、後者は複雑なCI/CD設定では非常に扱いにくい場合があります。

または、cronジョブを手動で開始する方法はありますか?たとえば、ジョブは22時間後に開始するようにスケジュールされていますが、cronスケジュールを変更せずに今すぐ手動でトリガーしたいのですが(テストまたは最初の実行)?

8
SmCaterpillar

最新バージョンのk8s(1.10以降)は、次のコマンドをサポートしています。

$ kubectl create job my-one-time-job --from=cronjobs/my-cronjob

ソースはこれで解決しました k8s github issue

5
SmCaterpillar

パッチを適用すると、選択したリソースのフィールドのみを更新できます

patch -h                     
Update field(s) of a resource using strategic merge patch, a JSON merge patch, or a JSON patch.           

JSON and YAML formats are accepted.

Please refer to the models in
https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html
to find if a field is mutable.

Refのコメントで提供されているように:

kubectl patch cronjob my-cronjob -p '{"spec":{"schedule": "42 11 * * *"}}'

また、現在のkubectlバージョンでは、宣言されたcronjobの1回限りの実行を開始するには、手動でcronjob仕様に準拠するジョブを作成します。

kubectl create job --from=cronjob/mycron

私は正確にそれに答えるkubectlプラグインを開発した友人がいます!
既存のcronjobを受け取り、それからジョブを作成します。
参照 https://github.com/vic3lord/cronjobjob
インストール手順については、READMEをご覧ください。

0
Shushu