Member-only story
Kubernetesについて学ぼう
Kubernetes(一般的にはK8と言われています)は、コンテナ化されたワークロードやサービスを管理するためのポータブルで拡張可能なオープンソースのプラットフォームです。言い換えれば、サービスのリクエスト/タスクの負荷バランスを取る方法であり、そして、サービスを管理する方法です。- ダウンタイムゼロでデプロイするかどうか、あるいはサービスがダウンした場合にサービスを立ち上げるかどうか(セルフヒーリング)ということです。これらのアクションに関与する基本的なコンポーネントは何か、そしてどのようにこういった事象が起こるのかを高いレベルで理解することが重要です。このブログでは、Kubernetesが何で構成されているのか、そしてその中でのそれぞれの役割について見ていきたいと思います。
What Kubernetes is not?
従来のPaaS(Platform as a Service)システムとは異なり、Kubernetesはハードウェアレベルではなくコンテナレベルで動作します。私がKubernetesで気に入っていることのトップ3は以下の通りです。
1. 対応しているアプリケーションの種類を制限しません。Kubernetesは、ステートレス、ステートフル、データ処理のワークロードなど、非常に多様なワークロードに対応することを目指しています。アプリケーションがコンテナ内で実行できるのであれば、Kubernetes上でも問題なく動作するはずです。
2. ソースコードのデプロイやアプリケーションのデプロイは行いません。継続的インテグレーション、継続的デリバリー、継続的デプロイメント(CI/CD)ワークフローは、技術的な要件だけでなく、組織でのやり方や好みによって決定されます。
3. (Sparkなど)、データベース(MySQLなど)、キャッシュ、クラスタストレージシステム(Cephなど)などのアプリケーションレベルのサービスをビルトインサービスとして提供しないという点。そのようなコンポーネントは、Kubernetes上で実行することができ、またはKubernetes上で実行するアプリケーションによってアクセスすることができます。
4.(すいません、3つじゃなく4つでした…) さらに、Kubernetesは単なるオーケストレーションシステムではありません。実際、オーケストレーションの必要性を排除しています。オーケストレーションの技術的な定義は、定義されたワークフローを実行することです。最初にAをして、それからB,それからCへとうつります。 それとは対照的に、Kubernetes は、現在の状態を提供された所望の状態に向けて継続的にドライブする一連の独立した構成可能なコントロールプロセスで構成されています。AからCへの行き方は重要ではありません。集中的なコントロールも不要です。これにより、より使いやすく、より強力で、ロバストで、弾力性があり、拡張性のあるシステムが実現します。
つまり、端的に言えば、コンテナの周りだけなのです。
Architecture Terminology