k0s+Lensによるプライベートクラウド構築ハンズオン

実行結果は各自で異なりますので、必ずコマンドを実行して確認します。この教材に記載されている実行結果をコピペしても意味はなく、必ず自分の環境でコマンドを実行し、表示された結果を使いましょう。

IPアドレスやホスト名といったネットワーク設定についての基礎知識をもっている必要があります。また、netplanのYAMLファイルなどを使い、Linuxで固定IP設定ができる必要があります。

目次

概要

前提

近年、コンテナなどクラウドコンピューティングを支える技術を用い、パブリッククラウドから、自分たちでプライベートクラウドを構築し運用する「オンプレミス回帰」が進んでいます。2010年以前はオンプレミスといえばクラウドコンピューティングを使わないということを指しましたが、2020年代では自分たちでプライベートクラウドを構築して運用することを指します。

もちろん、プライベートクラウド構築について理解のある技術者を確保できない、あるいは社員の業務用パソコンを購入するくらいの感覚で、プライベートクラウドの構築と運用にかかる最低数千万円の予算を用意できない企業は、パブリッククラウドを今後も使い続けるでしょう。プライベートクラウド、パブリッククラウド、ハイブリッドクラウド、マルチクラウドなど、クラウドコンピューティング運用形態で必要とする基礎技術としてコンテナとコンテナ運用管理ツールのKubernetes(クーバネティス)があります。

この教材の目的

このハンズオンでは、クラウドコンピューティングの基礎技術である、コンテナとコンテナ運用管理ツールであるKubernetes(クーバネティス)を使い、ハイブリッドクラウドに発展可能なプライベートクラウド構築を試みます。お手持ちの家電量販店やネット通販で買えるパソコンを使い、最低限のプライベートクラウド構築を行います。24時間いつでも手軽に試せるプライベートクラウドをパソコン内に構築することが目的です。

k0s

Kubernetesの利用には、ミランティス社が開発、提供している「k0s」を使用します。「k0s」は、低スペックのサーバーやシングルボードコンピュータ上でKubernetesクラスター環境を構築することができます。

https://www.mirantis.com/software/k0s/

仮想サーバーの準備

インターネットに接続できるWindowsまたはMac搭載のパソコン(CPU 4コア以上、メモリ16GB以上、SSD 512GB以上)を持っている人を想定しています。

Linuxをインストール可能なデバイスをお持ちの場合は、仮想サーバーの準備は不要です。3台以上の物理サーバー(Raspberry Piを使いたい場合は、Raspberry Pi 4 4GBまたは8GBモデルのどちらかを3台)とインターネットに接続可能なハブを用意し、「Kubernetes クラスターの作成準備」から進めてください。

仮想環境管理ツールおよびハイパーバイザー

お使いのパソコンに合わせて、下記のいずれかを使います。

  • Intel社製またはAMD社製CPU搭載のWindowsパソコンを使っている場合 ( 64bit のみ )

    • Windows 10 Home または、Windows 11 Home の場合

      • Oracle VM Virtual Box

    • Windows 10 Pro または、Windows 11 Pro の場合

      • Oracle VM Virtual Box

      • Hyper-V + multipass

  • Intel社製CPU搭載のMacを使っている場合

    • Oracle VM Virtual Box

  • Apple社製CPU搭載のMacを使っている場合

    • Hypervisor.framework + multipass

共通のスペック

以下、Virtual Box の場合です。Hyper-Vなど他のハイパーバイザーの場合やLinux環境の場合は各自で読み替え設定を行ってください。

  • OS:Ubutnu Server 20.04 または、Ubutnu Server 22.04

  • 仮想CPU割り当て数 : 1

  • 仮想メモリ割り当て:2048MB(2GB)以上

  • 仮想ディスク:64GB以上

  • ネットワーク設定:NAT + ホストオンリーアダプタの構成。ホストオンリーアダプタには、固定IPを割り当てること。

  • デスクトップ環境:なし

  • SSH接続:必須 ( ユーザー名 + パスワードでもOK )

