内容

MXLinux で Rancher Desktop を動かす

1 月 26 日に、Rancher Desktop が正式に v1.0.0 としてリリースされました.

今回は、実際に Rancher Desktop を MXLinux にインストールして動かそうと思います.

Rancher Desktop とは

Rancher Desktop は Electron と Node.js をベースに構築されたデスクトップアプリケーションであり、デスクトップ上で Kubernetes とコンテナ管理を実行することができます.

また、実行する Kubernetes のバージョンを自由に選択することができます.

containerd、またはMoby (dockerd)を使って、コンテナイメージのビルド、プッシュ、プル、実行が可能です. ビルドしたコンテナイメージは、レジストリを必要とせず、すぐに Kubernetes で実行できます.

必要条件

OSS のデスクトップアプリケーションで、macOS や Windows、そして Linux の様々な環境で動作させることができます. M1 にも対応しているため、ほとんどの環境で動作が可能になりました.

環境での必要条件は以下の通りです.

macOS

  • macOS
    • Catalina 10.15 以降
  • CPU アーキテクチャ
    • Apple Silicon(M1)または VT-x 搭載の Intel CPU

WindowsOS

  • Windows
    • Windows 10 ビルド 1909 以降
    • Home エディションにも対応
  • Hyper-V(仮想化機能) が有効化されている
  • Windows Subsystem for Linux (WSL)
    • Rancher Desktop は、Windows 上で WSL が必要ですが、セットアップの一部として自動的にインストールされます
    • 手動でディストリビューションをダウンロードは不要

Linux

  • .deb.rpmパッケージ、またはAppImagesをインストールできるディストリビューション

マシンスペック

  • 8GB のメモリー
  • 4 コアの CPU

動作の仕組み

Rancher Desktop は、他のツールをラッピングしながら、動作を実現しています.

MacOS と Linux では、LimaQEMU といった仮想マシンを活用してcontainerdまたはdockerdと Kubernetes (k3s) を実行します.

Windows システムでは、Windows Subsystem for Linux v2 (WSL2) を利用しています.

下図は rancher から引用 /2022/01/setup-rancher-desktop-on-mxlinux/how-it-works-rancher-desktop.webp

Rancher Desktop では、NERDCTL プロジェクトと Docker CLI を利用して、イメージを build、push、pull する機能が用意されています. なお、nerdctldockerの両方が自動的にパスに入れられます. Windows ではインストーラー中に、macOS と Linux では初回実行時に行われます.

いずれのツールを使用する場合も、Rancher Desktop が適切なコンテナランタイムで実行されている必要があります.

nerdctlの場合は、containerdランタイムを使用します。docker の場合は、dockerd (moby)ランタイムを使用します.

Lima について
Lima は WSL と似ており、自動ファイル共有とポート転送、および containerd を備えた Linux の仮想マシンを起動します. Lima は macOS ホストで使われることが想定されていますが、Linux ホストでも使うことができます.
QEMU について
QEMU は、OSS の PC エミュレーターです. x86SPARCMIPS といったさまざまな CPU 上の Linux、Windows などで動作し、ほかの CPU の命令をネイティブコードに変換しながら実行できるという特徴を持ちます.
k3s について
k3s は、Rancher Labs 社が発表した軽量な Kubernetes の 1 つで、小さいサイズなバイナリと、メモリ使用量が少ないを特徴としています. 最近では、IoT や Edge コンピューティングなどでの活用が期待されています.
nerdctl について
nerdctl は containerd 向けのコンテナの操作ツールです. containerd 用の docker コマンドだと考えていただければと思います.

MXLinux へのインストール

Rancher Desktop を Linux ディストリビューションの 1 つである MXLinux にインストールしてみます.

インストール方法は公式ドキュメントに従って、Rancher Desktop のリポジトリを追加し、Rancher Desktop をインストールします.

Linux へのインストールはいくつかのパッケージがありますが、MXLinux は Debian(stable) ベースのため、.debパッケージを使用します.

