GitHub Codespacesを使ったKubernetes開発環境

投稿が遅れました:bow_tone1:

# はじめに

`Codespaces`便利ですね。 超簡単に開発環境が手に入ります。
ちょっと触ってみたら。。`Docker`が入ってる！ それなら`k３d`で`Kubernetes`の開発環境が作れる！！
ということでやってみました。

`codespace`上で`Demoアプリ`を開発して、`codespace`内の`Kubernetes`環境にデプロイしてデモを実行します。　↓こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124599/803a9384-ce4c-6938-109d-a13b034d9f93.png)


# デモ環境用リポジトリ

https://github.com/oruharo/k8s-demo/

以下をお試しされる方は↑をフォークして下さい。
注）突貫で作ったのでバグがあるのとリファクタリングできてません。。おいおいやっていきます。

# `GitHub Codespaces`

[GitHub Codespaces](https://docs.github.com/ja/codespaces/overview)はGithubのリポジトリ上のソースコードを開発対象として、カスタマイズ可能なVSCodeベースの開発環境を提供するクラウドサービスです。

'github'画面の`[Code]`ボタンから4-core 8GB RAMのCodespaceを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124599/69e57d72-1206-b1fa-12c6-52b97ee8b6ce.png)
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124599/2ce64a0e-a395-a60e-704c-ada1b5e81822.png">


# `Kubernetes`環境

小さな`Kubernetes`ディストリビューションには`Minikube`,`kind`,`Microk8s`などがありますが、ここでは`k3d`を使います。

[k3d](https://k3d.io/)は一つのDocker環境上でマルチノードなKubernetes環境を稼動させるツールです。軽量Kubernetes環境の[k3s](https://rancher.com/docs/k3s/latest/en/architecture/)をコンテナ内で動かし、それを複数起動することでマルチノードを実現しています。コンテナの中でコンテナを動かす二重構造となり、外側がノード、内側がPodを構成します。

`Codespaces`の[カスタマイズ機能](https://docs.github.com/ja/codespaces/setting-up-your-project-for-codespaces/introduction-to-dev-containers)だけで各種ツールのインストールができてしまいますが(後で気付きましたw)、投稿ではMakefileを使ってやってみます。

ターミナルを開き、`make create-cluster`を実行します。
`bin`ディレクトリを作成し、`k3d`,`kubectl`,`helm`をダウンロードした後、`k3d`でノード３つの`kubernetes`クラスタが作成されます。

```terminal
@oruharo ➜ /workspaces/k8s-demo (main) $ make create-cluster
     :
```
binにパスを通すため`make console`を実行してから状態を確認します。
```terminal
@oruharo ➜ /workspaces/k8s-demo (main) $ make create-cluster

@oruharo ➜ /workspaces/k8s-demo (main) $ kubectl cluster-info
Kubernetes control plane is running at https://localhost:43000
CoreDNS is running at https://localhost:43000/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://localhost:43000/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

@oruharo ➜ /workspaces/k8s-demo (main) $ kubectl get node
NAME                  STATUS   ROLES                  AGE  VERSION
k3d-my-k8s-server-0   Ready    control-plane,master   1m   v1.24.4+k3s1
k3d-my-k8s-agent-0    Ready    <none>                 1m   v1.24.4+k3s1
k3d-my-k8s-agent-1    Ready    <none>                 1m   v1.24.4+k3s1
```

# `Demoアプリ` ビルド＆デプロイ

ターミナルから`make install-k8s-viewer`を実行します。
gitレポジトリ上のDemoアプリをビルドして、k3d上のimageリポジトリにpushします。
```terminal
@oruharo ➜ /workspaces/k8s-demo (main) $ make install-k8s-viewer
      :
```



# `Demoアプリ` ブラウザで開く

ポート画面を開き、k3d-lb(15000)のローカルアドレスをブラウザで開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124599/0216c4d3-2165-39fe-575e-87e41a140308.png)

# `Demoアプリ` 実行

ターミナルから`make demo`を実行します。

```terminal
@oruharo ➜ /workspaces/k8s-demo (main) $ make demo
     :
```

ターミナル上でpodのデプロイコマンド等が順次実行され、Podの状態がデモ画面に反映されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124599/803a9384-ce4c-6938-109d-a13b034d9f93.png)


# 終わりに

時間切れで解説できてないです。。おいおい追記していきます。
実行しているコマンドの詳細はMakefileに書いてます。