事象
オフライン環境で初めてTaskを起動するとPending状態となる。
$ kubectl get taskrun NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME taskrun-hello Unknown Pending 3m46s
具体的にはPodの初期化で止まっている。
$ kubectl get pod NAME READY STATUS RESTARTS AGE taskrun-hello-pod-p8lx7 0/1 Init:0/1 0 3m22s
環境
- Windows10
- DockerDesktop 2.4
- pipeline.tekton.dev/release: "v0.17.0"
尚、tektonの関連リソースは以下コマンドで展開済。
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
$ kubectl get all -n tekton-pipelines ... NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/tekton-pipelines-controller ClusterIP 10.X.X.X <none> 9090/TCP xxm service/tekton-pipelines-webhook ClusterIP 10.X.X.X <none> 9090/TCP,8008/TCP,443/TCP xxm NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/tekton-pipelines-controller 1/1 1 1 xm deployment.apps/tekton-pipelines-webhook 1/1 1 1 xm ...
原因
以下のエントリー用イメージの取得に失敗している。
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint
具体的にはTaskを実行した際のPodのEvent情報は以下。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 100s default-scheduler Successfully assigned default/echo-hello-world-task-run-pod-p8lx7 to docker-desktop Normal Pulling 100s kubelet, docker-desktop Pulling image "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.17.0@sha 256:3566c77d313eba5dc5ca1c015007205fc78a4141de2caa97ae5f01665cb00b42"
よって同イメージを事前にPullした状態でTaskrunを実行すると正常に終了する。
$ kubectl get taskrun NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME taskrun-hello True Succeeded 17s 7s
以下、補足です。
補足
HelloをPod内で表示するだけのTask/Taskrunで説明します。
以下のTaskを
apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: task-hello spec: steps: - name: echo image: ubuntu command: - echo args: - "hello world"
起動した状態で
$ kubectl get task NAME AGE task-hello xm
以下のYAMLを
apiVersion: tekton.dev/v1alpha1 kind: TaskRun metadata: name: taskrun-hello spec: taskRef: name: task-hello
作成するとtaskRef
で指定したTaskが実行されます。
$ kubectl create -f taskrun-hello.yaml taskrun.tekton.dev/taskrun-hello created
ただし、同Taskを実行する際にはTektonのDeploymentで実行される以下のイメージに加えて
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller
以下のentrypointイメージも一時的が必要になるのが根本原因です。
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint
Taskrun実行時に起動するTaskのInit Containers
の扱いで同イメージが動くので、このイメージ取得に時間がかかったりイメージ取得に失敗している場合は同事象が起こります。
ちなみに正常にTaskが実行できた場合のEventは以下となります。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m7s default-scheduler Successfully assigned default/taskrun-hello-pod-mhmgp to docker-desktop Normal Pulled 3m6s kubelet, docker-desktop Container image "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.17.0@s ha256:3566c77d313eba5dc5ca1c015007205fc78a4141de2caa97ae5f01665cb00b42" already present on machine Normal Created 3m6s kubelet, docker-desktop Created container place-tools Normal Started 3m6s kubelet, docker-desktop Started container place-tools Normal Pulling 3m6s kubelet, docker-desktop Pulling image "ubuntu" Normal Pulled 3m1s kubelet, docker-desktop Successfully pulled image "ubuntu" Normal Created 3m1s kubelet, docker-desktop Created container step-echo Normal Started 3m1s kubelet, docker-desktop Started container step-echo
Tektonの実行に必要な同イメージの存在は、意識することが少ないので覚えておくとトラブルシューティングに役立ちます。