個別設定

以下、Virtual Box の場合です。Hyper-Vなど他のハイパーバイザーの場合やLinux環境の場合は各自で読み替え設定を行ってください。

  • コントローラーノード

    • ホストオンリーアダプタの固定IP例:192.168.125.100

    • Your server’s name (ホスト名):node1

    • ユーザー名 : vboxuser

    • パスワード:任意のもの

  • ワーカーノード 1台目

    • ホストオンリーアダプタの固定IP例:192.168.125.105

    • Your server’s name (ホスト名):node2

    • ユーザー名 : vboxuser

    • パスワード:任意のもの

  • ワーカーノード 2台目

    • ホストオンリーアダプタの固定IP例:192.168.125.110

    • Your server’s name (ホスト名):node3

    • ユーザー名 : vboxuser

    • パスワード:任意のもの

Kubernetes クラスターの作成準備

コントローラーノード、ワーカーノード1台目、ワーカーノード2台目について、それぞれ必要なソフトウェアをインストールしていきます。

コントローラーノード(ホスト名 node1)のセットアップ

作業に必要なソフトウェアのインストール

sudo apt update -y sudo apt upgrade -y sudo apt install openssh-server avahi-daemon language-pack-ja-base git wget curl make

ホスト名とIPアドレスの割り当て

sudo nano /etc/hosts

下記を追記

192.168.125.100 node1 192.168.125.105 node2 192.168.125.110 node3

Go言語のインストール

次のコマンドを実行します。

実行結果

パスを通す

k0sのインストール

次のコマンドを実行します。

実行結果

ワーカーノード 1台目(ホスト名 node2)のセットアップ

作業に必要なソフトウェアのインストール

ホスト名とIPアドレスの割り当て

下記を追記

k0sのインストール

次のコマンドを実行します。

実行結果

ワーカーノード 2台目(ホスト名 node3)のセットアップ

作業に必要なソフトウェアのインストール

ホスト名とIPアドレスの割り当て

下記を追記

k0sのインストール

次のコマンドを実行します。

実行結果

ハイブリッドクラウド対応のKubernetesクラスター構築

コントローラーノードの作業

k0sの設定ファイル出力

設定ファイルを出力し、仮想サーバーのホストオンリーアダプタの固定IPを追記します。
次のコマンドを実行します。

spec:の下のapi:に含まれる
address:の下に、externalAddress: パブリックIPアドレス を追記します。
例 externalAddress: 192.168.125.100
追記後、保存します。Ctrl + Xを押して、Yを押すと保存して終了します。

次のコマンドを実行し、コントローラーノードとして起動します。

実行結果

Process IDはk0sの起動毎に変わります。Versionもインストールした時の最新版になっています。Roleが、controllerになっていればOKです。

ワーカーノードがコントローラーノードに接続するためのトークンファイルの作成とダウンロード

次のコマンドを実行します。

作業用ユーザーのホームディレクトリ(例 /home/vboxuser)に、token-worker というファイルが作成されます。
SCPコマンドを使い、これをダウンロードします。例えば、TeraTermを使っている場合は、「SSH SCP」を実行することで、token-workerファイルを、パソコン上の任意の場所にダウンロードすることができます。

ワーカーノード 1台目と2台目をコントローラーノードに接続

この作業は、ワーカーノード1台目と2台目共通ですので、2回実施する必要があります。

SCPコマンドを使い、token-workerファイルをアップロードします。アップロード場所は、ワーカーノード1台目と2台目共通で、SSH接続でログインしているユーザーのホームディレクトリにします。
TeraTermを使っている場合は、SSH接続を行い「SSH SCP」を実行することで、パソコン上のtoken-workerファイルを、アップロードすることができます。


token-workerファイルを、node2とnode3それぞれにアップロード後、次のコマンドを実行します。この処理は、node2とnode3、両方で実施する必要があります。

実行結果

