k0s+Lensによるプライベートクラウド構築ハンズオン
実行結果は各自で異なりますので、必ずコマンドを実行して確認します。この教材に記載されている実行結果をコピペしても意味はなく、必ず自分の環境でコマンドを実行し、表示された結果を使いましょう。
IPアドレスやホスト名といったネットワーク設定についての基礎知識をもっている必要があります。また、netplanのYAMLファイルなどを使い、Linuxで固定IP設定ができる必要があります。
目次
- 1 概要
- 2 仮想サーバーの準備
- 2.1 仮想環境管理ツールおよびハイパーバイザー
- 2.2 共通のスペック
- 2.3 個別設定
- 3 Kubernetes クラスターの作成準備
- 3.1 コントローラーノード(ホスト名 node1)のセットアップ
- 3.1.1 作業に必要なソフトウェアのインストール
- 3.1.2 ホスト名とIPアドレスの割り当て
- 3.1.3 Go言語のインストール
- 3.1.4 k0sのインストール
- 3.2 ワーカーノード 1台目(ホスト名 node2)のセットアップ
- 3.2.1 作業に必要なソフトウェアのインストール
- 3.2.2 ホスト名とIPアドレスの割り当て
- 3.2.3 k0sのインストール
- 3.3 ワーカーノード 2台目(ホスト名 node3)のセットアップ
- 3.3.1 作業に必要なソフトウェアのインストール
- 3.3.2 ホスト名とIPアドレスの割り当て
- 3.3.3 k0sのインストール
- 3.1 コントローラーノード(ホスト名 node1)のセットアップ
- 4 ハイブリッドクラウド対応のKubernetesクラスター構築
- 5 Argo CD
- 6 Kubernete IDE Lens
- 6.1 Lensのインストール
- 6.2 Lens IDの取得
- 6.3 アクティベーションコードの適用とLensの初回起動
- 6.4 LensにKubernetesクラスターを追加
- 6.5 Helmチャートの利用
- 6.5.1 Apacheの起動
- 6.5.2 Pod(ポッド)として起動中のApacheが障害で停止した場合の自動起動
- 6.5.3 Podsとして起動中のApacheの利用停止
- 6.5.4 Apache用Serviceの削除
- 6.5.5 Apache用Port Fowardingの削除
概要
前提
近年、コンテナなどクラウドコンピューティングを支える技術を用い、パブリッククラウドから、自分たちでプライベートクラウドを構築し運用する「オンプレミス回帰」が進んでいます。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のホームページからインストール用ファイルをダウンロードし、お使いのパソコンにインストールします。
インストール用ファイルをダウンロード後、インストール用ファイルを用いて、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つとも手作業で削除します。