【GCP】GKEでロードバランサーサービスをデプロイ、スケールを試し

## このガイドについて
Kubernetesは
- クバネティス/クバネテス/クーべネティス、K8sと略記されます
- IaaSサービスと似てる、PaaSサービスにも似ています
- コンテナを管理するサービス

今回、GKEを使ってみよう。まずGCP Consoleで必要なAPIが有効であることを確認します
そこから、GKEクラスタを作成してそこにLoadBalancer Serviceをデプロイします、次にServiceをスケールします
始めましょう。。。
## [ノードの自動修復](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair)
以前実行、サービス一覧
`kubectl get services` or `kubectl get svc`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/7e3dee99-69b0-b9b6-2b78-29ed74c0542c.png)

目的のゾーンで Kubernetesクラスタを起動します
`gcloud container clusters create webfrontend --zone us-central1-a --num-nodes 2`
「--num-nodes 2」とはクラスタは２つのノードからなり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/52e4ad54-17c6-c9ea-eff1-05f8e623becc.png)

コンソルでクラスタとノードが作成された確認できます。
**Clusters**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/a0908aa2-3578-06c4-b58e-0b5490141363.png)

**Nodes**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/00fa7f96-eac8-8461-58c4-e6137f41ea72.png)

**Pods**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/6e105b47-8c31-4b14-b752-8545695b2acc.png)

サービス作成された確認します
`kubectl get services`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/387fecbd-5ddf-0f28-5d0f-ca4a97f73e32.png)

## デプロイメント
クラスタで「nginx」ウェブサーバー実行します（K8s Deploymentというものを作成します ）
`kubectl run nginx --image=nginx:1.10.0`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/6e111030-a263-e147-f268-f6c778513a1c.png)

:spy_tone1: K8sは勝手に空いてるPodを選びます。（だからロードバランサータイプだよね X.X）
このDeploymentは１つのポッドからなり、ポッドは実行されている確認します
`kubectl get pods`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/db1eb468-4028-9bf8-eac9-3769fc19b0da.png)

## スケール
Kubernetesの外部のクライアントがアクセスできるようにこのDeploymentを公開します
`kubectl expose deployment nginx --port 80 --type LoadBalancer`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/5a265927-32b0-83c7-36b9-60421fca86f8.png)

**「nginx」という「LoadBalancer Service」**を作成します、サービスは提供している確認します
外部IPアドレス（EXTERNAL-IP）の割り当されるまで、ちょっと時間がかかります
`kubectl get services` 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/acab37f6-6209-8096-7d57-d7cbf1635b7d.png)

Deployment内部で実行中の「Nginx」ウェブサーバーにインターネットからアクセスできる外部IPアドレス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/617f3501-6ec7-ae57-65cf-28b193435c36.png)

**負荷が増加**した場合、Deploymentを**スケールアップ**します
`kubectl scale deployment nginx --replicas 3`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/cdf00dca-eabc-547f-6209-511e34c7e3f0.png)

更新後のポッド数を確認します
`kubectl get pods`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/3ba94539-ea37-9629-09fb-ae93802488a3.png)

また、`kubectl get services`のコマンドを実行して「Nginx」ホームページを再ロードして、外部IPアドレスが変わっていなくてウェブサーバーDeploymentが引き続き機能することが分かります。

## おめでとうございます！
**使うコマンドを集めます**
`kubectl version`
`export MY_ZONE=[choose-zone]`
`gcloud container clusters create webfrontend --zone $MY_ZONE --num-nodes [number-nodes]`
`kubectl get services`
`kubectl run nginx --image=nginx:1.10.0`
`kubectl get pods`
`kubectl expose deployment nginx --port 80 --type LoadBalancer`
*Note: サービスtypeは外部クラウド、[Kubernetes](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)の支援するサービスタイプです*
`kubectl scale deployment nginx --replicas [number-pods]`
更に、
サービス削除：`kubectl delete svc/nginx`
Deployされたリスト：`kubectl get deployments`

**関連サイト**
[Kubernetesさん](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/)
[Kubernetes学習するKatacodaさん](https://www.katacoda.com/learn)

では、又ね！！！