Process IDはk0sの起動毎に変わります。Versionもインストールした時の最新版になっています。Roleが、workerになっていればOKです。

コントローラーノードからワーカーノードに接続確認

3分ほど待った後に、コントローラーノードで次のコマンドを実行します。

実行結果

上記のように、STATUSが2つともReadyにならない場合は、さらに数分待った後、「sudo k0s kubectl get nodes」再実行してください。

Argo CD

Argoはアルゴと読みます。Argo CDは、 Kubernetes向けの継続的デリバリーツールの1つです。Webブラウザ上で使えるGUIがあることでも知られています。Argo CDが採用される理由の1つに、GUIがあるということがあげられます。

継続的デリバリー( Continuous Delivery : 略称 CD ) に特化しており、指定したGitリポジトリの状態にもとづき、アプリケーションをKubernetesクラスターにデプロイし、アプリケーションを動く状態にします。

https://argo-cd.readthedocs.io/en/stable/

Argo CD CLIのインストール

Argo CDをコマンドラインで操作するため、Argo CD CLIをインストールします。

インストールできたか確認するため、次のコマンドを実行します。

実行結果

この時点では、Argo CDをインストールしていないため、Argo CDのserver address は決まっておらず、「FATA[0000] Argo CD server address unspecified」というエラーメッセージが表示されます。

namespaceの作成

Argo CD をインストールする namespaceを作成します。次のコマンドを実行します。

実行結果

Argo CD のインストール

次のコマンドを実行します。

実行結果

インストールにより、どこのワーカーノードで稼働しているかを確認するため、次のコマンドを実行します。

実行結果 ( この環境での例です。実行環境により異なるので、各自で読み替えてください。)

この結果から、node3 (ワーカーノード2台目)から、Argo CDの管理画面(argocd-server-XXXXXXX)にアクセスできることがわかります。

Argo CD API Serverにアクセス

ポートフォワーディングによるアクセスを行います。ポートフォワーディングが最も簡単な方法ですが、他にIngressを使うなどの方法もあります。

argocd-serverのServiceのタイプをClusterIPからNodePortに変更するために、下記のコマンドを実行します。

「type: ClusterIP」を「type: NodePort」に書き換えます。書き換えは、vi エディタですので、vi エディタのコマンド操作で書き換えを行い、保存します。その後、次のコマンドを実行します。

実行結果

上記では割り当てポート番号から、https://argocd-serverが稼働するワーカーノードの固定IPアドレス:32043 でアクセスすれば良いことになります。

ポート番号 32043 は、各自で異なることがあるため、必ずコマンドを実行して確認しましょう。

API Serverへのログイン

API Serverにログインするためのユーザー名は、admin です。パスワードはコマンドを実行して確認する必要があります。

実行結果

コマンドラインによるArgo CD API Serverにログインを行うため、次のコマンドを実行します。fv8LgNIlNwMaMhc5

例として、192.168.125.110:32043 を接続先としています。接続先は各自の環境に合わせて読み替えてください。

実行結果

この質問には、y を入力し、Enterキーを押します。Argo CD API Serverのユーザー名とパスワードを求められるので、入力し、Enterキーを押します。パスワードは入力されても表示されません。

ログインが完了すれば、次のように表示されます。

Argo CD によるアプリケーション作成とKubernetesクラスターへのデプロイ

Argo CDの公式のサンプルアプリの「guestbook」を使って、Argo CDでアプリケーションをデプロイして動かす手順を確認します。

Argo CDでアプリケーション(設定)の作成

次のコマンドを実行します。

実行結果

アプリケーションのデプロイ状況を確認するために、次のコマンドを実行します。

実行結果

「STATUS」の値が、「OutOfSync」となっているため、まだデプロイができていない状態になります。デプロイを行うには、「argocd app sync」を実行します。

Argo CDでアプリケーションのデプロイ

Argo CDに作成したアプリケーションの設定を用いて、Kubernetesクラスターにアプリケーションをデプロイします。

実行結果

上記記載のURLにアクセスすることで、API ServerのGUI上でデプロイ結果を確認することができます。

