Web制作、Web開発の歩き方

サーバー、データベース、インフラに関するトピックス

■第9話:MicroK8sを使おう

(最終更新日:2023.07.4)

Cookieのイメージ
この記事は8分で読めます!
(絵が小さい場合はスマホを横に)

前回「なぜMicroK8sを使うのか」という意義と有用性について説明した。 今回は、そんな有用なMicroK8sのインストール方法と、設定方法と具体的な使い方について説明したいと思う。


MicroK8sのインストール方法

MicroK8sは、Ubuntuをはじめとする各種Linuxディストリビューションで利用できる。 今回はUbuntu Desktopを使用した場合を紹介する。

インストールを行う前に「apt-get update」で各種アップデートを行っておこう。 アップデート後にインストールを行うのだが、Ubuntuのバージョンによってはsnapdパッケージがインストールされていないことがある。 その場合は「sudo apt-get -y install snapd」でsnapdのインストールを行おう。 snapdのインストールが無事完了したら「sudo snap install microk8s --classic」と入力して、microK8sのインストールを行う。 インストールが成功して「sudo microk8s status --wait-ready」と入力すると、microk8s is runningと出るはずだ。 これでmicroK8sが起動していることを確認できる。

MicroK8sのインストールと設定

MicroK8sのインストール(上)とその確認(下)

次にkubectlの登録と自身のmicrok8sグループへの登録を行う。 「sudo snap alias microk8s.kubectl kubectl」と入力すると、microk8s.kubectlコマンドをkubectlとして命令することができる。 その後も使い続ける命令なので、最初に短い命令に変えておこう。 そして「sudo usermod -a -G microk8s $USER」と入力することで、現在ログインしているユーザーをmicrok8sグループに加えることができる。 これで現在のユーザーがkubectlでMicroK8sに命令できるようになった。 注意点として、ユーザーグループの変更を反映するには、再ログインする必要がある。ログインしなおして設定を反映させよう。

MicroK8sのインストールと設定

コマンドエイリアスの作成(上)とユーザグループの追加(下)

MicroK8sの操作

まずは、kubectlコマンドが使えるかを確認してみよう。 下記のように「kubectl cluster-info」と入力して、クラスター情報が取得できれば、 先ほど行ったkubectlコマンドの登録とユーザーのグループ登録は上手くいっている。これで、MicroK8sに対して自由に命令できる。

kubectlコマンドが使えるかの確認

クラスター情報の取得(kubectlコマンドが使えるかの確認)

次に、Kubernetesの最小実行単位であるPodの情報を取得してみよう。「kubectl get pods」と入力すると情報を取得できる。 以下ではPodを3つ作成した後で、「kubectl get pods」を命令しているので、下記のように表示されているが、 インストールしたばかりだとPodを作成していないので、何もでないということだけ気をつけよう。

podの確認

3個my-apacheのPodを起動している場合の状態表示

ちなみに、ここで「kubectl get pods --namespace=kube-system」とオプションを付けて命令すると、 KubernetesのシステムコンポーネントがPodとして取得できる。ここで覚えておきたいのはPodのクラスターを作成する時はNamespaceを使用しようということだ。 クラスター内のリソースを分離し、名前競合を防ぐことができる。ぜひNamespaceを付けて作成しよう。

それではいよいよ、Pod(コンテナイメージ)のデプロイを行う。最も簡単にデプロイできるのは、 Docker Hubから直接コンテナイメージをダウンロードし、インストールする方法である。 今回は「apache」をインストールしてみよう。「kubectl create deployment my-apache(任意の名前) --image=httpd」と入力することで、 apacheのPodを直接デプロイすることができる。「deployment.apps/my-apache(任意の名前) created」と出れば、成功だ。 実際「kubectl get deployment」と入力すると、先ほどのmy-apacheが生成されていることが分かる。

Docker Hubからapacheをデプロイ(上)、デプロイの確認(下)

そして次に外部から接続できるように設定しよう。 Podを外部通信できるようにするには「kubectl expose deployment my-apache ...」と入力する必要がある。 下記のように入力して「service/my-apache exposed」と出れば成功だ。

Podを外部接続可能にするコマンド

Podを外部接続可能にする

ipアドレスはifconfigコマンドで確認し、ポート番号は「kubectl get service」とコマンドを打って確認しよう。 得られた各番号を「ipアドレス:ポート番号(NodePort)」として下記のようにURLに入力して、別のPCから接続してみよう。 Apacheの初期画面が表示されるはずだ。

