zaki work log

作業ログやら生活ログやらなんやら

「Kubernetes Novice Tokyo #9」でkindをPodman環境で使う内容でLT登壇した振り返り

Kubernetes Novice Tokyo #9」で「kind on Podman」というタイトルでLTしたので、内容について振り返ります。

k8s-novice-jp.connpass.com

発表資料

speakerdeck.com

内容

Kubernetesのノードとして動作するDockerコンテナを使うことでDocker上でKubernetesクラスタを作成できるkindというツールを、DockerではなくPodmanで動かす、という内容を紹介しました。

LTタイトルは、、、ちょっと端的過ぎたかもしれない。。(反省点)
「DockerではなくPodmanでkindを~」とかの方がわかりやすかったですね。

ベースの情報はLT内でも何度か触れたContainer Runtime Meetup #3のPodmanに関する内容になっていて、その後に割とすぐ手元の環境でもPodman環境でkindを動かす、というのは確認してたりします。

zaki-hmkc.hatenablog.com

以前書いたブログは、Podmanで動かす手順に終始してましたが、Noviceということもあって、「なんでPodman使ったの?」という背景の説明(CentOS開発終了→RHELが使いやすくなった→RHELだとDockerよりPodmanの方が使いやすい)も混ぜることにしました。

登壇タイミングと準備

Container Runtime Meetup #3が1月末だったので、本当は2月のKubernetes Novice Tokyo #8で話せれば(CentOS開発終了のニュースからもさほど時間経ってなくて)タイムリーだったのですが、準備の時間がちょっとなかったので別の機会で…と思ってました。ですが、3月のNoviceの募集が始まったタイミング(2月下旬)も微妙に忙しく、このネタはもう流そうと思ってましたw
そう思ってたところ、LTの抽選締め切りの3月5日直前あたりからちょっと時間取れるようになって、「あれ?週末準備すれば行けるんじゃね?」と思い、抽選前日に枠も1個空いていたので申し込みました。

なので、ネタとしては以前検証した内容だったけど、発表としては割と突貫で準備がんばりました。

とはいえ、LTの時間が5分だと絞り切れなかったと思うので、10分枠だったのは幸いでした。
(といいつつ、10分枠でも微妙にオーバーしそうな感じでしたが)

LTで入らなかったデモ

10分もあるのでデモできるだろーと最初は考えてましたが、無理でした。
kindクラスタの作成はLTの時間内で余裕で完了するので、LTの最初の方でクラスタ作成を行ってスライドの説明を進めつつ頃合いを見計らってターミナルに戻る、というヤツをやってみたかったのですが、コマンドの入出力だけじゃなくて環境や前提など最低限の説明を入れると思ったより時間使ってしまいますね。

5分LTでデモやってる方、スゴイです。。

副産物

(以下、kind version 0.10.0の場合)

rootlessモードの説明をする際に、なんだかんだでDockerのrootlessは試したことが無かったのでいい機会になりました。

zaki-hmkc.hatenablog.com

rootlessのDockerでもkind試しましたが、やっぱり「rootlessコンテナ環境でもsudoが必要」を確認できました。

ちなみに動作は微妙に異なり、rootlessのDocker環境でsudoを使わずにユーザー権限でクラスタ作成しようとすると以下の通りで、「ノードのコンテナをデプロイしたあとのクラスタ作成処理でエラー」となり、rootless実行時のガードは特に入っていない模様。
実際にコンテナをデプロイしてからエラーになるので、失敗まで時間がかかります。

zaki@ubuntu-node:~/local/kind$ ./kind create cluster
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.20.2) 🖼 
 ✓ Preparing nodes 📦  
 ✗ Writing configuration 📜 
ERROR: failed to create cluster: failed to generate kubeadm config content: failed to get kubernetes version from node: failed to get file: command "docker exec --privileged kind-control-plane cat /kind/version" failed with error: exit status 1
Command Output: Error response from daemon: Container 38056cbe6654f6e0c5e0f71c162aff811985eb207c2d3dd807cdb62f6ee9a88f is not running

それに対してPodmanの場合は以下の通りで、クラスター作成前にpodman provider does not work properly in rootless modeとメッセージが出力されている通り「Podmanの場合はrootlessなので一般ユーザー権限だと動かさない」という処理が入っているような雰囲気。(想像です)

[zaki@rhel8 kind]$ kind create cluster
enabling experimental podman provider
Creating cluster "kind" ...
podman provider does not work properly in rootless mode

また、環境変数KIND_EXPERIMENTAL_PROVIDERについては、「Dockerが未インストールでPodmanがインストール済みの場合」は、指定しなくてもPodmanでkindが動作します。
「DockerとPodmanが両方インストール済みの場合」はデフォルトではDockerでkindがデプロイされます。
両方インストール済みの場合にPodmanでkindを動作させたい場合は、明示的にKIND_EXPERIMENTAL_PROVIDER=podmanを指定すればPodmanでkindが使用されます。

関連リンク

スライドのページにも載せてますが再掲。

rheb.hatenablog.com

speakerdeck.com

rheb.hatenablog.com

medium.com

speakerdeck.com

speakerdeck.com