どこのワーカーノードで稼働しているかを確認するため、次のコマンドを実行します。

実行結果

guestbookアプリにアクセス

ポートフォワーディングによるアクセスを行います。ポートフォワーディングが最も簡単な方法ですが、他にIngressを使うなどの方法もあります。

argocd-serverのServiceのタイプをClusterIPからNodePortに変更するために、下記のコマンドを実行します。

「type: ClusterIP」を「type: NodePort」に書き換えます。書き換えは、vi エディタですので、vi エディタのコマンド操作で書き換えを行い、保存します。その後、次のコマンドを実行します。

実行結果

上記では割り当てポート番号から、http://guestbook-uiが稼働するワーカーノードの固定IPアドレス:31911 でアクセスすれば良いことになります。実際にアクセスしてみましょう。次のように表示されます。

Argo CDでデプロイしたアプリケーションの削除

上述のguestbookアプリを例に、稼働中のアプリケーションを停止し、削除する方法を確認します。

API ServerのGUIからアプリケーションを削除していきます。

GUI上で、「DELETE」をクリックします。

「Please type 'guestbook' to confirm the deletion of the resource」というメッセージに従い、削除するアプリケーション名として、guestbook を入力します。入力後、「OK」をクリックします。

画面右下に、「Application 'guestbook' was deleted」と表示されれば、削除完了です。

Kubernete IDE Lens

Kubernetesにおける管理用コマンドラインツール「kubectl(k0sの場合は、k0s kubectl)」をGUIで使えるようにしたツールが、「Lens」です。AWSやMicrosoft Azure、IBM Cloud等の外部のクラウド上のKubernetesクラスター、自前で運用しているプライベートクラウド上のKubernetesクラスター、どちらも「Lens」を使って管理、運用することができます。「Lens」は、「k0s」と同じミランティス社が開発しているツールです。

Lensのインストール

Lensのホームページからインストール用ファイルをダウンロードし、お使いのパソコンにインストールします。

https://k8slens.dev/

インストール用ファイルをダウンロード後、インストール用ファイルを用いて、Lensをインストールします。

下図はWindows環境の場合です。「Lensを実行」のチェックを外して、「完了」をクリックします。チェックを外し忘れてLensを起動した場合は、一度Lensを終了します。

Lens IDの取得

Githubもしくは、Google アカウントを取得していると登録が簡単に済みますが、そのどちらもなくても構いません。お使いのメールアドレスでLens IDの取得ができます。

https://app.k8slens.dev/signup にアクセスします。Google アカウントもしくはGithubアカウントを持っている場合は、「Sign Up with Github」もしくは「Sign Up with Google」をクリックします。どちらでもない場合は、画面に各項目に入力し、「I accept Lens Term of Service and Privacy Policy」にチェックを入れ、「Create Lens ID」をクリックします。

ここでは、「Sign Up with Github」をクリックした場合について取り扱います。Githubにログインを求められるので、ログイン後、次のように表示されます。「Authorize lensapp」をクリックします。

「Add Lens Subscription」をクリックします。次のように表示されます。無料で使える「LENS PERSONAL」に表示を切り替えましょう。

「Lens Subscriptions for Students, Hobbyists and Startups」をクリックします。無料の「FREE」に表示が変わります。LENS PRO から LENS PERSONAL に表示が変わっていることがわかります。「CHOOSE」をクリックします。

画面指示に従い、指定された単語を入力します。下図では、CONFIRM と入力するよう求めています。入力後、「OK」をクリックします。

アクティベーションコードの適用とLensの初回起動

「Open Lens Desktop」をクリックします。

「Lensを開く」をクリックします。

「Lensを開く」をクリックします。

Lensが起動します。「Release Notes」が表示されます。「OK」をクリックします。

Lensが起動しました。

LensにKubernetesクラスターを追加

kubeconfigファイルの作成とダウンロード

ホームディレクトリかどうか確認するために、次のコマンドを実行します。

