📝

Kubernetes初学の書Part1

2022/11/20に公開

はじめに

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