コンテナオーケストレーションシステムである「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でも動作するはずです。
まずはパッケージの情報を表示してみましょう。
3月10日時点で、1.11から1.13までのリリース版と、1.14のベータ版をサポートしています。3月頭にリリースされた1.13.4は、3月10日時点ではまだcandidateチャンネルです。いずれstableチャンネルに落ちてくるものと思います。今回は1.13系のstableチャンネルをインストールしましょう。microk8sは上記の情報にも掲載されているように、classicモードでインストールする必要があります。これはKubernetesが、ホストの主にネットワーク設定などを変更する必要があるためです。
インストールしたら、microk8s.statusコマンドで環境の準備が整うまで待ってください。「1分以内に作れる」との触れ込みではあるものの、ホストマシンのスペックやネットワーク環境によってはさらに時間がかかります。
microk8s.statusの結果からもわかるように、各種アドオンはインストール直後は無効化されています。
さて、snapでインストールしたコマンドは「microk8s.
」のプレフィックスが付きます。つまり「microk8s.kubectl」などのコマンド名になるのです。
もし普通のKubernetesと同じようにプレフィックス無しでkubectlコマンドを実行したいなら、次のようにエイリアスを設定してください。
次のようにkubectlコマンドを使えるようになります。
ちなみにsnapパッケージ版のmicrok8sはDockerも同梱しています。つまりmicrok8s.dockerでDockerコマンドを直接実行できるのです。
Deploymentをrunする
ためしにnginxコンテナイメージを、レプリカ数3でデプロイしてみましょう。
各種ステータスを表示すると、無事にNginxが3インスタンス立ち上がっていることがわかります。
dockerコマンドで見ても、結果は同じです。
Deploymentsの情報を表示すると、次のような結果になっています。
要するに普通のKubernetesと同じ使い方になっているというわけですね。
たとえばNodePortで80番ポートをexposeすると、microk8sをインストールしたアドレスに対してHTTPアクセスできるようになります。
「CLUSTER-IP」はホストローカルとしてアクセスできるIPアドレスです。「PORT」のコロンの後ろが外部に見えているポート番号です。つまり、次のようなアクセス方法が可能です。
- ホストマシンの内部から「http://10.152.183.239/」でアクセスする
- ホストマシンの外から「http://ホストマシンのIPアドレス:30890/」でアクセスする
上記のいずれかの方法を実施すれば、NginxのWelcomeページが表示されます。
ダッシュボードアドオンを有効化する
microk8s.enableコマンドを利用すれば、各種アドオンを有効化できます。ここでは「ダッシュボード」を有効化してみましょう。
ダッシュボードはDNSアドオンも必要なので両方共有効化します。
kube-system側にdashboardのIPアドレスが表示されるはずです。
上記だと「https://10.152.183.23:443」ですね。ただしClusterIPなので、このままだとローカルマシンからしかアクセスできないことに注意してください。
用済みになれば削除
アドオンはmicrok8s.disableコマンドで無効化できます。
アドオンを含む個別のDeploymentsやServicesを削除したいなら、「kubectl delete」コマンドを使うことになるでしょう。
さらに、勉強がてらいろいろ試した結果にっちもさっちもいかなくなったのなら、「microk8s.reset」コマンドで環境をまっさらにできます。
インストール直後とほぼ同じ状態になると思えば良いでしょう。
ただし取得したDockerイメージはすぐには消されませんので注意してください。
Kubernetes環境自体が不要になったら、snapパッケージを削除してしまいましょう。
Kubernetesのインストール解説は
Software Design 2019年4月号に
繰り返しになりますが、microk8sはあくまで学習用という位置づけです。
来週18日に発売されるSoftware Design 2019年4月号のUbuntu Monthly Reportでは、水野さんが「よりまっとうな」Kubernetesのインストール方法を解説してくれています。
microk8sで基本的な使い方を学習したら、Ubuntu Montly Reportの記事を参考に、マルチノードなクラスターを作ってみてはいかがでしょうか。