[お知らせ] この記事の初稿で、バージョンをMinikube 1.8.1と書いていました。現在は修正しています。
先日リリースされたMinikube 1.18.1で、Podmanドライバーの優先順位が変わりました。
Podmanドライバーのドキュメントを見る限り、まだExperimentalサポートという状態ではあるのですが、ほぼ問題なく動作するのを確認しています。
一部のディストリビューションではDockerがサポートされない時期が長く続きました。Docker 20.10でサポートされるようになったものの、他のリポジトリーの追加が必要になります。一方で、最近はPodmanがいろいろなディストリビューションで利用可能になっているようです。RHEL,CentOS,Fedoraは以前から利用できましたが、Ubuntu 20.10とかopenSUSEとかその他にもいろいろなディストリビューションで利用可能だと思います。Podmanはデーモンレスでコンテナーを実行できる点が利点だそうです。
というわけで、早速LinuxでPodmanドライバーが使えるか試してみることにしました。使ったLinuxディストリビューションはFedora 33です。
Minikubeなどのインストール
Minikubeはドキュメントに従ってインストールします。この記事を書いた時点で最新の1.18.1をインストールしました。
また、後で使うのでkubectlコマンドツールもインストールしておきます。同時点で最新のStableビルドをインストールしました。
Podmanをインストールします。同時点で最新の3.0.1がインストールされました。今回はPodmanドライバーを試すのが目的なので、他のエンジンはインストールしないようにします。
# yum install podman
Minikubeを使ったクラスターのセットアップ
普段はいろいろオプションを渡すのですが、今回は最小限にしておきます。 実行すると確かにorder順がPodmanが最初になっているようです。
[ytooyama@fefora-minikube ~]$ minikube start 😄 Fedora 33 (vbox/amd64) 上の minikube v1.18.1 👎 Unable to pick a default driver. Here is what was considered, in preference order: ▪ podman: Not healthy: "sudo -k -n podman version --format {{.Version}}" exit status 1: sudo: a password is required ▪ virtualbox: Not installed: unable to find VBoxManage in $PATH ▪ vmware: Not installed: exec: "docker-machine-driver-vmware": executable file not found in $PATH ▪ docker: Not installed: exec: "docker": executable file not found in $PATH ▪ kvm2: Not installed: exec: "virsh": executable file not found in $PATH ▪ none: Not installed: exec: "docker": executable file not found in $PATH ❌ Exiting due to DRV_NOT_DETECTED: No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/
まあ失敗しましたが。 注目すべきところは「podman: Not healthy: "sudo -k -n podman version --format {{.Version}}" exit status 1: sudo: a password is required」というところでしょうか。
以前からpodman Driverを使うときは、実行するユーザーでsudoをパスワードなしでpodmanコマンドを実行できる必要がありました。
そこで、ページに書かれているように実行ユーザーを追加します。
$ sudo visudo ... username ALL=(ALL) NOPASSWD: /usr/bin/podman ...
もう一度実行します。
[ytooyama@fefora-minikube ~]$ minikube start 😄 Fedora 33 (vbox/amd64) 上の minikube v1.18.1 ✨ podmanドライバーが自動的に選択されました 👍 コントロールプレーンのノード minikube を minikube 上で起動しています 💾 Kubernetes v1.20.2 のダウンロードの準備をしています > preloaded-images-k8s-v9-v1....: 491.22 MiB / 491.22 MiB 100.00% 17.52 Mi 🔥 podman container (CPUs=2, Memory=2200MB) を作成しています... 🐳 Docker 20.10.3 で Kubernetes v1.20.2 を準備しています... ▪ Generating certificates and keys ... ▪ Booting up control plane ... ▪ Configuring RBAC rules ... 🔎 Kubernetes コンポーネントを検証しています... ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v4 🌟 有効なアドオン: storage-provisioner, default-storageclass 🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
エラーが表示されなかったので、うまくいったようです。 コンテナランタイムとしてDockerのほか、CRI-Oを使った動作を確認しました。 私が試したときは、「containerd」はなんかうまく動かないようでした。
[ytooyama@fefora-minikube ~]$ kubectl get no NAME STATUS ROLES AGE VERSION minikube Ready control-plane,master 2m31s v1.20.2
Linuxでテスト用のKubernetes環境を作る場合、いろいろな手段があります。 Minikubeを使うのも一つの手段だと思います。 LinuxディストリビューションによってはDockerの利用にリポジトリーの追加が必要になる場合があります。 とはいえ、DockerかPodmanのいずれか(もしくは両方)はサポートされているはずなので、今回の変更は良かったような気がします。
Podmanはルートレス、デーモンレスで動くコンテナエンジンです。ほぼDockerと変わらないソフトウェアになっていますので、そこまで困ることもないでしょう。 うまくいかなければDriverを別のものに切り替えればいいだけですから。