Kubernetes初学の書Part1
はじめに
Kubernetesをはじめて学習する人へ向けて、基本概念の説明からアプリケーションを作成していく過程について記載する。
Part1での説明内容
- コンテナ技術とは
- Dockerコンテナとは
- Kubernatesとは
- Kubernetes環境の選択肢
コンテナ技術とは
コンテナ技術とは、1つの共有されたOS上で複数の独立したアプリケーションの実行環境を作成する技術である。より詳しく言えば、アプリけーションの動作に必要なOSの基本環境(カーネル)をDockerのようなコンテナエンジンを通して、コンテナ同士が共有できるようにすることでCPUやメモリなどのハードウェアのリソースと分離して仮想的な環境を作り出せるものである。
Dockerコンテナとは
Dockerとは、コンテナを実行するための実行環境(コンテナランタイム)及びツールキットを提供するものである。Dockerイメージを元にコンテナイメージをビルドし、様々な環境上(Ubuntu,CentOSなど)でコンテナを起動させることができる。また、Dockerコンテナは仮想マシンに比べ、「軽量」「高速な起動と停止」など実行環境が軽いというアドバンテージがある。
Kubernatesとは
Kubernetesとは、コンテナ化されたアプリケーションのデプロイ、スケーリングなどの管理を自動化するためのプラットフォーム(コンテナオーケストレーションエンジン)である。
Kubernetesでできること
Dockerでは、1つのコンテナに1つのアプリケーションを簡単にデプロイすることができる。しかし、プロダクション用途で利用するには、コンテナのスケーリングや複数コンテナでのアプリケーション運用などを考える必要がある。そこで、コンテナオーケストレーションエンジンであるKubernetesを利用することで、プロダクション利用の課題を解決することができる。
Kubernetesにできること
- 宣言的なコードによる管理(Infrastructuer as Code)
- スケーリング/オートスケーリング
- スケジューリング
- リソース管理
- セルフヒーリング
- ロードバランシングとサービスディスカバリ
- データ管理
宣言的なコードによる管理
YAML形式やJSON形式で記述した宣言的なコード(マニフェスト)によって、デプロイするコンテナや周辺リソースを管理できるため、Infrastructure as Codeを実現することができる。
スケーリング/オートスケーリング
Kubernetesクラスタを形成して、複数のKubernetes Nodeを管理することができる。コンテナイメージを元にKubernetes上にコンテナをデプロイする際には、同じコンテナイメージを使用して、複数のコンテナをデプロイすることができる。これにより、負荷分散や耐障害性を向上させてることができる。また、負荷状況に応じて、コンテナの数を増やしたり、減らしたりすることもできる。
スケジューリング
コンテナをKubernetes Nodeにデプロイする場合にどのKubernetes Nodeに配置するかを決定することができる。
リソース管理
コンテナ配置のために特別な指定がない場合は、Kubernetes NodeのCPUやメモリの空き状況によってスケーリングが行われるため、ユーザはそのKubernetes Nodeにコンテナを配置するかを管理する必要がない。
セルフヒーリング
Kubernetesは標準でコンテナのプロセス監視をおこなっており、プロセスの停止を検知すると、再度コンテナのスケジューリングを実施することで、自動的にコンテナを再デプロイすることができる。
ロードバランシングとサービスディスカバリ
Kubernetesはロードバランシング機能(ServiceやIngress)を有しており、あらかじめ指定した条件に合致するコンテナ群に対してルーティングを行うエンドポイントを払い出すことができる。
データ管理
Kubernetesはバックエンドのデータストアにetcdを採用しており、クラスタを組むことで冗長されコンテナやServiceに関するマニフェストも冗長化されて保存される。
Kubernetes環境の選択肢
様々なプラットフォーム上でKubernetesクラスタを構築して利用することが可能となっている。Kubernetesクラスタを利用するには、大きく分けると下記の3種類に分類される。
- Local Kubernetes
- ユーザの手元のマシン1台に構築して使用する
- Kubernetes構築ツール
- ツールを利用して、任意の環境(オンプレミス/クラウド)にクラスタを構築して使用する
- Managed Kubernetes Service
- パブリッククラウド場のマネージドサービスとして提供されるクラスタを使用する
Local Kubernetes
Local Kubernetesは、ネットワークに繋がってないマシンでも利用できるため、個人での動作確認や開発環境としての利用に適している。開発メンバー共有して使うステージング環境やプロダクション環境のクラスタには適してない。
例)
- Minikube
- Docker Desktop for Mac/Windows
- kind(Kubernetes in Docker)
Kubernetes構築ツール
開発メンバー共有して使うステージング環境やプロダクション環境の利用に適している。
例)
- kubeadm
- Rancher
Managed Kubernetes Service
開発メンバー共有して使うステージング環境やプロダクション環境の利用に適している。
例)
- Google Kubernetes Engine(GKE)
- Azure Kubernetes Service(AKS)
- Elastic Kubernetes Service(EKS)
Discussion