100日後にエンジニアになるキミ - 99日目 - 開発環境 - Kubernetesについて

昨日までのはこちら

[100日後にエンジニアになるキミ - 95日目 - 開発環境 - Docker について](https://qiita.com/otupy/items/4569ffc8a1bd90bcd0b9)

[100日後にエンジニアになるキミ - 94日目 - 開発環境 - 仮想化について](https://qiita.com/otupy/items/0b8db399900a5517eb97)

[100日後にエンジニアになるキミ - 91日目 - 運用 - 監視について](https://qiita.com/otupy/items/532d0f78b103d3b39b2d)

[100日後にエンジニアになるキミ - 90日目 - 開発 - CIについて](https://qiita.com/otupy/items/25786feaaa1b1f4d203f)

[100日後にエンジニアになるキミ - 88日目 - データ - データ転送について](https://qiita.com/otupy/items/e720e175c83a84e101c9)

[100日後にエンジニアになるキミ - 86日目 - データベース - Hadoopについて](https://qiita.com/otupy/items/0016a1b9f496627619b6)

[100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について](https://qiita.com/otupy/items/6a4f960ba4df06e27050)

[100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて](https://qiita.com/otupy/items/f53e2e7d16adf80b5acf)

[100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について](https://qiita.com/otupy/items/5828ac7450c5ba8d6931)

[100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1](https://qiita.com/otupy/items/0196897ae4d2134794fa)

[100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて](https://qiita.com/otupy/items/f1a5e81633b868f3b5ed)

[100日後にエンジニアになるキミ - 53日目 - Git - Gitについて](https://qiita.com/otupy/items/0abaad82a7f3fea73f1f)

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

本日は`Kubernetes`についてです。

## Kubernetesについて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/1ec983e5-9053-5f41-b609-d7352dd2cdb2.png)


公式などの説明だと、コンテナ化したアプリケーションのデプロイ、スケーリング
および管理を行うための、オープンソースのコンテナオーケストレーションシステム
と言うことだそうです。

簡単に言うとコンテナの運用管理と自動化を行うためのツール
と言ったところでしょうか。

`K8s`と略記され、ギリシャ語で「操舵手」や「パイロット」という意味があり
知事やサイバネティックスの語源にもなっています。
ロゴも舵な感じですね。

`K8s`は8文字の`ubernete`を`8`に置き換えた略語だそうです。

### コンテナを使う意義

とその前に`コンテナ`を使うことの意味ですが
昔の開発環境では1つのサーバーにライブラリをたくさんインストールして
その上で動くアプリケーションを配置していました。

1つ1つの環境は重めになります。

<img width="1540" alt="スクリーンショット 2020-06-27 16.50.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/d58223f3-2a24-de48-07f6-61adb352cc84.png">

それに対して現在の開発の主流はアプリケーションごとに
使用するライブラリ群を切り離すことで実行環境を軽くし
ビルドやデプロイなどの時間がかからないようにすることを目指しています。

アプリケーションの開発では開発環境の構築から始まりので
それを1からまとめて`コンテナ`に集約し
開発現場と本番環境に差異がないようにしたり
環境整備にかかる時間の圧縮をしています。

そのような開発のメリットから`コンテナ`を用いた開発が増えています。

### コンテナオーケストレーション

当然開発するアプリケーション群が増えていくと
`コンテナ`も増えていくことになります。

複数の`コンテナ`を管理して自動化を行なって、複数制御してと言うことが
必要になって来ました。

`Kubernetes`の登場により、複数の`コンテナ`の管理や自動化が進んだため
この仕組みは`コンテナオーケストレーション`と呼ばれるようになりました。

コンテナにも種類があり`Docker`はその一つです。
`Kubernetes`が対象としているコンテナは`Docker`が標準になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/9ec2fae5-fcef-15b9-6cc1-ae9d5582a28c.png)

参考：https://www.kagoya.jp/howto/rentalserver/kubernetes/

### Kubernetesを使うと何が出来るのか

プロダクションで利用しようとすると下記のようなことを考えなければなりません。

```
複数のDockerホストの管理
コンテナの死活監視
コンテナのスケジューリング、アップデート
スケーリング / オートスケーリング
ロードバランシング
障害時のセルフヒーリング
データやワークロード、ログの管理
その他システムとの連携、拡張、同期
```

`Kubernetes`を利用することでこれらの課題を解決することができます。

`Kubernetes`を利用しない場合には
これらの自動化の仕組みを1から作り上げる必要があります。

### フルマネージドのサービス

クラウドサービスでは`Kubernetes`を取り扱うことのできる
フルマネージドのサービスが存在したりします。

[Google Kubernetes Engine(GKE)](https://cloud.google.com/kubernetes-engine?hl=ja)
[Amazon Elastic Kubernetes Service(EKS)](https://aws.amazon.com/jp/eks/)

これらを用いることで、自前で組むよりも簡単に
`Kubernetes`を用いた環境を構築することができます。


## まとめ

データ分析くらいであれば、コンテナ1つ使ってくらいで事足りますが
大規模開発になると数百とかのコンテナ数になり
管理もしきれなくなって来ます。

1からコンテナ管理の仕組みを作るのも大変ですし
既にコンテナ管理の仕組みは存在しているので
それを利用する方が得策です。

モダンな開発現場で仕事をしたい場合は
こう言ったコンテナ環境の制御の仕組みがあることを
押さえておく必要があると思います。

君がエンジニアになるまであと01日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython