ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Linux版Minikube 1.18.1でPodmanドライバーの優先順位が変わったので試してみた

[お知らせ] この記事の初稿で、バージョンをMinikube 1.8.1と書いていました。現在は修正しています。

先日リリースされたMinikube 1.18.1で、Podmanドライバーの優先順位が変わりました。

github.com

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をインストールしました。

minikube.sigs.k8s.io

また、後で使うのでkubectlコマンドツールもインストールしておきます。同時点で最新のStableビルドをインストールしました。

kubernetes.io

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コマンドを実行できる必要がありました。

minikube.sigs.k8s.io

そこで、ページに書かれているように実行ユーザーを追加します。

$ 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を別のものに切り替えればいいだけですから。

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。