1
2
3
4
5
6
7
8
9
# リポジトリを取得し、登録
$ curl https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/Release.key | sudo apt-key add -
$ sudo add-apt-repository 'deb https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/ ./'

# パッケージ一覧を更新
$ sudo apt update

# Rancher Desktop をインストール
$ sudo apt install rancher-desktop

以上で、Rancher Desktop のインストールは完了です. 非常に簡単ですね.

MXLinux について
MXLinuxDistroWatch.com でも 注目度の高い Linux ディストリビューションです. antiX と旧 MEPIS Linux コミュニティ間の共同事業として構築されたプロジェクトでギリシャおよびアメリカにて開発されています.

Rancher Desktop の起動

インストールした Rancher Desktop を起動してみます. アプリケーション自体は非常にシンプルでした.

General

/2022/01/setup-rancher-desktop-on-mxlinux/rancher-desktop-general.webp

Kubernetes Setting

次に、Kubernetes の設定を見てみます.

/2022/01/setup-rancher-desktop-on-mxlinux/rancher-desktop-k8s-setting.webp

Kubernetes versionでは、Kubernetes のバージョンを指定できます. 執筆時点での最新バージョンである v1.23.3 から、最も古いバージョンで v1.16.7 まで選択が可能です.

Portはデフォルトでは、6443が設定されています.

Container runtimeでは、containerdまたはdockerd (moby)のどちらかを選択可能です.

Memory (GB), CPUsは、メモリー、CPU のコア数を指定できます. 赤いラインまで数値を上げると、下図のように警告文が表示されます.

/2022/01/setup-rancher-desktop-on-mxlinux/rancher-desktop-k8s-setting-danger.webp

一度、環境をクリーンアップしたい場合は、Reset Kubernetesを押すことで簡単にリセットすることができます.

Supporting Utilities

Supporting Utilitiesでは、インストールされたツール郡が表示されています. 既にインストールされていた Docker などに対しては、丁寧に注意喚起が書かれていました.

/2022/01/setup-rancher-desktop-on-mxlinux/rancher-desktop-supporting-utilities.webp

Images

Images では、Rancher Desktop で使用しているイメージが表示されています. イメージ一覧のからScanを選択すると、イメージの脆弱性を Trivy を使用してスキャンしてくれる.

/2022/01/setup-rancher-desktop-on-mxlinux/rancher-desktop-images.webp

ここで、Image Namespaceに注目してください. containerdでは、Kubernetes と同様にnamespaceという概念が存在しています. そのため、Kubenetes が namespaceを持つことができるように、containerdも同じようにnamespaceを持つことができます. 上図では、namespace:k8s.ioにイメージが存在しているということになります.

実際にnerdctlコマンドを使用して、namespaceを確認してみます. nerdctl namespace listnamespaceの一覧を表示します.

1
2
3
4
$ ./.local/bin/nerdctl namespace list
NAME        CONTAINERS    IMAGES    VOLUMES
buildkit    0             0         0
k8s.io      22            16        0

実行してみると、k8s.ioにイメージが存在していることが確認できました.