Apacheの初期画面が表示される

Apacheの初期画面が表示される

加えて、Podの冗長性を持たせるためにスケーリングを行おう。Pod数が現在は1なので3まで増やす。 下記のように「kubectl scale deployment my-apache ...」と入力すれば、3つに増やせる。 「deployment .apps/my-apache scaled」と出れば成功だ。 さらに「kubectl get pods」と入力すれば、3つPodが生成されていることが確認できる。

Podを複数個増やす

Podを複数個増やす

ただ、今の状態では単にPodを増やしただけで負荷分散はできていない。サービスタイプをNodePortからLoadBalancerに切り変えよう。 一旦、外部接続したserviceを削除し(service my-apache deletedと出れば成功)、サービスタイプをLoadBalancerにして外部接続する。 下記のように「kubectl expose ....」と以下のようなコマンドを打つ。service/my-apache exposedと出れば成功だ。 「kubectl get service」と打てば、今度はTYPEがLoadBalancerで起動しているのが分かる。これで負荷分散ができている。

ロードバランサ―に切り替え

サービスを削除し(上)、サービスタイプをロードバランサ―に切り替えて接続(下)

MicroK8sのGUIツール

最後にMicroK8sで使えるGUIツール、Dashboardを入れてみよう。 Dashboardを使えば、先ほどのPodの作成などの操作を、項目を入力するだけで簡単にできるようになる。 加えて、CPUやメモリの使用状況などを監視することもできる。

まずは、dashboardをインストールしよう。インストールはgithub上のyamlファイルを指定してdeployすることで簡単に行える。 「kubectl apply -f https://.....」と入力すると「namespace/kubenertes-dashboard created」と出る。 その後に10数個createされた結果が表示されれば、インストール成功だ。

ダッシュボードのインストール

ダッシュボードのインストール

次に「kubectl proxy」と入力してdashboardを起動しよう。「Starting on serve on ....」と出れば成功である。 Ubuntu Desktopのブラウザから「http://localhost:8001/api/v1/
namespaces/kubernetes-dashboard/services/
https:kubernetes-dashboard:/proxy/」 にアクセスすると、下記のようにdashboardを表示できる。 ただし、このままだとdashboardにログインできない。ユーザーを作成し、トークンを発行してログインできるようにしよう。

ダッシュボードのインストール

ダッシュボードへのアクセス

まずはログインユーザーを作成する。下記のようなuser.yamlファイルを作成し「kubectl apply -f user.yaml」と入力しよう。 これで、ログイン用のユーザーが作成された。

ダッシュボードのインストール

ユーザー作成コマンド(上)と user.yamlファイルの中身(下)

次にユーザー権限を設定したclusterrole.yamlファイルを適用する。 ここでは「test-user」に対して「cluster-admin」という最高レベルの権限を付与して、Kubernetesクラスター全体を操作できるようにする。

ユーザー権限の付与

ユーザー権限の付与(上)と clusterrole.yamlファイルの中身(下)

最後にログイン用認証トークンを発行する。「kubectl -n kubernetes-dashboard create token test-user」と入力すると、 ログイン用認証トークンが発行されるので、その文字列をコピーして、先ほどのブラウザで表示されたトークンを入力部分に入れよう。 これでサインインができる。サインインをすると、以下のような画面が現れ、GUI上でのPodの作成や、CPU、メモリの使用状況などを確認することができる。

ダッシュボードの表示

ログイン後のダッシュボード、Podの作成画面

まとめ

今回、MicroK8sをUbuntuにインストールして使えるようにした。 コマンドだけでも充分簡単に使えるが、GUI(ダッシュボード)を使うと更に管理が楽になる。 難しい設定は少なく、オンプレミス環境や小さなネットワーク環境の構築に向いているので、 自分でサーバー設定ができるかたは、ぜひMicroK8sを用いてDockerのデプロイ環境を作ってみよう。 Raspberry Piのようなシングルボードコンピュータでも気軽に動かせる。

▼参考図書、サイト

 「WEB+DB PRESS Vol.135」 実践Kubernetes 技術評論社
   MicroK8s  CANONICAL
   Debian 11(Bullseye)にMicroK8sをインストールする  serverあれこれ