サーバー、データベース、インフラに関するトピックス
■第9話:MicroK8sを使おう
(最終更新日:2023.07.4)
(絵が小さい場合はスマホを横に)
前回「なぜ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のインストール(上)とその確認(下)
次にkubectlの登録と自身のmicrok8sグループへの登録を行う。 「sudo snap alias microk8s.kubectl kubectl」と入力すると、microk8s.kubectlコマンドをkubectlとして命令することができる。 その後も使い続ける命令なので、最初に短い命令に変えておこう。 そして「sudo usermod -a -G microk8s $USER」と入力することで、現在ログインしているユーザーをmicrok8sグループに加えることができる。 これで現在のユーザーがkubectlでMicroK8sに命令できるようになった。 注意点として、ユーザーグループの変更を反映するには、再ログインする必要がある。ログインしなおして設定を反映させよう。
コマンドエイリアスの作成(上)とユーザグループの追加(下)
MicroK8sの操作
まずは、kubectlコマンドが使えるかを確認してみよう。 下記のように「kubectl cluster-info」と入力して、クラスター情報が取得できれば、 先ほど行ったkubectlコマンドの登録とユーザーのグループ登録は上手くいっている。これで、MicroK8sに対して自由に命令できる。
クラスター情報の取得(kubectlコマンドが使えるかの確認)
次に、Kubernetesの最小実行単位であるPodの情報を取得してみよう。「kubectl get pods」と入力すると情報を取得できる。 以下ではPodを3つ作成した後で、「kubectl get pods」を命令しているので、下記のように表示されているが、 インストールしたばかりだと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を外部接続可能にする
ipアドレスはifconfigコマンドで確認し、ポート番号は「kubectl get service」とコマンドを打って確認しよう。 得られた各番号を「ipアドレス:ポート番号(NodePort)」として下記のようにURLに入力して、別のPCから接続してみよう。 Apacheの初期画面が表示されるはずだ。
Apacheの初期画面が表示される
加えて、Podの冗長性を持たせるためにスケーリングを行おう。Pod数が現在は1なので3まで増やす。 下記のように「kubectl scale deployment my-apache ...」と入力すれば、3つに増やせる。 「deployment .apps/my-apache scaled」と出れば成功だ。 さらに「kubectl get pods」と入力すれば、3つ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あれこれ