また、nerdctl --namespace k8s.io psnamespace:k8s.ioで、Rancher Desktop で作成した Kubernetes のコンテナ群が確認できます.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ ./.local/bin/nerdctl --namespace k8s.io ps
CONTAINER ID    IMAGE                                               COMMAND                   CREATED           STATUS    PORTS    NAMES
1f642d94e7d5    docker.io/rancher/klipper-lb:v0.3.4                 "entry"                   50 minutes ago    Up                 k8s://kube-system/svclb-traefik-svnfr/lb-port-443
2ca56d5f0874    docker.io/rancher/mirrored-library-traefik:2.5.6    "/entrypoint.sh --gl…"    49 minutes ago    Up                 k8s://kube-system/traefik-6bb96f9bd8-cflf4/traefik
2f1c800451cf    docker.io/rancher/mirrored-coredns-coredns:1.8.6    "/coredns -conf /etc…"    49 minutes ago    Up                 k8s://kube-system/coredns-5789895cd-wgxlq/coredns
56bd8fba2fda    docker.io/rancher/klipper-lb:v0.3.4                 "entry"                   50 minutes ago    Up                 k8s://kube-system/svclb-traefik-svnfr/lb-port-80
5908afd18045    docker.io/rancher/mirrored-pause:3.6                "/pause"                  49 minutes ago    Up                 k8s://kube-system/coredns-5789895cd-wgxlq
8c16131e6d1b    docker.io/rancher/mirrored-pause:3.6                "/pause"                  50 minutes ago    Up                 k8s://kube-system/svclb-traefik-svnfr
95b859fec9ed    docker.io/rancher/mirrored-pause:3.6                "/pause"                  49 minutes ago    Up                 k8s://kube-system/local-path-provisioner-6c79684f77-plbxh
a0656b86ab35    docker.io/rancher/local-path-provisioner:v0.0.21    "local-path-provisio…"    49 minutes ago    Up                 k8s://kube-system/local-path-provisioner-6c79684f77-plbxh/local-path-provisioner
a5c31106d6d7    docker.io/rancher/mirrored-pause:3.6                "/pause"                  49 minutes ago    Up                 k8s://kube-system/traefik-6bb96f9bd8-cflf4
c9417746b27d    docker.io/rancher/mirrored-pause:3.6                "/pause"                  49 minutes ago    Up                 k8s://kube-system/metrics-server-7cd5fcb6b7-4cbkd
ce64e7b0a242    docker.io/rancher/mirrored-metrics-server:v0.5.2    "/metrics-server --c…"    49 minutes ago    Up                 k8s://kube-system/metrics-server-7cd5fcb6b7-4cbkd/metrics-server

Troubleshooting

Troubleshootingでは、ログの有効化、また Rancher Desktop 自体の初期化ができます.

/2022/01/setup-rancher-desktop-on-mxlinux/rancher-desktop-troubleshooting.webp

検証

Rancher Desktop 上で、実際にコンテナなどを動かして見ます.

nerdctl の使用

nerdctlコマンドを使用して、nginx を起動してみます. namespace は未指定の場合、デフォルトでdefaultに配置されます.

nginx を起動

1
2
3
4
5
6
$ ./.local/bin/nerdctl run -d -p 9999:80 nginx
docker.io/library/nginx:latest:                                                   resolved       |++++++++++++++++++++++++++++++++++++++|
index-sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767:    done           |++++++++++++++++++++++++++++++++++++++|
...
elapsed: 7.2 s                                                                    total:  54.1 M (7.5 MiB/s)
484e86556e00843200c97b5aa779ba81a9016796e23964e5a0cac27159de444e

コンテナの状態を確認

1
2
3
$ ./.local/bin/nerdctl ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED          STATUS    PORTS                   NAMES
484e86556e00    docker.io/library/nginx:latest    "/docker-entrypoint.…"    6 minutes ago    Up        0.0.0.0:9999->80/tcp    nginx-484e8

namespace を確認

1
2
3
4
5
$ ./.local/bin/nerdctl namespace list
NAME      CONTAINERS IMAGES VOLUMES
buildkit  0          0      0
default   1          1      0
k8s.io    22         16     0

namespace default のプロセスを確認

1
2
3
$ ./.local/bin/nerdctl --namespace default ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
484e86556e00 docker.io/library/nginx:latest "/docker-entrypoint.…" 11 minutes ago Up 0.0.0.0:9999->80/tcp nginx-484e8

また、Rancher Desktop からもnamespace:defaultに nginx イメージを確認することができます.

/2022/01/setup-rancher-desktop-on-mxlinux/rancher-desktop-run-nginx.webp

最後に、localhost:9999にアクセスして、nginx の起動を確認してみます.

/2022/01/setup-rancher-desktop-on-mxlinux/run-nginx.webp

Helm の使用

Rancher Desktop では、起動時に Helm もインストールされるので、Helm を使って Kubernetes に Grafana をデプロイしてみます.

Helm に Grafana のリポジトリを追加

1
$ ./.local/bin/helm repo add grafana https://grafana.github.io/helm-charts

