概要
MicroK8sにArgoをインストールしてWorkflowを動かした際に、下記のエラーが出て動かない問題の原因と対応方法です。
MountVolume.SetUp failed for volume "docker-sock" : hostPath type check failed: /var/run/docker.sock is not a socket file
原因と対応方法
原因は(エラーメッセージそのままですが)MicroK8sには /var/run/docker.sock がないことのようです。
https://github.com/kubeflow/kubeflow/issues/2347
リンク先のIssueにはパスを変更して対応する方法も書かれていますが、もう少しスマートな方法としてExecutorを変更する方法があるようです。
Argoでは下記のExecutorが選べるようになっており、デフォルトでは docker が設定されています
- docker
- k8sapi
- kubelet
- pns
これを docker 以外に変更することで /var/run/docker.sock も不要になってエラーが出なくなるようです。
それぞれの違いは良く分からなかった1のですが、とりあえずk8sapiを利用してみたところ問題なく動いています。
Helmを利用してインストールする場合は controller.containerRuntimeExecutor
でExecutorの指定が可能です。
helm install argo argo/argo --set "controller.containerRuntimeExecutor=k8sapi"
-
一応 https://argoproj.github.io/docs/argo/workflow-executors.html にPros/Consは記載されており、(docker以外を選ぶ必要があるなら)雰囲気的には安定したらpnsが良さそうな感じはします。ちなみに上記で利用したk8sapiはAPI経由だから遅いらしいです。 ↩