Ubuntu Weekly Recipe

第560回 microk8sでお手軽Kubernetes環境構築

この記事を読むのに必要な時間:およそ 7 分

コンテナオーケストレーションシステムである「Kubernetes」は,プロダクション用途としてコンテナを使う上で重要な地位を得るに至りました。そこで今回は,そのKubernetesをローカルマシンでかんたんにお試しできるmicrok8sを紹介します。

シングルノードにのみ対応したKubernetes環境

Kubernetesと言えば,Dockerの運用に疲れた人をさらに地獄の谷に突き落とすツールとして,現在もっとも人気のあるソフトウェアのひとつです。単なるDockerを便利に使えるようにするもの,なんて安易な考えで手を出すと,まずはPod/ReplicaSet/Deployment/Serviceなどの一般的な意味はわかるものの,Kubernetes上の概念がよくわからない単語が襲ってきて,最終的にサーバーより先に脳が死にます。本気で運用する気があるなら,まずはGoogleで働けるぐらいの優秀な人材を用意してもらいましょう。もちろん,きちんと理解して使えばとても便利なツールです。

microk8sはそんなコンテナ被害者をよりカジュアルに増やすためのソフトウェアです。Ubuntu Weekly Topicsの2018年12月14日号でも「1分以内に作れるKubernetes環境」として紹介されているように,microk8sを使うとKubernetes学習用のシングルノードの環境をすぐに構築できます。現時点ではシングルノードしか対応していないように,あくまで学習用・プロトタイピング用と割り切ったほうが良いでしょう。

同じくローカルにKubernetes環境を構築できるMinikubeとの違いのひとつが「snapパッケージ」として提供されている点です。KubernetesはもとよりそのベースとなるDockerツールも含めて,ワンステップでインストールできます。パッケージ化されているため,アップグレードはもちろんのこと,削除も簡単です。さらにsnapということでシステム上の他のコンポーネントからはできるだけ分離した状態で利用できます。

snapパッケージとしては,arm64/ppc64elバイナリも提供されているので,64bitに対応したRaspberry Piにインストールすることも可能です。もちろんストレージ性能やメモリの大きさといったスペックに絡む問題からRaspberry Piでの利用は実用的とは言い難いですが,チュートリアルを試してみる程度なら十分でしょう。

microk8sのインストール

microk8sのインストール自体はとても簡単です。今回はUbuntu 18.04 LTSのサーバー版をベースに説明しますが,snapパッケージなのでデスクトップ版はもちろんのことUbuntu 16.04 LTSでも動作するはずです。

まずはパッケージの情報を表示してみましょう。

$ snap info microk8s
name:      microk8s
summary:   Kubernetes for workstations and appliances
publisher: Canonical✓
contact:   https://github.com/ubuntu/microk8s
license:   Apache-2.0
description: |
  MicroK8s is a small, fast, secure, single node Kubernetes that installs on
  just about any Linux box. Use it for offline development, prototyping,
  testing, or use it on a VM as a small, cheap, reliable k8s for CI/CD. It's
  also a great k8s for appliances - develop your IoT apps for k8s and deploy
  them to MicroK8s on your boxes.
snap-id: EaXqgt1lyCaxKaQCU349mlodBkDCXRcg
channels:
  stable:         v1.13.3        2019-02-25 (412) 229MB classic
  candidate:      v1.13.4        2019-03-01 (437) 229MB classic
  beta:           v1.13.4        2019-03-01 (437) 229MB classic
  edge:           v1.13.4        2019-03-06 (455) 229MB classic
  1.14/stable:    –
  1.14/candidate: –
  1.14/beta:      v1.14.0-beta.1 2019-03-01 (442) 207MB classic
  1.14/edge:      v1.14.0-beta.1 2019-03-01 (442) 207MB classic
  1.13/stable:    v1.13.3        2019-02-28 (413) 229MB classic
  1.13/candidate: v1.13.4        2019-03-02 (438) 229MB classic
  1.13/beta:      v1.13.4        2019-03-02 (438) 229MB classic
  1.13/edge:      v1.13.4        2019-03-06 (456) 229MB classic
  1.12/stable:    v1.12.5        2019-02-03 (387) 251MB classic
  1.12/candidate: v1.12.6        2019-02-27 (435) 251MB classic
  1.12/beta:      v1.12.6        2019-02-27 (435) 251MB classic
  1.12/edge:      v1.12.6        2019-02-26 (435) 251MB classic
  1.11/stable:    v1.11.7        2019-02-02 (389) 245MB classic

3月10日時点で,1.11から1.13までのリリース版と,1.14のベータ版をサポートしています。3月頭にリリースされた1.13.4は,3月10日時点ではまだcandidateチャンネルです。いずれstableチャンネルに落ちてくるものと思います。今回は1.13系のstableチャンネルをインストールしましょう。microk8sは上記の情報にも掲載されているように,classicモードでインストールする必要があります。これはKubernetesが,ホストの主にネットワーク設定などを変更する必要があるためです。

$ sudo snap install microk8s --channel 1.13/stable --classic
$ microk8s.status --wait-ready
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

インストールしたら,microk8s.statusコマンドで環境の準備が整うまで待ってください。⁠1分以内に作れる」との触れ込みではあるものの,ホストマシンのスペックやネットワーク環境によってはさらに時間がかかります。

microk8s.statusの結果からもわかるように,各種アドオンはインストール直後は無効化されています。

さて,snapでインストールしたコマンドはmicrok8s.のプレフィックスが付きます。つまり「microk8s.kubectl」などのコマンド名になるのです。

$ microk8s.kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
ubuntu   Ready    <none>   6m54s   v1.13.3
$ microk8s.kubectl get services
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   7m1s

もし普通のKubernetesと同じようにプレフィックス無しでkubectlコマンドを実行したいなら,次のようにエイリアスを設定してください。

$ sudo snap alias microk8s.kubectl kubectl

次のようにkubectlコマンドを使えるようになります。

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    server: http://127.0.0.1:8080
  name: microk8s-cluster
contexts:
- context:
    cluster: microk8s-cluster
    user: admin
  name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
  user:
    username: admin

ちなみにsnapパッケージ版のmicrok8sはDockerも同梱しています。つまりmicrok8s.dockerでDockerコマンドを直接実行できるのです。

$ microk8s.docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.06.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
(以下略)

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入