【写経】Kubernetesのチュートリアルを擦る

## 1.はじめに
タイトルそのまま。
公式のチュートリアルの「Kubernetesの基本」をやったのでそのメモとかキャプチャです。
目新しいことは本記事ではやっておりませんのでご了承ください！

ちなみに私のKubernetesスキルはEKSって何？をふんわり説明できる程度です。
用語も設定手順も知りません。


## 2.Kubernetesとは
概ね認識通り。それを公式が明言しているのはとても良いことだなあ。

https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/


## 3.チュートリアルの前に
### 3-1.Kubernetesとは何か？
これはDockerの技術書でよく出てくるやつですな！

![スクリーンショット 2022-05-06 17.50.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/d7c6be54-8e42-690d-7fa6-29a65106d6c6.png)

## 3-2.Kubernetesのコンポーネント
この図めっちゃ大事。
書いてることはチュートリアルを進めるとわかってくるので今はわかんなくておk

![スクリーンショット 2022-05-06 17.52.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/4d13e32b-091f-e69a-3aaf-907a1bb0dd57.png)


## 4.チュートリアル開始
### 4-1.Kubernetesの基本を学ぶ
#### 4-2.クラスターの作成
バージョンとかステータス確認するコマンド叩いてk8sデビューを果たす。
無料。便利な時代だ。。Feedbackで褒め倒しておきました。

この時点ではまだコントロールプレーンとマスターはわかんない。

### 4-2.アプリケーションのデプロイ
#### 4-3.kubectlを使ったDeploymentの作成
コントロールプレーンの中にDeploymentがいて、インスタンスの作成・監視・コントロールしてくれるらしい。

![スクリーンショット 2022-05-05 11.47.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/86712a0c-5e2c-05a7-352c-0f66e78e9585.png)

kubectlを使ってDeploymentを作成・管理できる。
kubectlはKubernetes APIを使ってクラスターと対話する。
前段で出てきた対話するのはこれかな。


## 5-1.アプリケーションの探索
### 5-2.Podとノードについて

https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/explore/explore-intro/

Podはこれ。超わかりやすい。

![スクリーンショット 2022-05-06 12.25.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/d26f2603-104b-85b8-a090-f4ad9402636e.png)

ノード。わかりやすい。。

![スクリーンショット 2022-05-06 13.06.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/be34e46e-5833-080e-bdfe-bfe36ee3a79e.png)


## 6-2.アプリケーションの公開
### 6-3.Serviceを使ったアプリケーションの公開

https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/expose/expose-intro/

Hello Minikubeを先にやっておくとServiceが理解しやすい。

![スクリーンショット 2022-05-06 13.13.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/dd068a98-ef36-e7d1-6529-7ad902d70322.png)

Serviceはセレクターとラベルを使って一連のPodを照合する。

![スクリーンショット 2022-05-06 13.26.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/2b2f41f4-6fd4-bc7c-9609-62242804132a.png)


## 7-1.アプリケーションのスケーリング
### 7-2.アプリケーションの複数インスタンスを実行
スケール前

![スクリーンショット 2022-05-06 17.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/60d7dc4b-4f5c-9f06-b3cf-a9ec1937b89f.png)

スケール後
![スクリーンショット 2022-05-06 17.24.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/da404c11-b264-c869-c97e-b1d2723a4e15.png)

## 8-1.アプリケーションのアップデート
### 8-2.ローリングアップデートの実行
わかりやすい…！
確かにこういった段階的なデプロイって経験したことないな。しゅごい。

アップデート①

![スクリーンショット 2022-05-06 17.35.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/e81cbb5c-ff50-1ecd-8cf4-24458250e86f.png)

アップデート②

![スクリーンショット 2022-05-06 17.35.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/9ed2f2d9-ce93-96ef-3950-aa67e764e827.png)

アップデート③

![スクリーンショット 2022-05-06 17.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/d7b9da76-e9b1-a077-025f-99c22aca4ea5.png)

アップデート④

![スクリーンショット 2022-05-06 17.36.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/b6443eaa-f3c9-852c-08b1-64b530e76d32.png)


## 9-1.用語
迷ったら公式を読む。
https://kubernetes.io/ja/docs/reference/glossary/?fundamental=true

### Kubernetesクラスター
これ
![スクリーンショット 2022-05-04 21.40.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/bebebafb-228d-3e9c-8511-b53331f49b51.png)

### マスター
クラスターの管理をする。
ここまでの図では出てこなかったような。。？

### ノード
これがVMもしくは物理のコンテナかと

### kubelet
ノードに潜んでるKubernetesエージェント。
ノードを管理し、マスターと通信する。

### Kubernetes API
ノードはマスターが公開しているKubernetes APIを使用してマスターと通信する。
エンドユーザ（わい？）はKubernetes APIを使用してノードと対話できるとのこと。

### Pod
コンテナの管理や、ネットワーキングの目的でまとめられた、1つ以上のコンテナのグループ。
もしくは、
一番小さく一番シンプルなKubernetesのオブジェクト。
Podとはクラスターで動作しているいくつかのコンテナのまとまり。

後者のほうがわかりやすいかな！

### Service
Podの集合で実行されているアプリケーションをネットワークサービスとして公開する抽象的な方法。

### Deployment
Podの状態を確認し、Podのコンテナが停止した場合には再起動する。
DeploymentはPodの作成やスケールを管理するために推奨される方法(手段)。

### ラベル
ユーザーにとって意味があり関連性のある識別属性を、オブジェクトにタグ付けするもの。
Key:Valueである。

### セレクター
セレクターを利用すると、ユーザーはラベルに基づいてリソースのリストをフィルタリングできる。

### Ingress
Ingressはクラスター外からクラスター内ServiceへのHTTPS, HTTPのルートを管理・公開するAPIオブジェクト。
トラフィックのルーティングはIngressリソース上で定義されるルールによって制御される。
また、Ingressは負荷分散、SSL終端、名前ベースの仮装ホスティングの機能を提供する。

以下は全てのトラフィックを単一のServiceに送る単純なIngressの例。

![スクリーンショット 2022-05-07 16.59.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/21e73d14-acb5-0c86-d6d5-4a95022d60be.png)

また、Ingressの最小構成は以下の通り。公式より！

```yaml:service/networking/minimal-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80
```


## 10.使ったコマンド
そのうち役に立つかもしれない。メモる。

```

# Deploymentの作成
kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4

# Deploymentの確認
kubectl get deployments

# Podの確認
kubectl get pods

# クラスターイベントの確認
kubectl get events

# 設定の確認
kubectl view config

# Podをインターネットに公開する。exposeは公開するって意味
kubectl expose

# Serviceの確認
kubectl get services

```

## 11.おわりに
実務レベルとは程遠いですが、無知の状態を脱却できてよかった。
Podやクラスターとかの基本的な用語を理解できるだけでも十分価値のあるチュートリアルでした。
公式ありがとうな！次は実務だ！！

以上です。