Docker Desktop インストール (Docker for Windows (with WSL2) / Docker for Mac), Kubernetes 有効化, Docker / Kubernetes テスト実行

## はじめに
Docker / Kubernetes の開発・試験環境として手元 PC に簡易に用意できる Docker Desktop がある

ゼロ準備で Docker / Kuberenetes をスタートし、軽い動作確認までできるように、
Docker Desktop の下記方法を主にまとめる

 - Docker ID 取得方法
 - Docker Desktop の Windows / Mac 両 OS のインストール方法
    - Windows は、**WSL2**, **Hyper-V有効化不要**でインストールする
 - Kubernetes 有効化の方法
 - Docker テスト実行
    - Nginx コンテナを起動してブラウザアクセスする
    - Docker Desktop Dashboard 操作概要
 - Kubernetes テスト実行
    - Nginx コンテナの Pod と外部向け Service(NodePort) を構築してブラウザアクセスする
    - レプリカの手動スケールアウト、オートヒーリング

## Docker Desktop

https://www.docker.com/products/docker-desktop

- Docker 社が提供している Desktop 環境で Docker を利用できる環境
- 無償で利用できる
- インストーラが優秀で Docker 構築が**デスクトップ上に簡単に構築できる**
- DockerCon EU 17 で Docker for Mac での Kubernetes サポートが発表され、ローカルマシン上でも Docker Desktop の機能有効化をするだけで、 **Kubernetes が起動できる**ようになった (のちに Docker for Windows でも対応)

### Docker for Windows

 - 従来は Hyper-V が機能の有効化が必要(Pro以上の機能)だったが、**WSL2** を使用することで不要でも可能になった
 - Hyper-V が不要のため **Home でもインストールが可能** (Home は Hyper-V 有効化利用不可)のはず
 

