1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クラウドネイティブ技術実践ハンズオンのための環境をローカルで作成した話

Posted at

はじめに

技術書典で「クラウドネイティブ技術実践ハンズオン」を購入しました。

書籍では、ハンズオン環境はAWSのEC2で構築する例が紹介されていました。
私は、自前PCのローカル環境でハンズオン環境を構築しました!

私はハンズオンを以下のポイントでやりたいと思っています。

  1. 自由気ままに好きな時間に自分勝手に実験したい
  2. ハンズオン環境構築はじっくり取り組みたい
  3. 環境設定の一部を変更してみて挙動を確認して、理解を深めたい

このポイントだとクラウド環境はまずい場合があると思っています。
特に、設定誤り(変更し過ぎてしまう)が発生しやすく、セキュリティリスクが高まる:fearful:
時間を掛けると、稼働時間が増えて課金が増える・・・:sob:

まあ、単純にローカルでハンズオンするのが、不安もなく思う存分(環境を壊す勢い)できるということだけですが(笑)

構築したハンズオン環境

マシン環境

Ubuntu Desktop 24.04 LTS上にVirtualBoxを入れてVM上にUbuntu server 24.04をインストールしてハンズオン環境を作りました。
書籍で紹介されている構成が仮想マシン上にKubernetesを稼働させてホストのブラウザからアクセスする構成であったので、近い環境にするためにVirtualBoxを使うことにしました。

実は、かなり環境構築に手こずりました:sweat_smile:

試行錯誤の過程を記事するというよりかは、最終的な結果を記録のために残します!

:desktop:構築したハンズオン環境

No. 項目 バージョン
1 ホストOS Ubuntu Desktop 24.04LTS
2 仮想化ソフト VirtualBox 7.0.20
3 ゲストマシンOS Ubuntu Server 24.04LTS

:gear:ゲストマシンのリソース

No. 項目 設定値
1 OS Ubuntu Server 24.04LTS
2 CPUコア 3vCPU
3 メモリ 8GB
4 ストレージ 24GB

:warning:ストレージは、小さく設定し過ぎてしまったと思います。
 Cluster構築して最初のデモアプリをデプロイしただけで、残容量が8GBになってしまいました・・・。50GBくらい?に設定した方が良かったかなとちょっと後悔してます。

:globe_with_meridians:ゲストマシンのNIC設定

No. 設定値 用途
1 ホストオンリーアダプタ ホストマシンとゲストマシン間の通信で利用。
ホストのブラウザからゲストマシンのアプリケーション on Kubernetesにアクセスするために使用。
2 NAT ゲストマシンがインターネット通信するために利用。
ツール等をダウンロードするために使用。

ゲストマシンのIP固定化

ゲストマシンを起動するたびにIPアドレスが変動するのは、ゲストマシン内に構築したアプリケーションへアクセスする際に手間なのでIPを固定化した。
これにより、ゲストマシンに構築したアプリケーションへもアクセスしやすくなるとともに、VSCode等でSSH接続してハンズオンしやすくなりました。

/etc/netplan99-cloud-init.yamlファイルを作成し、以下の内容を書き込むことでホストオンリーアダプタに割り当てるIPアドレスを固定化しました。

IPアドレス固定化
network:
    ethernets:
        〔ホストオンリーアダプタのネットワークインターフェース〕:
            dhcp4: false
            addresses: [xxx.xxx.xxx.xxx/yy]
        〔NATのネットワークインターフェース〕:
            dhcp4: true
    version: 2

:warning:〔ホストオンリーアダプタのネットワークインターフェース〕及び〔NATのネットワークインターフェース〕は実際の環境に合わせて、書き換える必要あります。
 ip addrコマンドでネットワークインターフェース名を確認できます。

:warning:[xxx.xxx.xxx.xxx/yy]は、固定で割り当てるIPアドレス値を設定します。
 VirtualBoxで設定したゲートウェイのIPアドレス体系と合わせる必要あります。

Firewallの設定

Ubuntu ServerはデフォルトではFirewallが起動していないため、sudo ufw enbaleで有効化しました。Firewallを起動すると、外部からの通信は遮断して、外部への通信は可能という状態になります。
ハンズオンを進める上では不要な設定かもしれないが、セキュリティを意識した環境を構築することは大事ということでFirewallをActiveにしてみました。
ハンズオン内で使用する以下のポートへの通信を許可します。

ハンズオンで使用するPortへのアクセス許可設定
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コマンドを付けて実行してデプロイしました。

Gateway API以外のコンポーネントをデプロイ
sudo helmfile sync -f helm/helmfile.yaml

それ以外のところは、Cloud-native-one-day-learningのリポジトリ通りに実行するとデモアプリを無事にデプロイしてホストマシンのブラウザからアプリへアクセスが可能となります。

cloudnativehandson.png

番外編

途中、エラーや想定通りの動きにならなかった事象を紹介します。
明確な解決策は、見いだせていないですが、参考までにご紹介します。
明確な解決策をお持ちの方は、コメント欄に記載いただけますと幸いです。

デモアプリのデプロイで権限エラー

デモアプリをkube applayした際に以下のようなエラーが出ました。
image.png

以下の記事を参考にingress-nginx-adminssionを削除することで、デモアプリをデプロイできるようになりました!

ホストのブラウザからアプリにアクセスできない

Ingress NGINX Controllerをデプロイしたけど、ADDRESSが割り当てられていないからアクセスできないのだと思いましたが、対処方法が分かっていません。

unnamed.png

ただ、ゲストマシンのリソース(ストレージサイズ)を大きくして上記方法で再度Kubernetes Clusterを再作成したらADDRESSが割り当てられました。

最後に

ハンズオン環境がやっと構築できたので、少しずつ「クラウドネイティブ技術実践ハンズオン」を読み進めてクラウドネイティブ技術を習得していきたいなと思います。
ただストレージサイズが24GBでどこまで行けるか怪しいですが(笑)。
足りなくなったら、拡張しようかなと思います。

参考サイト

Ubuntuの日本ダウンロードサイト

UFWの設定について

ボリュームの拡張

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?