【Docker】Kubernetesとは?GCPを使った開発の基礎知識

docker

こんにちは!オオイシ(@mako_0705)です。

今回はKubernetes(クーベネティス)について調べたのでご紹介です。

「Kubernetesはオーケストレーションツール!?というものらしい」

「そもそも何がうれしいのか」

「Dockerとの関係は?」

「GCPとの関係は?」

その辺りを明らかにしていこうと思います。

Kubernetes(クーベネティス)とは?

Kubernetesとは、複数のホストで稼働しているDockerコンテナをまとめて管理するためのツールです。

Kubernetesを使うと分散環境にあるコンテナをあたかも1台であるように透過的に扱えるので、

  • 負荷状況に応じたスケールの調整
  • コンテナの一括監視
  • サービスを提供しながらのアップデート

など、容易に実現できます。

その他の特徴としては障害発生時の自動復旧などの仕組みも備わっています。

今回は、KubernetesのノードやPodなどの機能の概要や用語の説明について簡単に解説していきます。

なお、Kubernetesは「k8s」でと略称されることもあります。

「k+8文字+s」の略なのだだそう。

GCPとの関係について

GCPにはKubernetes Engine(GKE)というプロダクトがあります。

GKEはKubernetesを実行するためのサービスなわけですが、Kubernetesは主にGoogleが中心となって開発が進められているオープンソースのツールでなので、Kubernetesの実行する上での環境が最適化されています。

AWSでも、EC2 Container ServiceやAzuru Container Service(AKE)などがあります。

Dockerとの関係について

Kubernetesはコンテナを統合的に管理するためのツールなので、Dockerはもちろん対応しています。

Docker以外のコンテナも色々あるらしいのですが、知らないのでここでは触れません。

最近では、Docker for Macなどのローカル開発環境でもKubernetesが標準でサポートされるようになりました。

Kubernetesの用語

Kubernetesを使う上での基礎知識が必要なので、整理してみました。

KubernetesとGKEの全体構成は厳密じゃないですが、このようなイメージです。

ノード(Node)

Dockerコンテナが動作するサーバのことです。

GKEの場合は、GCE(Google Container Engine)の1つが1つのノードになります。

このように、GKEからクラスタを作成するときに、このような設定がありますが、ノードの数だけGCEが作成された上で、GKEでクラスタ構成されます。

マシンタイプは通常のGCEと同じです。

ノード数は後から追加・削除が可能です。

ポッド(Pod)

Kubernetesでの管理上の最小単位です。

ポットには、1つまたは複数のDockerコンテナが含まれます。

Kubernetesはポッドを単位としてスケールするので、Webサーバー+プロキシサーバーのように、関連するコンテナをグループにする必要があります。

作成や停止の単位がポッドなので、WebサーバーとDBサーバーを1つのポッドにしてはいけません

マスターサーバー

コンテナ全体管理するためのサーバーです。

GKEの場合はKubernetesクラスタから作成します。

マスターサーバーは、コマンドのリクエストを受け取ってノード全体を自動的にスケールしたり、障害発生時の自動復旧するなどの、クラスタ全体の管理をします。

オーケストレーションツールの指揮役だと理解しておけば良いでしょう。

レプリカセット(ReplicaSet)

Kubernetesクラスタ上で決められた数のポットを起動しておくための仕組みです。

WEBサーバーのレプリカ数を3個とした場合は、クラスタ内で常に3つのポッドが起動した状態になります。

この特性上、

  • 1つのポッドがサーバーダウンを検知したので自動でポッドを作成
  • WEBサーバーのレプリカ数を3個から6個に増やしてスケールアップ

といった目的で利用されます。

サービス

インターネットからの外部アクセスがある場合に定義します。

例えば、Webブラウザから80番ポートでアクセスがあった場合に、ロードバランサなどで負荷分散しながらKubernetesクラスタ内のポッドに割り振るために使います。

まとめ

今回は、Kubernetesの概要と用語について紹介しました。

次回の記事では、実際にGKEを使ったKubernetesの実行例についての紹介を記事にする予定です。