Linux
 Computer >> コンピューター >  >> システム >> Linux

UbuntuでMicroK8sを使ってローカルKubernetes環境を構築する方法

DevOpsの普及により、ソフトウェアエンジニアや開発者がアプリケーションを開発・デプロイする方法は大きく変化しました。この革命の中心にある技術のひとつが、Kubernetes(クバネティス)です。

本記事では、Ubuntu上にMicroK8sを使ってローカルのKubernetesインスタンスを構築する手順を解説します。この環境が整えば、コンテナアプリケーションを安全かつ信頼性高く、高い拡張性をもってホストできるようになります。

なぜMicroK8sなのか?

Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化することでDevOps業務を効率化するオープンソースプラットフォームです。Kubernetesは「K8s」という略称でも広く知られており、これは「Kubernetes」という単語の ks の間に8文字あることに由来します。MicroK8sは、その名の通りマイクロ(小型)なKubernetesインスタンスと考えてください。

Ubuntuで動作する多くのパブリックおよびプライベートの本番級クラウド環境では、Charmed Kubernetesがコンテナアプリの管理に使われています。しかし、Charmed Kubernetesはリソース消費が激しく、適切に構成するには相応の知識が必要という課題があります。

そこで登場するのがMicroK8sです。MicroK8sは小型で軽量なアップストリーム版Kubernetesであり、開発者のPCやIoTデバイス、エッジデバイス上で仮想マシンなしでネイティブに動作します。クロスプラットフォーム対応で、IntelアーキテクチャとARMアーキテクチャの両方で実行できます。

MicroK8sは、最小限の手間でKubernetesに慣れるための最良の方法のひとつです。Cloud Native Computing Foundation(CNCF)による認証済みKubernetesアップストリームであり、指定された業界標準に準拠した相互運用可能な実装であることが保証されています。

ステップ1:UbuntuへのMicroK8sのインストール

MicroK8sはsnapコマンドを使えば簡単にインストールできます。

sudo snap install microk8s --classic

または、GUIからUbuntuソフトウェアセンター経由でインストールすることも可能です。「microk8s」を検索して「インストール」ボタンをクリックするだけです。

UbuntuでMicroK8sを使ってローカルKubernetes環境を構築する方法

ステップ2:ファイアウォールの設定

Pod間およびインターネットとの通信を円滑に行うために、ファイアウォールのコンテナネットワークインターフェース(cni0)で受信・送信通信を許可しておきましょう。

Podとは、Kubernetesにおける最小のデプロイ可能なコンピューティング単位です。ストレージやネットワークリソースなどを共有する1つ以上のコンテナのグループで構成されます。

sudo ufw allow in on cni0 && sudo ufw allow out on cni0

続いて、以下のコマンドを実行します。

sudo ufw default allow routed

ステップ3:ユーザーをmicrok8sグループに追加する

現時点では、ほとんどのMicroK8sコマンドを実行するのに sudo コマンドが必要です。本番サーバーではセキュリティ対策として有効ですが、開発マシンでは必須ではない場合もあります。

sudoを使わずに済むよう、自分のユーザーをmicrok8sグループに追加しましょう。

sudo usermod -aG microk8s $USER

さらに、現在のユーザーを ~/.kube ディレクトリの所有者に変更します。

sudo chown -f -R $USER ~/.kube

変更を反映させるため、以下のコマンドでユーザーグループを再読み込みします。

newgrp microk8s

ステップ4:重要なアドオンの有効化

デフォルトのMicroK8sは、エッジデバイスやIoTデバイスでのフットプリントを最小限に抑えるため、必要最低限の構成になっています。ただし、MicroK8sサービスを管理するために、いくつかの重要なアドオンを追加インストールできます。microk8sコマンドでDNS、ダッシュボード、ストレージの各アドオンを有効にしましょう。

microk8s enable dns dashboard storage

DNSアドオンは他のサービスから必要とされることが多いため、常に有効にしておくことをおすすめします。

ダッシュボードアドオンを使用すると、MicroK8s内のサービスをグラフィカルに把握でき、サービスの管理にも活用できます。

利用可能なMicroK8sアドオンの一覧は、次のコマンドで確認できます。

microk8s status

ステップ5:MicroK8sダッシュボードの表示

ダッシュボードアドオンを有効にしたので、WebブラウザからMicroK8sダッシュボードに簡単にアクセスできるようになりました。

まず、ダッシュボードPodのIPアドレスを取得します。次のコマンドを実行してください。

