ひとりAdent Calendar13日目です。
昨日紹介したbinary artifactsのビルドを使って、.NET Core コンソールアプリをcronjobとして動かしてみます。
cronjobというのはその名の通り、Linuxのcronのようにコンテナを指定したスケジュールで定期実行できます。
Cron Jobs | Developer Guide | OpenShift Container Platform 3.11
このサンプルだと、perl
というContainer Catalogで公開されているイメージを使っていますが、自分でビルドしてOpenShiftのdocker registryにpushしたイメージを指定することもできます。OpenShift 3.7以前はイメージのURLを直接指定する必要がありましたが、3.9以降はimagestreamで指定できるようになりました。
Managing Images | Developer Guide | OpenShift Container Platform 3.11
これを使って、.NET Console Applicationからイメージを作って実行することにします。今回はサンプルなので、デフォルトのConsoleプロジェクトのまま実行することにします。
$ dotnet new console --output csjob $ cd csjob $ dotnet publish -c Release /p:MicrosoftNETPlatformLibrary=Microsoft.NETCore.App
続いて昨日と同じようにbinary artifactsでイメージを作ります。
$ oc new-build --name=csjob1 dotnet:2.2 --binary=true $ oc start-build csjob1 --from-dir=bin/Release/netcoreapp2.2/publish
これでImage StreamおよびImage Stream Tagが作られます。
$ oc get istag NAME DOCKER REF UPDATED csjob1:latest docker-registry.default.svc:5000/aspnetcore22/csjob1@sha256:77417... About an hour ago
このImage Stream Tagをkubernetesのオブジェクトから参照できるようにするためにimage-lookupを設定します。
$ oc set image-lookup csjob1
これでcsjob1
というimagesreamを参照できるようになったので、次のコマンドでcronjobを作成できます。デフォルトで.NET Coreのコンソールアプリが起動するのでcommandは指定しなくても大丈夫です。
$ oc run csjob1 --image=csjob1:latest --schedule='*/1 * * * *' --restart=OnFailure --labels parent="cronjobcs"
jobが実行される様子はoc get pod -w
などで確認し、ログをoc log {pod名}
で確認します。
このままだ延々とcronjobが実行され続けるので不要なjobは削除しておきましょう。
$ oc delete cronjob.batch/csjob1