#### システム要件
 [公式サイト](https://docs.docker.com/docker-for-windows/)抜粋. WSL2 で実施の場合は Hyper-V は有効化不要.

 - Windows 10 64-bit: Pro, Enterprise, or Education (Build 15063 or later).
 - Hyper-V and Containers Windows features must be enabled.
 - The following hardware prerequisites are required to successfully run Client Hyper-V on Windows 10:
    - 64 bit processor with Second Level Address Translation (SLAT)
    - 4GB system RAM
    - BIOS-level hardware virtualization support must be enabled in the BIOS settings. For more information, see Virtualization.

公式ドキュメント: https://docs.docker.com/docker-for-windows/

今回は、Hyper-V不要の手順を試すため、Windows 10 を Version 2004 までアップデートする

### Docker for Mac

#### システム要件

[公式サイト](https://docs.docker.com/docker-for-mac/install/#system-requirements)抜粋. 2010年以降のモデルで、OS を Update していれば大体入れること可能.

- Mac hardware must be a 2010 or a newer model
- macOS must be version 10.13 or newer
- At least 4 GB of RAM.
- VirtualBox prior to version 4.3.30 must not be installed as it is not compatible with Docker Desktop.

公式ドキュメント: https://docs.docker.com/docker-for-mac/

## 実行端末スペック
### Windows
 - Surface Go
 - OS: Windows10 Pro **Version 2004**
 - プロセッサ: Intel Pentium Gold 4415Y (1.65GHz 2コア4スレッド)
 - メモリ: 4GB

### Mac
 - MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
 - OS: macOS Catalina Version 10.15.4
 - プロセッサ：3.1 GHz デュアルコアIntel Core i5
 - メモリ：16 GB 2133 MHz LPDDR3

### Docker Desktop インストールバージョン

インストールバージョンは **2.3.0.3(45519)** (2020.05.30時点最新)

インストールした各バージョンは下記の通り
![docker_for_desktop_version.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1e740d8b-c113-1ca0-e707-a16734dcf036.png)

## インストールステップ
1. Docker アカウント作成
2. Docker Desktop インストール
    1. Docker for Windows インストール
    2. Docker for Mac インストール
3. Kubernetes 有効化

「1.Docker アカウントの作成」は、インストール時は使用しないが、
今後のイメージアップロードなどに備えて取得方法を記載しておく。**実行したいだけならスキップ可能**

インストール後に、docker と Kubernetes のテスト実行も記載する。

## 1. Docker アカウント作成
Docker Hub のトップページへアクセスしてアカウントを作成する
トップページ： https://hub.docker.com/

下記画面の通り必要事項を入力して **Sign Up** する
![スクリーンショット 2020-05-30 14.35.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/dc687a36-1bcc-8d79-0f0e-6d007cd4ddfe.png)

プラン選択画面になるので、無料で利用したい場合は、Free プラン **Continue with Free** をクリックする。
![スクリーンショット 2020-05-30 14.08.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/772798bc-98fb-24ef-3e8d-523886e5d3a8.png)

プラン選択が終わると、下記画面に遷移して、Verify メールが飛ぶ

![スクリーンショット 2020-05-30 14.09.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/c50084be-bf27-e57a-7128-e7fcc07a6496.png)

Verify メールが登録した Email アドレスへ来るので、受信メールを確認し、**Verify email address** をクリックする。

![スクリーンショット 2020-05-30 14.11.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/dda15531-2b8b-24d0-0e6f-4be1dffb6888.png)

下記ページが開いて Docker Hub ID 作成が完了

![スクリーンショット 2020-05-30 14.12.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9c45eb60-e82a-db33-c536-eebf05063218.png)

以上で、**アカウント作成完了**

## 2. Docker Desktop インストール
Docker Desktop のインストール方法を、OS 別に記載する

## 2.1. Docker for Windows インストール

Windows 10 で実施する場合は下記のステップで実行する。

1. Windows 10 Update
2. WSL2 有効化
3. Docker Desktop for Windows をインストール

※今回は Hyper-V 不要でも対応できる方法を記載したかったので、上記方法を使用しているが、Windows 10 Pro で Hyper-V を有効化できる環境ではアップデートせずに Hyper-V 有効化してインストールも可能

### 2.1.1 Windows 10 Update
Windows 10 は Version 2004 (2020.05.27リリース) で、
WSL2 が正式リリースされ、Hyper-V 無しでも Linux バイナリがネイティブに動作できるようになった

Windows Update の方法は、通常の Update を利用するか、更新アシスタントを利用して実施する。
(2020.05.30時点で、バグがあったせいで OS 直接の Update が止まっていたので、更新アシスタントを使用して Update した)

すでに Version が 2004 以降であれば実施不要。

更新アシスタントは下記ページからダウンロードして実行すると、アップデート可能。

https://www.microsoft.com/ja-jp/software-download/windows10

![windows_update.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/e33b30c0-98d4-c831-3641-49d9d4713b41.png)

ダウンロード完了したら実行。

![windows_update2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/df5bb15b-a84d-c94b-425c-f3f14932366f.png)


アップデート完了後の状態例は下記。(バージョンが**2004**になっている.2004以降ならOK)

![仕様.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/79a3187d-3f9e-059d-97e0-f83a8b0fa395.png)


### 2.1.2 WSL2 有効化


[公式ドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)にインストール方法が記載されている。
管理者として PowerShell を開いて、下記の3コマンド実施,間に一度再起動すれば良い。

PowerShell を管理者として実行 (「Windows メニュー」→「Windows PowerShell」→右クリックでメニュー開き「管理者として実行」

#### 2.1.2.1 PowerShell の起動. WSL, VirtualMachinePlatform有効化. 再起動
![PowerShell管理者として実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/aa1306ff-1682-4576-c955-ed0623b36bb8.png)


Windows Subsystem for Linux のインストール


```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

仮想マシン プラットフォーム のオプションコンポートネント有効化

```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

**Windows を再起動**します。

#### 2.1.2.2 カーネル更新
x64 マシン用の最新の WSL2 Linux カーネルパッケージをダウンロードして実行する([参考](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel))

・下記ダウンロード URL. 下記をクリックしてダウンロードして実行し、更新する。
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

#### 2.1.2.3 WSL 2 をデフォルト設定

下記コマンドで、WSL のデフォルトバージョンを 2 に指定する

```
wsl --set-default-version 2
```

以上で、**WSL 2 有効化完了**

### 2.1.3 Docker for Windows のインストール
#### 2.1.3.1 ダウンロード
Docker ID を持っていれば下記で取得も可能(チュートリアルも色々あり、この通りに実行してみるの良い)
https://hub.docker.com/?overlay=onboarding

![windows_tutorial1___.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/141e7aa0-2eef-6dc0-3d7d-564cb0d082b8.png)


今回は、下記で取得する (上のダウンロードと落とせるのは同じ)
https://hub.docker.com/editions/community/docker-ce-desktop-windows

![スクリーンショット 2020-05-30 22.08.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1c87749a-4e6a-25f5-fbd5-318e0c6e882e.png)

#### 2.1.3.2 インスール

2.1.3.1 でダウンロードしてきた「Docker Desktop installer.exe」を開く

![dockerforwindosinstall__.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/7ee79805-fa4a-4ff7-73eb-048f58f1eefc.png)


Configuration が出るので、下記の通りデフォルトのチェック状態(どちらもチェック)のまま OK する

![dockerforwindosinstall2_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/4e8b25b9-5b01-c795-5a42-2669650dc7c0.png)

**下記操作でログアウトとなるので注意**
インストールが完了すると Installtion succeeded となるので、Close and log out をクリックする

![dockerforwindosinstall3_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/c1ef9761-87db-f584-480e-ae9a84da4541.png)

ログアウトするので、ログインし直すと、Docker が起動し始めてる
Docker の起動状況は下記のように確認できる

起動中 (Docker is starting)
![dockerstating.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5d580d18-1b14-5897-11f8-3e12e3e9eb17.png)


起動完了 (Docker Desktop is running)
![dockerrunning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a131932c-90e3-58f1-4a29-db0ef6975320.png)

PowerShell で >`docker version` を入力すると、docker コマンドが使え下記が表示できることが確認できる。

![dockerversion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/59d10a80-9568-3cc1-6b47-7d6a3da15c97.png)

Docker Desktop の Dashboard は　Docker アイコン右クリックから Dashboard で開ける

![docker_dashboard__.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/50cac801-2f3d-674b-f3fa-afdc48c54cb8.png)

Dashboard が開けると下記のような画面が出る

![docker_dashboard2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/994d2f5c-b95e-2b38-eb6c-c27593c4b04c.png)


以上で、Docker for Windows の**インストール完了**

## 2.2. Docker for Mac インストール

下記でダウンロード可能。
https://hub.docker.com/editions/community/docker-ce-desktop-mac

![スクリーンショット 2020-05-30 23.26.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/f81fc87d-ec2f-e02c-6bf2-4196bf0eadba.png)

ダウンロードした「Docker.dmg」を起動

起動すると、下記画面が出るので、画面通りドラッグ&ドロップする。

![DockerForMacInstall.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/d418d89a-2dfb-213e-c172-f8da086b7f59.gif)

Finder でアプリケーションを開いて、Docker を開く (Docker起動)

![スクリーンショット 2020-05-31 0.04.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/3330cd14-3dec-5b6b-ef21-8fb8bca21d1d.png)

上記で起動すると、メニューバーに Dokcer アイコンが出て起動が確認できる

![スクリーンショット 2020-05-31 0.07.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/844c6a0c-9d0e-f250-a3af-6805d365d358.png)

Docker アイコンをクリックすると状態やメニューが確認できる

![スクリーンショット 2020-05-31 0.10.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1d73430f-8bb7-9fd4-fd7b-ef6953fd40f3.png)

**Docker Desktop is running**となっていれば起動完了

Docker Desktop の Dashboard は同じくメニューの Dashboard で開くことが可能

![スクリーンショット 2020-05-31 0.26.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/816d8e14-f770-1085-e346-07003bc114e2.png)

Dashboard が起動すると下記画面が出る

![スクリーンショット 2020-05-31 0.29.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/b8010df7-9e18-32d7-e4ba-3696404b9d9c.png)


ターミナルソフトで `docker version` を実施した例は下記の通り。(dockerコマンドが利用可能になっている)

![スクリーンショット 2020-05-31 0.15.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1d8ac718-0d00-44c2-061e-177ea7ac3d65.png)

以上で、Docker for Mac の**インストール完了**


### 3. Kubernetes 有効化 (Windows/Mac 共通)

Dashboard を開いて、右上の歯車マークから設定を開く

![docker_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a78f6326-c3a3-0d9b-7086-57a2fdcb4bfe.png)


設定の Kubernetes 項目を選択して、**Enable Kubernetes** をチェックして**Apply & Restart** をクリックして起動する

![k8s_enable2_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/ec4f4f35-d796-fcbf-bb2e-ddb8e45fd8db.png)

Kubernetes が Start する。(Dashboard の下の方を見ると起動中。起動完了がわかる)

起動中 (starting)
![k8s_enable3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/6c005d30-2086-324c-3fc3-31611b2aad51.png)

起動完了 (running)
![k8s_enable4_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/0ad29cbe-8c6a-1b8c-bfd4-061318a64013.png)

Kubernetes が有効化され、kubectl が CLI (PowerShell(Windows), Terminal(Mac)) で使えるようになっている。
下記は CLI で `kubectl version` , `kubectl get node`, `kubectl get pod --all-namespaces` などを入力して起動していることを確認している例。

**Windows PowerShell での実行例**
![k8s_enable_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/8482e5e0-7ef6-ee6d-223e-6338bbf12a2b.png)

**Mac Terminal での実行例**
![スクリーンショット 2020-05-31 0.37.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/7e0838be-d228-5510-e14b-8462552db596.png)

以上で、 **Kubernetes 有効化完了**

## Docker テスト実行

Docker でのコンテナ実行例として Nginx の web サーバをコンテナ起動・操作する。

```
$ docker run -d -p 8080:80 --name webserver nginx
```

コンテナ起動での表示結果は下記. (OS にかかわらず同じ)

**Windows での実行例**
![dockerrun.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/8804c3ca-29ab-37e4-ddf0-2449ed659d0a.png)


**Macでの実行例**
![スクリーンショット 2020-05-31 5.03.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/c59b66bc-c543-a6aa-0f0e-29b819125ab1.png)



ブラウザにて localhost ポート 8080 でアクセスする
http://localhost:8080

![スクリーンショット 2020-05-31 5.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9ac404c8-b1f2-db62-52da-382a77c306d2.png)

### Dashboard による操作
Docker Desktop の Dashboard はコンテナに対する様々な操作・確認ができる。
起動した Nginx コンテナを例に、下記に Dashboard による操作例を記載する

例で実行している webserver コンテナは下記のようにダッシュボードに表示される

![スクリーンショット 2020-05-31 6.57.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/66fecbcc-5de1-9a4b-59f3-e1726988f63c.png)

対象のコンテナにマウスカーソルを合わせるとコンテナに対するメニューが出る
メニューアイコンごとに内容を記載していく

#### OPEN IN BROWSER
一番左の「OPEN IN BROWSER」 (コンテナが web サービスの場合) をクリックすると、
ブラウザが自動で開いてコンテナのサービスが表示される

![スクリーンショット 2020-05-31 6.58.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5ae72b9a-c994-cf26-e86d-0b0c3a3cd735.png)

クリックすると下記の通り自動でブラウザが開き表示される

![スクリーンショット 2020-05-31 5.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9ac404c8-b1f2-db62-52da-382a77c306d2.png)

#### CLI
左から2番目の CLI (>-) をクリックすると、ターミナルソフトが起動し、
コンテナ内部へアクセスできる
(コマンドで言うと、`docker exec -it [container id] /bin/sh; exit`と同じ)

![スクリーンショット 2020-05-31 6.59.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/890d0eb5-bd7f-73cb-1132-76211f90717e.png)

クリックすると下記の通り自動でターミナルが開きコンテナ内部のシェルにアクセスできる

![スクリーンショット 2020-05-31 7.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5614d71b-4e1e-8e7c-0de7-faa849efa612.png)

#### STOP / START / RESTART / DELETE
左から3番目の **STOP** をクリックすると、コンテナを停止できる

![スクリーンショット 2020-05-31 6.59.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/2cc84ea0-2e1d-5cb9-000f-820fd4475fe0.png)

停止すると下記の状態になり、**START** を押すことで、再度コンテナを再開できる

![スクリーンショット 2020-05-31 7.02.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1526d930-5bf5-c8a5-6d7f-b407e02cc1a4.png)

左から4番目の **RESTART** を押すと、コンテナを再起動できる

![スクリーンショット 2020-05-31 7.00.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/7857ccb8-c022-d47b-a8ca-79b31d1da322.png)

最後に、一番右の **DELETE** を押すと、コンテナを削除できる (**Dashboard からも削除される**)

![スクリーンショット 2020-05-31 7.00.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a9a41805-232e-8828-0daf-4f4925f212ef.png)

削除の場合は、確認画面が表示されるので、Removeを再度クリックして削除する

![スクリーンショット 2020-05-31 7.02.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/157627a2-7521-b786-0501-e4b803d6762a.png)

### Logs / Inspect / Stats
メニューアイコン以外の箇所をクリックすると、対象コンテナの詳細をみることができる

![スクリーンショット 2020-05-31 7.22.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/dd55b418-15bc-9661-ba7c-c6e7df01a4e9.png)

Logs をクリックするとコンテナのログを表示できる (ここでは Nginx の Web アクセスログが見えている)
![スクリーンショット 2020-05-31 7.20.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/97cc3811-9f18-6d2d-6dd0-5e72b181ff8b.png)

Inspect をクリックするとコンテナの実行パスやバージョン、外部ポートなどを表示できる
![スクリーンショット 2020-05-31 7.20.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/b3599586-8cdb-8db3-bd3f-3085680c2eb1.png)

Stats をクリックすると CPU / Memory / DISK / NETWORK (I/O) の使用率が表示できる
![スクリーンショット 2020-05-31 7.21.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/140150be-d019-fae7-2a7c-cdbd5beecb7d.png)

以上、Dashboard 操作によるコンテナの基本操作例となり、
コンテナの確認や操作などがダッシュボードでコマンド無しでもある程度管理可能なことが確認できた

## Kubernetes テスト実行
Kubernetes でのアプリケーション実行例として Docker と同じく Nginx の web サーバ構築を実施する
3つのテストを実施する

 1. Nginx Web サーバ構築
 2. Nginx サーバのレプリカ数の変更
 3. Nginx サーバのレプリカを 1 つ削除しオートヒーリング

### 1. Nginx Web サーバ構築

Kubernetes はマニフェストと呼ばれる Yaml ファイルで、コードによるリソース作成・管理ができる
テストで使用する Nginx のマニフェスト (Yaml) 例を下記に記載する

```nginx-deploy-nodeport.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample-nginx
  template:
    metadata:
      labels:
        app: sample-nginx
    spec:
      containers:
      - name: webserver
        image: nginx:latest
        ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: sample-nodeport
spec:
  type: NodePort
  ports:
    - name: "http-port"
      protocol: "TCP"
      port: 8080
      targetPort: 80
      nodePort: 30080
  selector:
    app: sample-nginx
```

上記ファイル (Yaml) を下記コマンド (kubectl apply -f) で実行する

```
> kubectl apply -f nginx-deploy-nodeport.yaml
```

実行すると下記のように表示される

**Windows**
![win_kubectl_apply.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/28af13c9-d45f-1431-8dd4-a22c975df98a.png)


**Mac**
![スクリーンショット 2020-05-31 7.57.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/94090856-6f51-15bb-9314-3c8fb34f02f2.png)


上記も同じだが、以下からも結果は同じのため OS 別表示は省略する

ブラウザで下記 URL にアクセスすると Kubernetes で構築した Pod へ Nodeport 経由で外部からアクセスができる
※ Nodeport は作成した Kubernetes サービスに外部からアクセスする方法のひとつ

http://localhost:30080

![スクリーンショット 2020-05-31 7.48.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1eb11354-d147-2b2b-219f-bd4bcefb1662.png)

Pods の状態は `kubectl get pods`,
Deployment の状態は `kubectl get deployment`
Service の状態は `kubectl get service`,
で確認した例が下記の通り。

![スクリーンショット 2020-05-31 7.51.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/7a3c4f79-e9ad-f455-e0b3-ecf933d9c537.png)

Pod が `webserver-986476f4c-5ccsf` と言う名前が付与され `Running` となっており、
Deployment は `webserver` として `1/1 READY` でレプリカ数1で作成・維持されており、
Service は `TYPE:NodePort` で 外部向けポートは `30080` で提供していることがわかる

最後に、作成したリソースを削除する。
削除には `kubectl delete -f` で作成時ど同じ Yaml を指定すればよい

```
> kubectl delete -f nginx-deply-nodeport.yaml
```

![スクリーンショット 2020-05-31 7.56.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/71867f5c-edda-fce8-9ed3-61d1a7b2e0ba.png)

実行すると、作成されていたリソースが削除できていることが確認できる

### 2. Nginx サーバのレプリカ数の変更

1で利用したマニフェストをもう一度 kubectl apply して起動する

```
kubectl apply -f nginx-deploy-nodeport.yaml
```

変更前の状態を `kubectl get pod` で Pod の状態と、
`kubectl get deployment` でdeployment の状態 (1/1) であることを確認する

```
% kubectl get pod                             
NAME                        READY   STATUS    RESTARTS   AGE
webserver-986476f4c-gwqmz   1/1     Running   0          59m
% kubectl get deployment                     
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
webserver   1/1     1            1           7h27m
```

レプリカ数を変更する(ここでは 1 -> 3)
マニフェストの `replicas: 1` を、`replicas: 3` に書き換える
※下記は書き換え前の old との比較. repolicas の数だけ変更すればよい

```
% diff nginx-deploy-nodeport.yaml nginx-deploy-nodeport.yaml.old
7c7
<   replicas: 1
---
>   replicas: 3
```

再度 kubectl apply する

```
kubectl apply -f nginx-deploy-nodeport.yaml
```

再度事前のものと同じ確認をして、`webserver-xxx`(xxxは環境により異なる) の Pod が 3つに増えたこと、
deployment が **3/3** になったことを確認できる

```
% kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
webserver-986476f4c-gwqmz   1/1     Running   0          60m
webserver-986476f4c-j458r   1/1     Running   0          13s
webserver-986476f4c-znlft   1/1     Running   0          13s
% kubectl get deployment                     
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
webserver   3/3     3            3           7h28m
```

下記実行状況の確認例(gif)。自動で Pod が徐々に生成され、レプリカ数が 3 に変更されたことが見える

![repolica_test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/d94f33fa-7419-03a7-73e1-3b4859e7f851.gif)

### 3. Nginx サーバのレプリカを 1 つ削除しオートヒーリング

作成されている Pod を 1 つ試しに手動削除して、3/3へオートヒーリングすることを確認する

```
kubectl delete pod [Pod NAME]
```

今回のテストでは、下記コマンドで削除し、表示された例を下記に示す

```
% kubectl delete pod webserver-986476f4c-znlft
pod "webserver-986476f4c-znlft" deleted
```

`kubectl get pod`, `kubectl get deployment` で確認すると、
別の NAME で新規の `webserver-xxx`(xxxは状況による) が作成され、3つになっていることがわかる

```
% kubectl get pod                              
NAME                        READY   STATUS    RESTARTS   AGE
webserver-986476f4c-bmkfx   1/1     Running   0          47s
webserver-986476f4c-gwqmz   1/1     Running   0          67m
webserver-986476f4c-j458r   1/1     Running   0          7m17s
% kubectl get deployment                      
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
webserver   3/3     3            3           7h35m
```

下記実行状況の確認例。Pod の手動削除後、自動で別のwebserver pod が作成され、
一時的に 2/3 に減ったレプリカが 3/3 にオートヒーリングされたことがわかる

![delete_tests.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/06459493-fd1c-667d-11aa-9db14ea93149.gif)



最後に、テストに使用したリソースを削除しておわりにする

```
kubectl delete -f nginx-deploy-nodeport.yaml
```


以上で、**Kubernetes の Nginx を使ったテストは完了**

## おわりに
Docker Desktop のインストールから Docker / Kubernetes の Nginx での簡単な実行例を記載した

手元で簡単に Docker / Kubernetes 実行環境の準備ができ、開発・試験にはもってこいだと思う

複数ノードでのクラスタを組んだ環境を、手元で作成したい場合は、[kubespray での kubernetes クラスタ構築メモ](https://qiita.com/suzuyui/items/e7531fe5e1e84c061b23)を参照してください