バックオフィスの人でもわかる！k8sってなに？

# 背景
会社のイベントにてバックオフィスの人にk8sについて説明する機会があり、どのようにわかりやすく説明すれば良いのかChatGPTにも手伝って貰って記事にしてみました。

# Kubernetes（k8s）とは？

Kubernetes（k8s・クバネティス）は、アプリケーションを効率的に動かすためのツールです。
特に、多くのサーバーやコンピューターでアプリケーションを同時に動かすときに役立ちます。
```Kubernetesを船に例えると
Kubernetes は大きな船団（フリート）を管理する船の隊長のようなものです。
```

**Kubernetesの読み方**
- クバネティス、 クベルネテス、クバネテス、クーべネティス

**Kubernetesの語源**
- “Kubernetes”（希: κυβερνήτης、クベルネテス）は、ギリシャ語で航海長または水先案内人を意味し、サイバネティクス（人工頭脳学）の語源でもある。

<img width="150" alt="image.png (26.5 kB)" src="https://img.esa.io/uploads/production/attachments/20153/2024/05/14/30431/e169842e-d8d7-4300-8b7c-a83bb1542c65.png">

**Kubernetesの略称**
- Kubernetes のスペルが K と s の間に8文字あることから k8s 


## 具体的に何をするの？

**アプリケーションの管理**
Kubernetesはアプリケーションを自動で配置、スケーリング（必要なときに自動で数を増やす）、そしてメンテナンスします。

**コンテナ**
Kubernetesは「コンテナ」と呼ばれる軽量の仮想化技術を使います。
コンテナは、アプリケーションとその必要なすべてのものを一緒にまとめて動かします。
例えば、アプリケーションのコードや必要なライブラリなどです。
```Kubernetesを船に例えると
コンテナ（積荷）
コンテナは、船が運ぶ荷物や任務です。
例えば、コンテナにはアプリケーションのコードや必要なファイルが詰まっています。
```

## どうやって動くの？

**クラスター**
Kubernetesは複数のコンピューターを一つの「クラスター」として扱います。
クラスターは、マスター（制御用のコンピューター）とワーカー（実際にアプリケーションを動かすコンピューター）に分かれています。
```Kubernetesを船に例えると
クラスター
クラスターは船団全体です。
船団には旗艦（マスター）と複数の護衛艦（ワーカー）があります。

マスター（旗艦）
旗艦は船団全体を統括する船で、すべての指示を出します。
どの船がどの任務を担当するかを決めたり、各船の状態を監視したりします。

ワーカー（護衛艦）
護衛艦は実際に任務を遂行する船です。
旗艦の指示に従い、コンテナ（積荷）を運んだり、特定の作業を行います。

船団（クラスター）は、海の上を航行しながら、積荷（コンテナ）を効率よく運ぶために動きます。
旗艦（マスター）は、どの護衛艦（ワーカー）がどのコンテナ（積荷）を運ぶかを決めます。
各護衛艦（ワーカー）は、指示に従ってコンテナ（積荷）を運びます。
もし護衛艦（ワーカー）の一つが故障しても、他の護衛艦がすぐに代わりに動いて任務を続けます。
```


**ポッド**
Kubernetesは「ポッド」と呼ばれる単位でアプリケーションを動かします。
ポッドには一つ以上のコンテナが含まれます。
```Kubernetesを船に例えると
ポッド
ポッドは、船が運ぶ複数のコンテナをまとめたものです。
ポッドには、一つ以上のコンテナが入っていて、一つの作業単位として動きます。
```

**サービス**
サービスは、ポッドにアクセスするための方法を提供します。
例えば、ユーザーがWebアプリにアクセスするための入り口です。
```Kubernetesを船に例えると
サービス
サービスは、船がどこで積荷を降ろすか、あるいはどの港に行くかを決める指示書のようなものです。
これは、外部から船にアクセスするための窓口とも言えます。
```

**イメージ**
<img width="800" alt="image.png (1.6 MB)" src="https://img.esa.io/uploads/production/attachments/20153/2024/05/14/145542/32a39f89-21b8-467a-9cc5-712753807340.png">


## なぜ必要なの？

**スケーラビリティ**
たくさんのユーザーが一度にアプリケーションを使うときに、自動でサーバーの数を増やして対応できます。

**可用性**
サーバーに問題があっても、他のサーバーが自動で引き継いで動作を続けるので、アプリケーションが止まりません。

**効率的なリソース利用**
必要なときにだけリソース（コンピューターの性能）を使うので、無駄が少なくなります。


## レストランの厨房で例えると...

Kubernetesは、レストランのシェフのように、多くの料理（コンテナ）を効率的に管理し、注文に応じて適切な料理を提供し、問題が発生したらすぐに対応し、新しいメニューに少しずつ移行することで、レストラン全体がスムーズに運営されるようにします。

- **コンテナ：料理**

各料理（コンテナ）は、特定のレシピに従って調理された一つ一つの料理です。スパゲッティ、ピザ、サラダなどの料理がそれぞれコンテナに相当します。

- **アプリケーション：メニュー**

レストランのメニューには、さまざまな料理（コンテナ）がリストアップされています。このメニュー全体がアプリケーションに相当します。

- **Kubernetes：シェフ**

シェフ（Kubernetes）は、注文が入るたびに必要な料理（コンテナ）を作り、全体の調理プロセスを管理します。どの料理をいつ作るか、どの料理が不足しているかをシェフが判断し、必要な料理を適切に提供します。

##### 例えの詳細

**自動スケーリング：**
シェフは忙しい時間帯には追加のシェフ（サブシェフ）を呼んで料理を作る速度を上げ、注文が少ない時間帯にはシェフの数を減らして効率を保ちます。
これがKubernetesの自動スケーリングの機能に相当します。

**自己修復：**
もし料理に問題があれば（例えば、焦げた料理や間違った注文）、シェフはすぐに新しい料理を作り直します。
これはKubernetesの自己修復機能に似ています。

**ローリングアップデート：**
レストランのメニューが新しくなったときに、シェフは少しずつ新しいレシピに切り替えていきます。
すべての料理が新しいレシピに切り替わるまで、古いレシピを続けることで、突然の変更による混乱を避けます。
これがKubernetesのローリングアップデートの機能です。

<img width="800" alt="DALL·E 2024-05-14 16.41.32 - An illustration of a restaurant kitchen representing Kubernetes. The kitchen is bustling with activity, with a large cooking station in the center sur.webp (240.5 kB)" src="https://img.esa.io/uploads/production/attachments/20153/2024/05/14/145542/d1492d28-2908-4f8b-8fd8-25fd5e23582a.webp">


## まとめ
Kubernetesは、多くのアプリケーションを効率的に管理し、自動化するための強力なツールです。
これによって、アプリケーションが安定して動作し、新しいバージョンに簡単にアップデートすることができます。

これがKubernetesの基本的な考え方です。イメージがつかみやすくなったでしょうか？