Ubuntu Linuxにリモートログインした時に、こんな表示が出るようになっていたのが前々から気になっていまして。
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-47-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * Ubuntu's Kubernetes 1.14 distributions can bypass Docker and use containerd directly, see https://bit.ly/ubuntu-containerd or try it now with snap install microk8s --classic
どうも、Kubernetesっぽいですけど、なんでしょう?
MicroK8s
これは、MicroK8sというものらしいです。
MicroK8s - Fast, Light, Upstream Developer Kubernetes
ドキュメントは、こちら。
Canonicalによって提供される、シングルノードで動くKubernetesのようです。
第560回 microk8sでお手軽Kubernetes環境構築:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
同じような目的のものとしてMinikubeがあると思いますが、Minikubeとの違いは「snap」コマンド一発でインストール
できることみたいですね。
各種LinuxにおけるSnapのセットアップ方法と利用方法 | マイナビニュース
また、昨今話題に上がったk3sとの違いは、いろいろ削ったk3sとは異なり、あくまでシングルノードでKubernetesを動かすことに
フォーカスしているようです。
k3s と MicroK8s の違いを考える - Qiita
とりあえず、簡単に試してみましょう。
インスールして動かしてみる
今回の環境は、Ubuntu Linux 18.04 LTSです。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.2 LTS Release: 18.04 Codename: bionic
Vagrant上で動かしています。
インストールは、以下のコマンドで。
$ sudo snap install microk8s --classic
バージョンを指定してインストールすることもできるようです。
$ sudo snap install microk8s --classic --channel=1.12/stable
今回は、バージョンを指定せずにインストールしています。
インスールには、数分かかりました。
「microk8s.〜」コマンドを使うようなので、シェル補完で見てみると次のようなコマンドがあるようです。
$ microk8s. microk8s.config microk8s.disable microk8s.inspect microk8s.kubectl microk8s.start microk8s.stop microk8s.ctr microk8s.enable microk8s.istioctl microk8s.reset microk8s.status
ステータスを見てみます。
$ microk8s.status microk8s is running addons: jaeger: disabled fluentd: disabled gpu: disabled storage: disabled registry: disabled ingress: disabled dns: disabled metrics-server: disabled prometheus: disabled istio: disabled dashboard: disabled
アドオンが使えるようですが、現時点ではすべて無効です。
kubectlでバージョンを確認してみます。
$ microk8s.kubectl version Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:53:57Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:45:25Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
現時点では、Kubernetes v1.14.0がインストールされたようです。
稼働中のノードを取得。
$ microk8s.kubectl get nodes NAME STATUS ROLES AGE VERSION ubuntu-bionic Ready <none> 6m24s v1.14.0
では、イメージをデプロイしてみます。
nginxのイメージを、Deploymentとしてデプロイ。
$ microk8s.kubectl create deployment nginx --image nginx:latest deployment.apps/nginx created
確認。
$ microk8s.kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-9d4cf4f77-c7zpb 1/1 Running 0 46s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 21m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 1/1 1 1 47s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-9d4cf4f77 1 1 1 47s
接続確認のため、Serviceを作成します。
$ microk8s.kubectl expose deployment nginx --port 80 service/nginx exposed
確認。
$ curl 10.152.183.104 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
参照できましたね。
では、ラベルを確認して
$ microk8s.kubectl get all --show-labels NAME READY STATUS RESTARTS AGE LABELS pod/nginx-9d4cf4f77-c7zpb 1/1 Running 0 4m47s app=nginx,pod-template-hash=9d4cf4f77 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 25m component=apiserver,provider=kubernetes service/nginx ClusterIP 10.152.183.104 <none> 80/TCP 61s app=nginx NAME READY UP-TO-DATE AVAILABLE AGE LABELS deployment.apps/nginx 1/1 1 1 4m48s app=nginx NAME DESIRED CURRENT READY AGE LABELS replicaset.apps/nginx-9d4cf4f77 1 1 1 4m48s app=nginx,pod-template-hash=9d4cf4f77
削除。
$ microk8s.kubectl delete all -l app=nginx pod "nginx-9d4cf4f77-c7zpb" deleted service "nginx" deleted deployment.apps "nginx" deleted replicaset.apps "nginx-9d4cf4f77" deleted
ところで、kubectlコマンドを使うのに「microk8s.kubectl」と入力するのが面倒な場合は、「aliasを作れ」だそうです。
$ sudo snap alias microk8s.kubectl kubectl
起動と停止
MicroK8sの起動と停止を行ってみます。
まずは、今動いているMicroK8sを停止させます。
$ microk8s.stop Stopped.
確認。
$ microk8s.status microk8s is not running. Use microk8s.inspect for a deeper inspection.
起動。
$ microk8s.start Started.
アドオンを有効にする
MicroK8sには、いくつかアドオンがあるようです。
デフォルトではすべて無効なのですが、dnsは有効にすることが推奨されているようなので、ちょっと有効にしてみましょう。
$ microk8s.enable dns Enabling DNS Applying manifest service/kube-dns created serviceaccount/kube-dns created configmap/kube-dns created deployment.extensions/kube-dns created Restarting kubelet DNS is enabled
確認。
$ microk8s.status microk8s is running addons: jaeger: disabled fluentd: disabled gpu: disabled storage: disabled registry: disabled ingress: disabled dns: enabled metrics-server: disabled prometheus: disabled istio: disabled dashboard: disabled
dnsが「enabled」になりました。
アンインストール
最後に、MicroK8sをアンインストールします。
最初に、「microk8s reset」でリソース、イベントのクリーンアップを行います。
$ microk8s.reset
あとは、snapで削除。
$ sudo snap remove microk8s microk8s removed
こんなところでしょうか。
とりあえず、シングルノードで動いて、簡単にインストールできるKubernetesとしては便利そうです。