この記事はスタンバイ Advent Calendar 2021の5日目の記事です。
昨日は@ocomeさんの『SilhouetteからPAC4Jに乗り換えてついでにOpenID Connectを使う』でした。
この記事ではRancher DesktopをMacにインストールして触ってみた感想を書きます。
TL;DR
- Rancher Desktopは簡単にインストールできる
- Kubernetesのバージョン切り替えも簡単にできて便利
- nerdctl面白い
Rancher Desktop とは
OSSのデスクトップアプリケーションで、デスクトップ上でKubernetesの作成管理ができます。
macとwinで動くようですが、M1のmacには現在非対応なようです。(執筆時点)
公式:Rancher Desktop: Kubernetes and container management on the desktop
Github:rancher-sandbox/rancher-desktop: Kubernetes and container management to the desktop
デスクトップでKubernetesを作成できるツールといえば、Docker Desktopやkindやminikubeが有名ですが、それらに新たな選択肢が加わりました。
公式を見ると、VM上にcontainerdを動かして、その上にkubernetes環境を作成するようです。
(以下の図は、Rancher Desktop: Kubernetes and container management on the desktopからの引用です。)
インストールしてみる
では、公式手順に従ってインストールしてみましょう!
環境は以下の通りです。
- macOS Big Sur 11.6
- CPU 2.4 GHz 8コアIntel Core i9
- MEM 64GB
zipファイルのダウンロード
リリースページからzipファイルをダウンロードします。
zipを解凍して出てきたファイルを実行します。
アプリケーションの起動
起動するとKubernetesのバージョンを聞かれます。とりあえず執筆時点の最新v1.21.6で行きます。
初回はイメージのダウンロード等で時間がかかる模様
準備完了するとこのようになります。
この段階でローカルの ~/.kube/config
にRancher Desktopのコンテンツが追記され、向き先も変更されています。
$ kubectl config current-context
rancher-desktop
触ってみる
起動直後の状態
nodeは1つ
$ kubectl get node -A
NAME STATUS ROLES AGE VERSION
lima-rancher-desktop Ready builder,control-plane,master 22m v1.21.6+k3s1
Podは以下の通り、まあ普通ですね(普通とは)
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system local-path-provisioner-5ff76fc89d-nb74z 1/1 Running 0 22m
kube-system metrics-server-86cbb8457f-pmg5f 1/1 Running 0 22m
kube-system coredns-7448499f4d-7scfw 1/1 Running 0 22m
kube-system helm-install-traefik-crd-skdgx 0/1 Completed 0 22m
kube-system svclb-traefik-68c5m 2/2 Running 0 22m
kube-system helm-install-traefik-lxpmd 0/1 Completed 1 22m
kube-system traefik-97b44b794-xzrkz 1/1 Running 0 22m
kube-image builder-jwbd4 2/2 Running 0 21m
Kubernetesのバージョンを切り替える
Rancher Desktopの特徴として、「kubernetesのバージョンを簡単に切り替えられる」というのがあります。
コンソールから選択するだけです。
試しに、v1.21.6からv1.20.6にしてみます。選択してしばらく待つだけで簡単に切り替わります。
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:34:20Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.6+k3s1", GitCommit:"df033fa248bc2c9f636e4c0ff2b782cb8edbbf10", GitTreeState:"clean", BuildDate:"2021-11-04T00:25:14Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
## 変更後
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:34:20Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.6+k3s1", GitCommit:"8d0432824a9fd9474b67138b7630c33f285d332f", GitTreeState:"clean", BuildDate:"2021-04-16T19:04:44Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
WARNING: version dif
これはアップデートの検証に便利そうですね。
Kubernetes環境をリセットする
『あーもう!1回環境消しちゃいたい!』そんな時ありませんか?
コンソールからボタン1つで環境をリセットできます。
nerdctlを使う
ドキュメントを読むとこんな一文があります。
Rancher Desktop provides the ability to build, push, and pull images via the NERDCTL project.
Note, nerdctl is put into the path automatically. This occurs during the installer on Windows, and upon first run on macOS.
(意訳:Rancher DesktopはNERDCTLを使ってイメージのbuild/push/pull機能を提供するよ。nerdctlは自動で入ってpathも通ってるよ。これはWinはインストーラがやって、macはアプリの初回起動時に行われるよ)
nerdctlはcontainerd向けに作られた、コンテナの操作ツールです。containerd用のdockerコマンドと考えてください。(公式:containerd/nerdctl: contaiNERD CTL - Docker-compatible CLI for containerd, with support for Compose)
nerdctlはdockerコマンドと同じUI/UXを考えて作られています。試しにnginxコンテナを動かしてみましょう。
$ nerdctl run -d -p 9999:80 nginx
55e7859991c3c9de0fc17b0e07bad7a0abb6d3819a68e9a32d937e19ca3eda11
起動を確認してみましょう。ブラウザには親の顔より見た画面が。
nerdctlコマンドでコンテナの状態を確認。
$ nerdctl ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55e7859991c3 docker.io/library/nginx:latest "/docker-entrypoint.…" 15 minutes ago Up 0.0.0.0:9999->80/tcp
dockerコマンドでは起動を確認できません。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
nerdctlにはnamespaceの概念があり、今回の環境では以下のようなnamespaceができてます。
$ nerdctl namespace list
NAME CONTAINERS IMAGES VOLUMES
buildkit 0 0 0
default 1 1 0
k8s.io 19 22 0
先ほど作ったnginxはdefault
というnamespaceにいます。
$ nerdctl --namespace default ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55e7859991c3 docker.io/library/nginx:latest "/docker-entrypoint.…" 30 minutes ago Up 0.0.0.0:9999->80/tcp
k8s.io
というnamespaceには、Rancher Desktopで作成したKubernetesのコンテナ群が見えます。
$ nerdctl --namespace k8s.io ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a3c6883ef0f sha256:897ce3c5fc8ff8b1ad4fe1e74f725a0942e8e1dad0ee09096cfa7320da889a53 "entry" About an hour ago Up
132e0235d9d4 docker.io/rancher/kim:v0.1.0-beta.6 "kim --debug agent -…" About an hour ago Up
1bb39f3b47db sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e "/pause" About an hour ago Up
1fc1dd02eec4 sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e "/pause" About an hour ago Up
2dfc58bc1d60 sha256:897ce3c5fc8ff8b1ad4fe1e74f725a0942e8e1dad0ee09096cfa7320da889a53 "entry" About an hour ago Up
387247a2f4eb sha256:148c19256271909650fb514430c86606775bedaafc30e9fb6af6faad5adf1086 "local-path-provisio…" About an hour ago Up
6bfb954aa0f8 docker.io/moby/buildkit:v0.8.3 "buildkitd --addr=un…" About an hour ago Up
80d7c860bbe3 sha256:aa764f7db3051ee79467eeef28fe6a5f0667ae8af7bd6ead61f9b0ae3d8f638e "/traefik --configfi…" About an hour ago Up
8a030c048cf3 sha256:9dd718864ce61b4c0805eaf75f87b95302960e65d4857cb8b6591864394be55b "/metrics-server" About an hour ago Up
8e72c8c144d6 sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e "/pause" About an hour ago Up
901b1d009b36 sha256:296a6d5035e2d6919249e02709a488d680ddca91357602bd65e605eac967b899 "/coredns -conf /etc…" About an hour ago Up
a35a26ee3aab sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e "/pause" About an hour ago Up
d526c08cb6e8 sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e "/pause" About an hour ago Up
f138ceae1e3e sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e "/pause" About an hour ago Up
helmを使ったデプロイ
Rancher Desktopにはhelmも入ってるので、helmを使ってアプリケーションをKubernetesにデプロイしてみます。
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
$ helm install wp bitnami/wordpress
NAME: wp
LAST DEPLOYED: Sat Nov 20 14:44:06 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: wordpress
CHART VERSION: 12.2.0
helmで確認
$ helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
wp default 1 2021-11-20 14:44:06.851363 +0900 JST deployed wordpress-12.2.0 5.8.2
kubectlで確認
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
svclb-wp-wordpress-qp6pz 0/2 Pending 0 4m11s
wp-mariadb-0 1/1 Running 0 4m11s
wp-wordpress-7cf6dbc45f-42d45 1/1 Running 0 4m11s
このように内蔵されているnerdctlやhelmでアプリケーションの開発やデプロイが行えます。
感想など
- Racher Desktopはまだv0.6だけど、荒削り感はない
- kubernetesのバージョンを簡単に切り替えられるのは便利
- Docker Desktopが一部有料化という話もあるので、containerd と nerdctl ベースのRancher desktop + nerdctl環境に慣れておくのもいいかも