UbuntuでKubernetesのテスト環境としてMicrok8sをセットアップした
はじめに
Ubuntu 18.04デスクトップ環境で、4/29に昔入れていたminikubeをアンインストールしてしまった(*1)のだが、また手元でさくっと試せるKubernetes環境が欲しくなった。
またMinikubeを入れてもいいのだけど、CanonicalがMicrok8sというのを出しており、これが使えそうだ。
公式ドキュメントや試してみた系の記事を軽く見てみたところ、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などの仮想マシンでもいいだろう。