progrhyme's tech blog

主にIT関連の技術メモ

UbuntuでKubernetesのテスト環境としてMicrok8sをセットアップした

はじめに

Ubuntu 18.04デスクトップ環境で、4/29に昔入れていたminikubeをアンインストールしてしまった(*1)のだが、また手元でさくっと試せるKubernetes環境が欲しくなった。

またMinikubeを入れてもいいのだけど、CanonicalMicrok8sというのを出しており、これが使えそうだ。
公式ドキュメントや試してみた系の記事を軽く見てみたところ、snapパッケージで簡単にインストール可能できそうだったので、こちらを入れてみることにした。

セットアップ手順

Quick start | MicroK8s に従ってセットアップしていく。

Install

snapでインストールする。

ガイドでは --channel=1.18/stable が示されていたが、他にどんなチャネルがあるのか気になったので、Selecting a snap channel | MicroK8sを見つつ次のコマンドで確認した:

% snap info microk8s
name:      microk8s
summary:   Kubernetes for workstations and appliances
publisher: Canonical*
:
channels:
  latest/stable:    v1.18.2         2020-04-27 (1378) 201MB classic
  latest/candidate: v1.18.2         2020-04-30 (1383) 201MB classic
  latest/beta:      v1.18.2         2020-04-30 (1383) 201MB classic
  latest/edge:      v1.18.2         2020-05-07 (1399) 211MB classic
  dqlite/stable:    --
  dqlite/candidate: --
  dqlite/beta:      --
  dqlite/edge:      v1.16.2         2019-11-07 (1038) 189MB classic
  1.19/stable:      --
  1.19/candidate:   --
  1.19/beta:        --
  1.19/edge:        v1.19.0-alpha.1 2020-03-26 (1311) 201MB classic
  1.18/stable:      v1.18.2         2020-04-27 (1379) 201MB classic
  1.18/candidate:   v1.18.2         2020-04-27 (1379) 201MB classic
  1.18/beta:        v1.18.2         2020-04-27 (1379) 201MB classic
  1.18/edge:        v1.18.2         2020-04-29 (1387) 201MB classic
  :

今は「latest/stable = 1.18/stable」らしい。
Kubernetesのバージョンに対応していると考えていいだろう。

今後もstableのバージョンが上がったらsnapが勝手にアップデートしてくれることが期待できるので、 latest/stable チャネルを使うことにする。

$ sudo snap install microk8s --classic --channel=latest/stable
:
microk8s v1.18.2 from Canonical✓ installed

Join the group

ログインユーザをmicrok8sグループに所属させる。

% grep microk8s /etc/group
microk8s:x:997:
% sudo usermod -a -G microk8s $USER
% sudo chown -f -R $USER ~/.kube

You will also need to re-enter the session for the group update to take place

とのことなので、次を実行:

su - $USER

これをやると $PATH/snap/bin が含まれなくなって microk8s コマンドが見つからなくなってしまったので、下を実行して解決:

% PATH=$PATH:/snap/bin

次回ログイン以降は、 su - $USER もPATHの調整も不要だった。

Check the status

% microk8s status --wait-ready
microk8s is running
addons:
cilium: disabled
dashboard: disabled
dns: disabled
fluentd: disabled
gpu: disabled
helm: disabled
helm3: disabled
host-access: disabled
ingress: disabled
istio: disabled
jaeger: disabled
knative: disabled
kubeflow: disabled
linkerd: disabled
metallb: disabled
metrics-server: disabled
prometheus: disabled
rbac: disabled
registry: disabled
storage: disabled

最初は必要最小限のインストールになっているそうだ。
アドオンは後の手順で追加できる。

Access Kubernetes

microk8s kubectl でkubectlと同じ操作ができる。

% microk8s kubectl get nodes
NAME            STATUS   ROLES    AGE   VERSION
ubuntu          Ready    <none>   13m   v1.18.2-41+b5cdb79a4060a3
% microk8s kubectl get services
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   14m

kubectlをインストールしてないなら、下のようにaliasしておくと楽だよとのこと:

alias kubectl='microk8s kubectl'

私の環境にはkubectlをsnapでインストールしているので、これは保留で。

Deploy an app

適当なイメージでDeploymentを作成し、Podの起動を確認する。

% microk8s kubectl create deployment kubernetes-bootcamp \
  --image=gcr.io/google-samples/kubernetes-bootcamp:v1
deployment.apps/kubernetes-bootcamp created

% microk8s kubectl get pods
NAME                                   READY   STATUS              RESTARTS   AGE
kubernetes-bootcamp-6f6656d949-ggmrx   0/1     ContainerCreating   0          8s

Use add-ons

下のようにして追加できる。今回はスキップした。

microk8s enable dns storage

Starting and Stopping MicroK8s

microk8sをstop/startしてみる。

% microk8s stop
[sudo] パスワード:
Stopped.

% microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.

% microk8s start
Started.
Enabling pod scheduling
node/ubuntu already uncordoned

さっき作ったPodも復活していた。

% microk8s kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-6f6656d949-ggmrx   1/1     Running   0          4m1s

所感

Ubuntuだとsnapで簡単に使えて良い。
実験用の環境としては全く問題なさそう。

マシンが複数あれば、マルチノードな環境も割と楽に作れそう。下に手引がある:

これはVirtualboxなどの仮想マシンでもいいだろう。

参考記事