Kubernetes完全ガイド 第2版の環境構築に行き詰ったときに読む記事


Kubernetes完全ガイド 第2版の環境構築が初学者には辛すぎたので書いてみました。

私自身もGCP+Kubernetesは経験3日くらいなので間違っている内容があればご指摘いただければと思います。

## 誰に向けてか？

・Kubernetes完全ガイド 第2版の環境構築に行き詰った人
・GCPでゾーンのリソース不足と何回も言われ時間を無駄にしている人
・GCP環境のコストが高くてつらい人
・Kubernetes完全ガイド 第2版の行間を埋めてほしい人
・Windowsの人（Mac, Linuxの人も核心部分は共通です）

https://amzn.to/49um0cZ

## 事前準備

### WindowsへのGoogle Cloud SDKのインストール

公式ガイドを参考にインストール
https://cloud.google.com/sdk/docs/install?hl=ja

#### gcloudコマンドでkubectlをインストール

手動でパスを通してもいいが不具合の基になりそうなので今回はgcloudコマンドからいきました。

```
gcloud components install kubectl
```

私の場合手動でパスを通していたので、既にインストールされてまっせと表示された、でもYでインストールしておいた。

```
┌──────────────────────────────────────────────────────────────────┐
│               These components will be installed.                │
├─────────────────────┬─────────────────────┬──────────────────────┤
│         Name        │       Version       │         Size         │
├─────────────────────┼─────────────────────┼──────────────────────┤
│ kubectl             │             1.26.15 │             74.2 MiB │
│ kubectl             │             1.26.15 │              < 1 MiB │
└─────────────────────┴─────────────────────┴──────────────────────┘
```

インストール後、Dockerもkubectl持っててパスあるみたいなんやが・・・
みたいな注意が出た。
自分の環境はとりあえずkubectlのマイナーバージョンの範囲内なので動いた。
いざとなればどうにかしてバージョンをそろえようと思う。

ソース
https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl?hl=ja#install_kubectl

#### （オプション）手動でkubectlをインストール

gcloudコマンドで失敗する場合、手動でパスを通してください。

公式ガイドを参考にインストール
https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/

Windows環境で手動でパスを通す必要がある場合、以下を参考に通す

パスを通す方法
https://qiita.com/shuhey/items/7ee0d25f14a997c9e285

### Cloud SDKの初期化（初期設定）

初期化方法
https://cloud.google.com/sdk/docs/initializing?hl=ja

これでGCPへのログインと、プロジェクトの作成まで済ませましょう。

プロジェクト名は適当+その日の日付とかで大丈夫です。

### Kubernetes Engine APIを有効化

初期化時に作成？したプロジェクトにアクセスして、
Kubernetes Engine APIを有効化する。
有効化していないとクラスタ作成時に、有効化のためのURLつきで怒られる。

別にそこから有効化してもいいのですが、コンソールから有効化しておくこともできます。
有効化には2分くらいかかります。

左上のハンバーガーメニューからKubernetes Engineを押すと有効化するボタンが出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2636207/fa82f562-4632-0465-413e-490488d6f6a9.png)

## GCPでの環境構築

詰まるポイントは2点
・書籍で指定している「--cluster-version 1.16.8-gke.15」はもう存在しない
・asia-northeastゾーンがどこもパンパン（2日くらい起動できなかった）

なので、
・「--cluster-version 1.16.8-gke.15」はデフォルトの安定版で代用。
（安定板は「--cluster-version 1.16.8-gke.15」を消せば勝手に選択される）
・asia-northeastの各ゾーンに並行でコマンドを実行して成功した奴だけを使用。
という強引な対策をした。

### 並行実行するためのbatファイルを作成

単にメモ帳にコマンドを書いて、拡張子をbatにしてコマンドプロンプトで実行するだけ。

```
gcloud container clusters create k8s ^
--zone asia-northeast1-a	 ^
--num-nodes 3 ^
--machine-type n1-standard-4 ^
--enable-network-policy ^
--enable-vertical-pod-autoscaling
```

ここから更に、
--zone asia-northeast1-aの部分の末尾を1-b,1-c,2-a,2-b,2-cに変えたファイルをさらに作成する。

<details><summry>6つ一気に実行する方法</summry>
6つのコマンドプロンプトをいちいち開いて実行し続けてもいいのですが、大変めんどくさいので、いっぺんに実行するためのbatも作成。

以下のコードでbatを作成し、実行すれば1度に6つ実行できる。
（ファイル名は自分のモノに変更し、カレントディレクトリで実行してください。）
やっていることはカレントディレクトリのバッチファイルを実行しているだけです。
```
start cmd.exe /k k8s1-a.bat
start cmd.exe /k k8s1-b.bat
start cmd.exe /k k8s1-c.bat
start cmd.exe /k k8s2-a.bat
start cmd.exe /k k8s2-b.bat
start cmd.exe /k k8s2-c.bat

echo All batch files have been started.
pause
```
</details>


なぜかというと、クラスタの作成にリソース不足で失敗すると30分近く平気でエラーすら返さず実行が続く（おまけに30分後作れなかったわ！で済まされる）。

なのでもう6つのゾーンにクラスタの作成を依頼してしまい、成功した奴を1つだけ残すことにした。

たぶんN1が旧世代のマシンだからかあいてないんだと思います。

#### GCPでクラスタ組むと高い

書籍の構成だと2024/4/12時点で1日で2~3000円飛びます。

使わない時は消しておきましょう。

私は無料クレジットがあるうちは、Compute Engineのマシンを一時停止して節約した状態で動かしっぱにしました。
（それでも2000円程度かかっているようなので、確実に請求を止めたいなら毎回使い終わったら消しておいた方がいいです）

以下は、GCEのVMを一時停止してコスト削減する方法です。

<details><summary>コスト削減方法</summary>

#### コスト削減①GKEの自動復旧を無効化

自動復旧がオンになっていると、Compute Engineを一時停止しても勝手に復旧されてしまう。
下記のコマンドでオフにする

```
gcloud container node-pools update プール名 ^
    --cluster クラスタ名 ^
    --zone=利用しているゾーン ^
    --no-enable-autorepair
```

#### コスト削減①GCEの自動復旧を無効化

GKEの方を無効化するだけでなく、GCEのインスタンスグループのVM インスタンスのライフサイクルも設定する必要があります。

ComputeEngine→インスタンスグループ→インスタンスグループ選択→EDITでいけます。

「アクションなし」に設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2636207/d748e7cd-9f53-2c65-41e1-81f94ffab5df.png)


**自動復旧の動作を試したいときは有効化するのを忘れないよう注意**

</details>

#### 環境構築後

コマンドプロンプトに、認証の為にこれやってね、みたいなやつがでます。
（ログを残しておきたかったのですが、認証後は再発生しませんでした）

### プラグインのインストール

ソース
https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl?hl=ja#install_plugin

クラスタ作成後に、認証プラグインを入れるように求められるので入れる。

```
gcloud container clusters get-credentials k8s ^
--zone=asia-northeast1-c
```

（--zone部分は自分が指定したゾーンに書き換える。
^はWindowsコマンドプロンプトで改行するために入力。）

### 完成

これ以降は書籍P59～のチュートリアルが行えるはず！

間違いがあったらごめんなさい！！