コンテナ管理基盤であるKubernetesは、kubectlコマンドを用いてCLIから操作したり、Kubernetes DashboardなどのWeb UIを使って操作し、管理することが一般的です。それに対して今回紹介する「Lens 」は、そんな複数のKubernetesクラスターを管理できるスタンドアローンのアプリケーションとなっています。そこで今回はMicroK8sでさくっと構築したKubernetesクラスターを、ローカルマシンにインストールしたLensで管理してみましょう。
MicroK8sでKubernetesクラスターを構築する
Lensを使うためにはまずKubernetesクラスターが必要です。もちろん既存のKubernetes環境でもかまわないのですが、まずは動作確認も兼ねてMicroK8s でシンプルな環境を構築してみても良いでしょう。もし既に存在するKubernetesを使いたい場合は、「Lensの初期設定」の項 まで読み飛ばしてください。
MicroK8sはコマンドひとつでKubernetes環境を構築できる便利なソフトウェアです。Add-on機能によって、DashboardやCoreDNS、Multusといった利用頻度の高い機能だけでなく、KubeflowやCUDAを利用したコンテナなどの複雑な機能もコマンドひとつでセットアップできます。また、複数台のマシンにインストールすれば、Kubernetesクラスター化することも可能です。
動作環境としてUbuntuはもちろん、2020年6月にはWindowsやmacOSもサポート対象に追加されました(Ubuntu Weekly Topics 2020年6月5日号 ) 。非Linux環境の場合、Hyper-VやHyperKitを用いてLinux環境を構築した上で、そこにKubernetesをインストールします。これでそれなりのスペックを持ったマシンであれば、OSを問わずKubernetesをインストールできるようになったわけです。
そんなMicroK8sについては本連載でも何度か紹介しています。
今回は第641回のように、LXD上で構築した仮想マシン上にMicroK8sをインストールし、ホスト上からLensを利用して管理を試みます。もちろんホストに直接MicroK8sをインストールしても良いですし、MicroK8sを使わずに既に存在する別のKubernetes環境を利用してもかまいません。
LXDそのものの環境は構築済みであるとします[1] 。また名前空間にまつわる権限等を考慮しなくて済むように、コンテナではなく仮想マシン版のインスタンスを作成します[2] 。
$ lxc launch ubuntu:20.04 microk8s --vm -c limits.cpu=2 -c limits.memory=4GiB
$ lxc config device override microk8s root size=40GiB
$ lxc exec microk8s -- sed -i 's/archive.ubuntu/jp.archive.ubuntu/' /etc/apt/sources.list
$ lxc exec microk8s -- timedatectl set-timezone Asia/Tokyo
$ lxc exec microk8s -- sh -c 'apt update && apt full-upgrade -y'
$ lxc restart microk8s
上記でLXD側の準備は整いましたので、MicroK8sをインストールします。
$ lxc exec microk8s -- snap install microk8s --classic --channel=1.21
$ lxc exec microk8s -- microk8s status --wait-ready
これだけでKubernetes環境を構築できました。とても簡単ですね。今回はシングルノードで構築していますが、第641回 では複数台のインスタンスでクラスターも構築しています。興味のある読者はそちらも参照してください。
LXDを用いずにホストに直接MicroK8sをインストールした場合は、「 lxc exec microk8s --
」の部分を省いて実行してください。
Lensの初期設定
次にLens をインストールしましょう。Lensそのものは、Dockerベースのクラスター構築ツールなどを開発していたKontena社製のソフトウェアで、現在はKontena社を買収したMirantisが開発・商用サポートを行っています。Kubernetesクラスターに対する、日常的な操作を担うUIを備えているために「Kubernetes IDE」と名乗っているようですが、IDEが「統合開発環境(Integrated Development Environment) 」なのかどうかは不明です[3] 。
Dashboardなどの「Kubernetesの管理ツール」と異なる特徴のひとつが、スタンドアローンのアプリケーションとして開発されていることです。単にWeb UIをアプリケーション化しただけでなく、複数のクラスターを管理・グルーピングできる機能を備えているため、ウェブブラウザーのタブ機能に頼ることなく、ひとつのソフトウェアで複数のKubernetes環境の管理UIにアクセスできます。もちろん、Kubernetes側に何がしかの管理ソフトウェアを追加でインストールする必要もありません。
UIもシンプルでわかりやすいため、kubectl
コマンドよりは簡単に状態を確認できます。ただし現在のところ日本語UIは存在しません[4] 。
LensそのものはElectronベースのアプリケーションであるため、各プラットフォームに対応し、OSごとにインストール方法が存在します 。今回はUbuntuにインストールするため、公式が提供しているsnapパッケージ を用いてインストールしましょう。
$ sudo snap install kontena-lens --classic
これでインストールは完了です。画面左下の9ドットのアイコン[5] やSuper+Aなどを押してアプリケーション一覧を表示し、「 lens」で検索して起動してください。
図1 アップデート後の初回起動時のリリースノート
図2 起動直後は何も表示されない
まずはクラスターを追加します。そのためには、マスターノードのkubeconfigファイルが必要になります。MicroK8sの場合、次のコマンドでkubeconfigを取得できます。これはリモートからkubectlコマンドを実行したい場合にも便利です。
$ lxc exec microk8s -- microk8s config > kubeconfig
LXDを用いずにホストに直接MicroK8sをインストールした場合は、「 lxc exec microk8s --
」の部分を省いて実行してください。以下のmicrok8sコマンドの実行時も同様です。なお、Lensからはこのkubeconfigに書かれているURIに直接アクセスできる必要があります。VPNやプロキシーを経由する必要がある場合は、適宜設定を行っておいてください。
Lens側で右下の「+」ボタンを押すか、「 Ctrl+Shift+Aを押す」もしくは「FileメニューのAdd Clusterを選択する」ことで、クラスターの追加メニューが表示されます。
図3 クラスターの追加画面
ファイルを選択する方法でも、kubeconfigを直接貼り付ける方法でもかまいません。また、リロードボタンを押すと「~/.kube/config
」の中身を探索してくれます。複数のクラスターが記述されている場合、プルダウンメニューからコンテキストを指定可能です。
この状態で「Add Cluster」を押せば追加完了です。ちなみにkubeconfigファイルには管理者権限でアクセスするためのトークンが含まれているため、不要になった場合はきちんと削除しておきましょう。状況によってはファイルに保存せず、標準出力に表示させ、それを貼り付けるほうが安全かもしれません。
図4 Kubernetesクラスターを追加できた
無事に追加はされたものの、本来画面上部に現れるはずのメトリクスは「Metrics are not available due to missing or invalid Prometheus configuration.」とエラー表示になっており、画面下部には「kubelet does not have ClusterDNS IP configured and cannot create Pod using “ ClusterFirst” policy. Falling back to “ Default” policy.」との警告が残っています。そこでまずはこれらを解決しましょう。
メトリクス自身は右上のケバブメニューから「Settings」を選び、Metrics StackのInstallボタンを押すのが一般的な対処方法です。ただしMicroK8sの場合は、このメニューだと動作しないため、次のコマンドでprometheusプラグインをインストールしましょう。
$ lxc exec microk8s -- microk8s enable prometheus
5分ぐらい放置しておくと、グラフ等が表示されるはずです。
次にClusterDNSですが、これもMicroK8sの場合はdnsプラグインをインストールする方法が確実です。
$ lxc exec microk8s -- microk8s enable dns
図5 無事にメトリクスが表示されるようになった
まだ「invalid capacity 0 on image filesystem」という警告が残っていますが、これについては原因がわかりませんでした。ZFSを使っている場合によく出ているようですが、もしかするとLXDの上で動かしていることが影響しているのかもしれません。
とにかく、現時点で状態を表示できていることは確認できましたので、他のステータスも見てみましょう。右上のケバブメニューから「Settings」を選ぶとクラスターの概要が表示されます。
図6 クラスターの概要の表示
ここから画面に表示されるアイコンも変更可能ですので、用途に合わせて切り替えると良いでしょう。
「Workloads」ではPodやDeploymentなどのリストを表示できます。現時点では何もデプロイしていないため、表示は空です。ただし右上の「Namespace」のすべてにチェックを入れると、MicroK8sの管理用Podsなどが表示されます。
画面下の「Terminal」をクリックすると、ホスト上の端末が開きます。ちょっとkubectl
コマンドでで直接操作したいときに便利でしょう。ただしkubectl
コマンドを使いたいなら、別途コマンドをインストールしておいてください。
WordPress Helm Chartのデプロイ
最後にLensからWordPress Helm Chart をデプロイしてみます。
LensはさまざまなHelm Chartのリポジトリをサポートしています。初期状態ではBitnami Helm Charts リポジトリが有効になっているため、そこのHelmは簡単に検索・インストールできます。他にもFileメニューのPreferencesにある「Helm Charts」から、たくさんのリポジトリを追加可能です。
もちろんマニフェストを直接記述してデプロイできます。画面下部の「+」ボタンから「Create resource」を選択して入力してください。
Helm経由でインストールするなら、AppsのChartsを選択して、必要なHelmを検索します。今回の場合、WordPressで検索するわけですが、その前にひとつMicroK8s側の設定を行います。WordPressをはじめとするさまざまなアプリケーションは、永続化ボリュームを必要としています。この永続化ボリュームはKubernetesクラスターごとに設定が必要です。クラウドサービスならいくつかのオプションがあるはずですし、オンプレミスならCephをはじめとしていくつかの分散ストレージシステムや、ネットワークストレージを使うことになるでしょう。
MicroK8sの場合は、storageアドオンを有効化するとhostpathによる永続化ストレージを作成できます。ただしhostpathはノードに直接データ領域を作成するため、可用性を目的のひとつとするクラスターとは合わないことに注意が必要です。今回は説明の簡略化のためにstorageアドオンを使うことにします。
$ lxc exec microk8s -- microk8s enable storage
あとは画面の指示に合わせてインストールしていくだけです。
図7 AppsのChartsからwordpressを検索
図8 内容を確認してInstallボタンを押す
図9 Chartのファイルが表示されるため、必要に応じて変更しInstallボタンを押す
何も編集しなくても動くことは動きますが、最低でも「wordpress」で始まる項目ぐらいは設定しておくべきでしょう。
図10 デプロイが開始するのでしばらく待つ
図11 WorkloadsのOverviewでも無事に動いていることがわかる
今回はネットワーク周りの設定を行っていないため、PodsのIPアドレスに直接アクセスしましょう。WorkloadsのPodsに表示されているふたつのPodのうち、mariadbでないほうを選択します。
図12 PortsにURLへのリンクとなっている青い文字が表示されている
ここの青いリンクをクリックすると、ブラウザー上にWordPressの画面が表示されるはずです。
図13 いくつかのサンプルエントリーが入力済みのWordPress画面が表示される
今回は非常に簡単な手順のみ実施しましたが、より複雑な環境になればなるほど、GUIの恩恵は増えてくるはずです。職場で「あいつ、いつもなんか真っ黒な画面を睨みながら仕事している」と噂された経験のある人は、たまにはGUIを使って「できるビジネスマン」をアピールしてみるのはいかがでしょうか。