はじめに
技術書典で「クラウドネイティブ技術実践ハンズオン」を購入しました。
書籍では、ハンズオン環境はAWSのEC2で構築する例が紹介されていました。
私は、自前PCのローカル環境でハンズオン環境を構築しました!
私はハンズオンを以下のポイントでやりたいと思っています。
- 自由気ままに好きな時間に自分勝手に実験したい
- ハンズオン環境構築はじっくり取り組みたい
- 環境設定の一部を変更してみて挙動を確認して、理解を深めたい
このポイントだとクラウド環境はまずい場合があると思っています。
特に、設定誤り(変更し過ぎてしまう)が発生しやすく、セキュリティリスクが高まる。
時間を掛けると、稼働時間が増えて課金が増える・・・。
まあ、単純にローカルでハンズオンするのが、不安もなく思う存分(環境を壊す勢い)できるということだけですが(笑)
構築したハンズオン環境
マシン環境
Ubuntu Desktop 24.04 LTS上にVirtualBoxを入れてVM上にUbuntu server 24.04をインストールしてハンズオン環境を作りました。
書籍で紹介されている構成が仮想マシン上にKubernetesを稼働させてホストのブラウザからアクセスする構成であったので、近い環境にするためにVirtualBoxを使うことにしました。
実は、かなり環境構築に手こずりました
Ingressをデプロイしてもホストのブラウザから通信が通らない・・・
— LittleBear🐻 (@littlebear_6w6) September 23, 2024
Ingressの情報を見ると、Addressが空欄になっている。
これが原因だと思うんだけな🤔https://t.co/8Kl7xlmJTj
この3日、仕事終わった深夜に自宅で試行錯誤しているけど、うまく行かない。
— LittleBear🐻 (@littlebear_6w6) September 25, 2024
悪化していて、Ingress NGINX Controllerがデプロイできなくなかった(笑) https://t.co/O4yeyGSp8P
試行錯誤の過程を記事するというよりかは、最終的な結果を記録のために残します!
構築したハンズオン環境
No. | 項目 | バージョン |
---|---|---|
1 | ホストOS | Ubuntu Desktop 24.04LTS |
2 | 仮想化ソフト | VirtualBox 7.0.20 |
3 | ゲストマシンOS | Ubuntu Server 24.04LTS |
ゲストマシンのリソース
No. | 項目 | 設定値 |
---|---|---|
1 | OS | Ubuntu Server 24.04LTS |
2 | CPUコア | 3vCPU |
3 | メモリ | 8GB |
4 | ストレージ | 24GB |
ストレージは、小さく設定し過ぎてしまったと思います。
Cluster構築して最初のデモアプリをデプロイしただけで、残容量が8GBになってしまいました・・・。50GBくらい?に設定した方が良かったかなとちょっと後悔してます。
ゲストマシンのNIC設定
No. | 設定値 | 用途 |
---|---|---|
1 | ホストオンリーアダプタ | ホストマシンとゲストマシン間の通信で利用。 ホストのブラウザからゲストマシンのアプリケーション on Kubernetesにアクセスするために使用。 |
2 | NAT | ゲストマシンがインターネット通信するために利用。 ツール等をダウンロードするために使用。 |
ゲストマシンのIP固定化
ゲストマシンを起動するたびにIPアドレスが変動するのは、ゲストマシン内に構築したアプリケーションへアクセスする際に手間なのでIPを固定化した。
これにより、ゲストマシンに構築したアプリケーションへもアクセスしやすくなるとともに、VSCode等でSSH接続してハンズオンしやすくなりました。
/etc/netplan
に99-cloud-init.yaml
ファイルを作成し、以下の内容を書き込むことでホストオンリーアダプタに割り当てるIPアドレスを固定化しました。
network:
ethernets:
〔ホストオンリーアダプタのネットワークインターフェース〕:
dhcp4: false
addresses: [xxx.xxx.xxx.xxx/yy]
〔NATのネットワークインターフェース〕:
dhcp4: true
version: 2
〔ホストオンリーアダプタのネットワークインターフェース〕及び〔NATのネットワークインターフェース〕は実際の環境に合わせて、書き換える必要あります。
ip addr
コマンドでネットワークインターフェース名を確認できます。
[xxx.xxx.xxx.xxx/yy]は、固定で割り当てるIPアドレス値を設定します。
VirtualBoxで設定したゲートウェイのIPアドレス体系と合わせる必要あります。
Firewallの設定
Ubuntu ServerはデフォルトではFirewallが起動していないため、sudo ufw enbale
で有効化しました。Firewallを起動すると、外部からの通信は遮断して、外部への通信は可能という状態になります。
ハンズオンを進める上では不要な設定かもしれないが、セキュリティを意識した環境を構築することは大事ということでFirewallをActiveにしてみました。
ハンズオン内で使用する以下のポートへの通信を許可します。
sudo ufw allow from 〔ホストマシンのIPアドレス〕 to any port 22,80,443,8080,8443,18080,18443 proto tcp
Kuberntesクラスタの構築
書籍では、Cloud-native-one-day-learningのリポジトリが紹介されていますが、cnd-handsonのリポジトリの「Chapter_cluster-creater」章を参考にkubernetesクラスタ環境を構築しました。
こちらのリポジトリの方がIssueやCommitが直近で入っていてActiveだと思います。
Gateway API以外のコンポーネントをhelmfileコマンドで利用する際に、リソースアクセスで権限エラーとなったため、以下のようにsudo
コマンドを付けて実行してデプロイしました。
sudo helmfile sync -f helm/helmfile.yaml
それ以外のところは、Cloud-native-one-day-learningのリポジトリ通りに実行するとデモアプリを無事にデプロイしてホストマシンのブラウザからアプリへアクセスが可能となります。
番外編
途中、エラーや想定通りの動きにならなかった事象を紹介します。
明確な解決策は、見いだせていないですが、参考までにご紹介します。
明確な解決策をお持ちの方は、コメント欄に記載いただけますと幸いです。
デモアプリのデプロイで権限エラー
デモアプリをkube applay
した際に以下のようなエラーが出ました。
以下の記事を参考にingress-nginx-adminssion
を削除することで、デモアプリをデプロイできるようになりました!
ホストのブラウザからアプリにアクセスできない
Ingress NGINX Controllerをデプロイしたけど、ADDRESS
が割り当てられていないからアクセスできないのだと思いましたが、対処方法が分かっていません。
ただ、ゲストマシンのリソース(ストレージサイズ)を大きくして上記方法で再度Kubernetes Clusterを再作成したらADDRESS
が割り当てられました。
最後に
ハンズオン環境がやっと構築できたので、少しずつ「クラウドネイティブ技術実践ハンズオン」を読み進めてクラウドネイティブ技術を習得していきたいなと思います。
ただストレージサイズが24GBでどこまで行けるか怪しいですが(笑)。
足りなくなったら、拡張しようかなと思います。
参考サイト
Ubuntuの日本ダウンロードサイト
UFWの設定について
ボリュームの拡張