Kubernetes とは何か、そしてそれが解決する問題
コンテナだけではスケールしなくなる理由と、Kubernetes がマシンの集まりを 1 つのプラットフォームに変える方法。
Kubernetes(しばしば K8s と略されます)は、多数のマシンにわたって、コンテナ化されたアプリケーションを実行し管理するための、オープンソースのプラットフォームです。Google で作られ、現在は Cloud Native Computing Foundation のプロジェクトです。このガイドでは、それが解決するために存在する問題と、このシリーズの残りが土台とする、いくつかの用語を説明します。
コンテナは簡単な部分
コンテナは、アプリケーションを、それが必要とするライブラリとともにパッケージ化するため、ノート PC、テストサーバー、本番環境で、同じように動作します。コンテナは素早く起動し、置き換えるのが安価で、コピーを増やすことでスケールします。これは、アプリケーションが多くの小さなサービスに分割され、それぞれが独自のコンテナに入るマイクロサービスアーキテクチャによく合います。
オーケストレーションなしでは何が壊れるか
では、それらのコンテナを 1 つの仮想マシン上で自分で実行して、何が起こるかを見てみましょう。
- ホストがいっぱいになる。 マシンの CPU やメモリに空きがなくなると、新しいコンテナを別の場所で起動し、残りのものと手作業で接続する必要があります。
- コンテナが死んでも誰も気づかない。 コンテナは設計上、使い捨てです。クラッシュしたものを再起動することは、スクリプトで自動化するか、手作業で行う必要があります。
- ホスト自体が故障する。 その上のすべてのコンテナが一緒にダウンし、それらを元に戻すものは何もありません。
それぞれについてスクリプトを書くことはできますが、アプリケーションが複数の環境にまたがる数百のコンテナになると、その自家製のツールは、それ自体がプロジェクトになります。
オーケストレーターが提供するもの
Kubernetes は、これらの仕事を引き受けます。
- 高可用性。 ワークロードの複数のコピーを異なるマシンで実行し、1 つが故障してもユーザーが気づかないようにします。
- スケーリング。 負荷の変化に応じて、手動または自動で、コピーの数を増減します。
- 自己修復。 失敗したコンテナを再起動し、故障したマシンのワークロードを、正常なものに再スケジュールします。
- 復旧可能な状態。 クラスターの設定と状態は、バックアップと復元ができるデータストア(etcd)に保存されます。
構成要素:Pod、ノード、クラスター
3 つの用語が、語彙の大部分をカバーします。
- Pod は、Kubernetes が実行する最小のものです。ネットワークとストレージを共有する、1 つ以上のコンテナを包みます。ほとんどの Pod は、主となるコンテナを 1 つ持ち、ときどき、横にヘルパーがいます。Kubernetes が管理するのは、むき出しのコンテナではなく、Pod です。
- ノードは、Pod を実行する、仮想または物理のマシンです。
- クラスターは、CPU とメモリの 1 つのプールとして管理される、ノードの集合です。一部のノードはクラスターを管理するコントロールプレーンを形成し、残りはアプリケーションを実行するワーカーノードです。次のガイドで、その仕組みを説明します。
宣言的モデル
Kubernetes に、どの手順を踏むかを指示するのではありません。通常は YAML で、望む状態を記述し(「このイメージの 3 つのレプリカを、このポートで公開」)、それをクラスターの API に送ります。Kubernetes 内部のコントローラーが、存在するものと求められたものを継続的に比較し、その差に対して動作します。これが、Deployment が 3 つ存在すべきだと言っているときに、削除した Pod が戻ってくる理由であり、このシリーズの他のすべての基盤です。
Kubernetes があなたの代わりにしないこと
Kubernetes はプラットフォームであり、完全なソリューションではありません。
- イメージをビルドしたり、コードをテストしたりはしません。それは引き続き CI の仕事です。
- アプリケーションのデータのバックアップはしません。永続ストレージとバックアップは、あなたの責任です。
- デフォルトでは Secret を暗号化せず、そのデフォルト設定は、本番向けに強化されていません。
- 学習曲線が現実的にある大規模なシステムなので、まずローカルクラスターで練習してください。次のガイドで、そうします。
人気のガイド
-
Kubernetes クラスターの仕組み:コントロールプレーンとノード クラスターを動かすコンポーネントと、kubectl apply から実行中のコンテナまでの間に何が起きるか。 -
Deployment:スケーリング、自己修復、ローリングアップデート Pod のレプリカを実行し、ダウンタイムなしで更新し、リリースがうまくいかなかったときにロールバックします。 -
Service:短命な Pod のための安定したネットワーキング Pod に安定したアドレスを与え、クラスターの内外に公開し、誰が誰と通信できるかを制限します。 -
失敗する Pod をデバッグする:describe、logs、exec、port-forward Pod が Pending のまま、クラッシュする、応答しない原因を突き止めるための、繰り返し使えるチェックリスト。