実行結果

ログインしているユーザーのホームディレクトリであることを確認し、次のコマンドを実行します。kubeconfigファイルが、ホームディレクトリ下に作成されます。

作成した、kubeconfigファイルを、ダウンロードします。SCPコマンドを使います。例えば、TeraTermを使っている場合は、「SSH SCP」を実行することで、kubeconfigファイルを、パソコン上の任意の場所にダウンロードすることができます。

ダウンロードしたkubeconfigファイルを開き、中身をコピーします。

kubeconfigファイルの読み込みによるクラスターの追加

Lensの画面で、画面左上の「三」>>「File」>>「Add Cluster」をクリックします。

「Add Clusters from Kubeconfig」画面で、コピーしておいたkubeconfigファイルの中身を貼り付け、画面下部の「Add cluster」をクリックします。

Lensの画面で、「Catalog」内の「CATEGORIES」下の「Clusters」に、「Default」というクラスターが追加されていることがわかります。「Default」と表示されているKubernetesクラスターをクリックします。

「Default」と表示されているKubernetesクラスターの管理画面が表示されます。「Nodes」をクリックすると、Kubernetesクラスターで管理しているワーカーノードが表示されます。

VirtualBox上で稼働するKubernetesクラスターに、Lensから接続できることが確認できました。

Helmチャートの利用

Kubernetesクラスターにアプリケーションを展開する仕組みの1つとして、「Helm(ヘルム)」があります。「Helm」では、Chart(チャート)と呼ばれる定義ファイルをもとに、Kubernetesクラスターにアプリケーションを展開し、利用できるようにします。

Apacheの起動

Lensに追加したKubernetesクラスターを開き、「Helm」>>「Charts」の順にクリックします。今回は、「Charts」画面で、一覧から「apache」を探し、クリックします。

「Chart: bitnami/apache」が表示されます。「Install」をクリックします。

「Helm install : bitnami/aoache」タブ内で、Helmチャートを使ったインストールにあたり、必要な設定値に入力します。apacheの場合は何も設定しなくても、「Install」をクリックすれば動きます。

Kubernetesクラスターで、「Workloads」下の「Pods」をクリックします。apache用のPod(ポッド)ができています。「Status」が下図のように「Running」になるまで待ちます。node3 で動いていることも表示されています。

Pod(ポッド)名をクリックします。上図における、「apache-…」と表示されている箇所です。Podの詳細情報が表示されます。
画面を下に移動し、「Ports」に表示されている、http: 8080/TCP をクリックしてみましょう。

起動中のApacheを確認することができました。

Pod(ポッド)として起動中のApacheが障害で停止した場合の自動起動

Kubernetesクラスターで、「Workloads」下の「Pods」をクリックします。「Pods」内で「apache-…」と表示されている箇所の右端の「⁝」をクリックし、「Delete」をクリックします。

「Remove」をクリックします。しばらく待ちます。

削除処理を実行したApacheのPod(ポッド)が復活します。

Podsとして起動中のApacheの利用停止

Kubernetesクラスターで、「Workloads」下の「Deployments」をクリックします。「Deployments」内で「apache-…」と表示されている箇所の右端の「⁝」をクリックし、「Delete」をクリックします。

起動中のPod(ポッド)が削除されます。

Kubernetesクラスターで、「Workloads」下の「Pods」をクリックします。「apache-…」と表示されているPod(ポッド)が消えていることがわかります。

Apache用Serviceの削除

Podsで実行されているアプリケーションをネットワークサービスとして公開するための仕組みが、Kubernetesクラスターにおける「Services」です。「apache-…」と表示されている箇所の右端の「⁝」をクリックし、「Delete」をクリックします。

Apache用Port Fowardingの削除

Apacheで使用していたポートフォワーディングルールを削除します。「apache-…」と表示されている箇所の右端の「⁝」をクリックし、「Delete」をクリックします。

「Remove」をクリックします。1つ1つ削除になりますので、3つとも手作業で削除します。