microk8s kubectl get all --all-namespaces
UbuntuでMicroK8sを使ってローカルKubernetes環境を構築する方法

上記コマンドの出力を見ると、kubernetes-dashboard サービスがIPアドレス10.152.183.35で稼働し、TCPポート443で待ち受けていることがわかります。このIPアドレスはランダムに生成されるため、ご自身の環境では異なる値になる点に注意してください。

ブラウザで表示されたIPアドレスにアクセスします。この例では https://10.152.183.35:443 となります。正しいURLを指定していることを確認してください。

セキュリティのため、Kubernetesダッシュボードへのサインインには認証情報が求められます。次のコマンドでデフォルトのダッシュボードトークンを取得し、表示された kubernetes.io/service-account-token をコピーして、トークン入力欄に貼り付けてください。

token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s kubectl -n kube-system describe secret $token
UbuntuでMicroK8sを使ってローカルKubernetes環境を構築する方法

ダッシュボードには、MicroK8sのワークロード、サービス、設定、クラスタなどの概要が表示されます。

UbuntuでMicroK8sを使ってローカルKubernetes環境を構築する方法

ステップ6:MicroK8sでサービスを作成する

MicroK8sの動作を実際に確認するために、2つのPodを含むmicrobotサービスのデプロイメントを作成してみましょう。kubectlコマンドでPodを作成します。

microk8s kubectl create deployment microbot --image=dontrebootme/microbot:v1

次のコマンドでmicrobot Podをスケールさせます。

microk8s kubectl scale deployment microbot --replicas=2

microbotデプロイメントを外部に公開するためのサービスを作成します。

microk8s kubectl expose deployment microbot --type=NodePort --port=80 --name=microbot-service

これで、service/microbot-service という名前のもとに2つのmicrobot Podがデプロイされました。microbotサービスやその他のサービスの詳細は、次のコマンドで確認できます。

microk8s kubectl get all --all-namespaces
UbuntuでMicroK8sを使ってローカルKubernetes環境を構築する方法

microbotサービスはNodePortで稼働しているため、PCのブラウザから直接アクセスできます。この例では、ランダムに生成されたポート30353でサービスが動作しています。

ブラウザで https://localhost:30353 にアクセスしてください。30353 は上記の出力に表示されたポート番号です。正しいポート番号を使用していることを確認してください。

UbuntuでMicroK8sを使ってローカルKubernetes環境を構築する方法

Kubernetes vs Docker:どちらを選ぶべきか?

本ガイドでは、PCやエッジデバイスに最小構成のKubernetesをローカルにインストールする方法を紹介しました。Kubernetesは多くの開発者のワークフローに組み込まれており、大規模なコンテナ化アプリケーションの本番デプロイに広く活用されています。

Kubernetesは、Dockerコンテナなど複数のコンテナ群を簡単に管理・オーケストレーションするために使われます。一方、スタンドアロンのDockerは主に単一コンテナの管理に用いられます。DockerとKubernetesのどちらを選ぶかは、チームのスキルセットや本番環境へデプロイするソフトウェアの規模に応じて判断するとよいでしょう。

  1. Dockerを使ってローカル環境にKibanaインスタンスを構築する手順

    本記事では、リモートのElasticsearchクラスタに接続するローカルKibanaインスタンスの構築手順を、ステップごとにわかりやすく解説します。ObjectRocket for Elasticsearchには無料のホスト型Kibanaが付属していますが、ローカルマシン上でKibanaを実行することで、より柔軟な運用が可能になります。また、ホスト型Kibanaを提供していない環境やサービスを利用している場合でも、このガイドに沿って進めれば、自分のマシン上で簡単にKibanaを動かせるようになります。なぜローカルでKibanaを動かすのか?他のKibanaユーザーと共有したくない独自のビジュ

  2. iPhoneのFace IDに別の顔を登録する方法【iOS 12以降の「代替の外観」設定】

    iPhone Xとともに登場したFace IDは、多くの人を魅了しました。ティム・クックCEOが「スマートフォンの未来」とまで語ったこの生体認証システムにより、ユーザーはパスコードを入力することなく、自分の顔だけでiPhoneのロックを解除できるようになりました。 しかし当初のFace IDには一つ大きな制約がありました。それは、ロック解除用として登録できる顔が「1人分だけ」という点です。セキュリティの観点からは理にかなっていますが、緊急時に家族や信頼できる人にスマホを使ってもらいたい場面では、かえって不便に感じることもありました。 そんな悩みはiOS 12で解決されました。「代替の外観(Al