Helm にリポジトリが追加されていることを確認

1
2
3
$ ./.local/bin/helm repo list
NAME    URL
grafana https://grafana.github.io/helm-charts

追加した Grafana リポジトリからチャートを確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ ./.local/bin/helm search repo grafana
NAME                            CHART VERSION   APP VERSION DESCRIPTION
grafana/grafana                 6.21.1          8.3.4       The leading tool for querying and visualizing t...
grafana/grafana-agent-operator  0.1.5           0.22.0      A Helm chart for Grafana Agent Operator
grafana/enterprise-logs         2.0.0           v1.3.0      Grafana Enterprise Logs
grafana/enterprise-metrics      1.7.3           v1.6.1      Grafana Enterprise Metrics
grafana/fluent-bit              2.3.0           v2.1.0      Uses fluent-bit Loki go plugin for gathering lo...
grafana/loki                    2.9.1           v2.4.2      Loki: like Prometheus, but for logs.
grafana/loki-canary             0.5.1           2.4.1       Helm chart for Grafana Loki Canary
grafana/loki-distributed        0.42.0          2.4.2       Helm chart for Grafana Loki in microservices mode
grafana/loki-simple-scalable    0.2.0           2.4.2       Helm chart for Grafana Loki in simple, scalable...
grafana/loki-stack              2.5.1           v2.1.0      Loki: like Prometheus, but for logs.
grafana/promtail                3.10.0          2.4.2       Promtail is an agent which ships the contents o...
grafana/tempo                   0.13.0          1.3.0       Grafana Tempo Single Binary Mode
grafana/tempo-distributed       0.15.0          1.3.0       Grafana Tempo in MicroService mode
grafana/tempo-vulture           0.2.0           1.3.0       Grafana Tempo Vulture - A tool to monitor Tempo...

Helm チャートをリリース

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ ./.local/bin/kubectl create namespace monitoring
$ ./.local/bin/helm install grafana --namespace monitoring grafana/grafana
W0128 03:37:33.477723  218028 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0128 03:37:33.480386  218028 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0128 03:37:33.538004  218028 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0128 03:37:33.538201  218028 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
NAME: grafana
LAST DEPLOYED: Fri Jan 28 03:37:32 2022
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:

   grafana.monitoring.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:

     export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace monitoring port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin
#################################################################################
######   WARNING: Persistence is disabled!!! You will lose your data when   #####
######            the Grafana pod is terminated.                            #####
#################################################################################

上記の手順に従って、正常に Grafana にログインすることができました.

/2022/01/setup-rancher-desktop-on-mxlinux/grafana-dashboard.webp

最後に、kubectlコマンドを使って Grafana が立ち上がっていることを確認します.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ ./.local/bin/kubectl get all --namespace monitoring
NAME                           READY   STATUS    RESTARTS   AGE
pod/grafana-6b9d4f7f86-mwb4q   1/1     Running   0          15m

NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/grafana   ClusterIP   10.43.218.65   <none>        80/TCP    15m

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/grafana   1/1     1            1           15m

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/grafana-6b9d4f7f86   1         1         1       15m

以上のように、Rancher Desktop を起動するだけでアプリケーションの開発やデプロイが簡単に行うことができました.

所感

今回は、v1.0.0 がリリースされた Rancher Desktop を触ってみましたが、非常に完成度の高いツールでした. containerdnerdctlを初めて触る方も Rancher Desktop は良い機会だと思います.

昨年、Docker Desktop が有料化が大きなニュースとなり、それに伴い、密かに代替案として注目されていた Rancher Desktop ですが、 Docker Desktop から乗り換えたとしても遜色なく利用できるかと思います. 万が一、Docker のランタイムを使用したいと思えば、Rancher Desktop 上から切り替えれば良いので、大して手間は掛かりません.

また、Kubernetes のバージョンをスムーズに切り替えられるのも個人的には大きなメリットなのかなと思います.

これから、コンテナを利用する手段の 1 つとして、広く普及していく可能性は大いにあり得るので、今後の動向に注目していきたいと思います.