Kubernetesとは
Kubernetesは、自動デプロイ、スケーリング、アプリ・コンテナの運用自動化のために設計されたオープンソースのプラットフォームです。K8sとも略記される。
Kubernetes のアーキテクチャ
・マスター・コンポーネント
マスター・コンポーネントは、クラスタの制御を受け持ちます。 スケジューリングやイベントの検知や対応など、クラスタの全体に関わる決定を行います。
そして、クラスタ内のどのノードでも実行できます。
・ノード・コンポーネント
すべてのノードで実行され、実行中のポッドを維持し、Kubernetesランタイム環境を提供します。
Kubernetesが台頭した背景
開発手法が多様化していく中で、devops(開発と運用をセットにした開発手法の一つ)、とりわけ、CI/CDの考え方が広く認知されるようになりました。
CI/CDとは、Continuous Integration/Continuous Delivery (継続的インテグレーション/継続的デリバリ)と呼ばれ、アプリケーションのデプロイ・開発手法の名称です。
・CI/CD
Continuous Integrationは、ソースコードへの変更が自動的にテスト、ビルドされる環境を指します。
Continuous Deliveryは、デリバリとデプロイにわけられます。デリバリは他リポジトリやコンテナレジストリへのデリバリ、デプロイメントは本番、検証環境へのリリースを指します。
Dockerは、このCI/CDと非常に相性が良く、ソースコードの変更から、テスト、ビルド、デプロイまでを一貫して行うことができるので、とても普及することとなりました。
・マイクロサービス
Dockerが普及した背景としてもう一つ、マイクロサービスアーキテクチャがあります。マイクロサービスとは、それぞれのコンテナが互いに独立しているサービスのことを指し、
これらをまとめて一つのコンポーネントとして扱うのがマイクロサービスアーキテクチャという考え方です。
マイクロサービスとして構成するメリットとは、様々です。まずは、開発からデプロイまでの一貫したフローが確立されるため、アジャイルに開発を進めることができます。
また、マイクロサービスなので、サービスそれぞれが独立しており、耐障害性に優れているというメリットもあります。特に、クラウドネイティブアプリケーションであれば、
互いのアプリケーションが疎結合な構成を取ることが非常に容易なので、相性が良いとされています。
このような背景からシステムにDockerを採用する機会が増え、かつマイクロサービスアーキテクチャのため、複数のDockerコンテナを適切に管理する必要性がでてきました。そこで登場したのが、Kubernetesです。
Kubernetesのメリット
Kubernetesには大きく3つのメリットがあります。大量のコンテナの管理、デプロイの高速化、高可用性です。順番に見ていきましょう。
・大量のコンテナの管理
Kubernetesは、設定一つでスケーリングが簡単に行えるので、大量のコンテナ管理に向いています。設定ファイルにあるべき姿を抽象化して共有できるので、
大量のコンテナがあった場合にも、正しく保守することが可能です。またローリングアップデートにも対応しているので、手動でデプロイ作業を行う必要がありません。
コンテナだけでなく、物理マシン、仮想マシンの切り替えも容易に行うことができるので、様々な面で管理のメリットがあります。
・デプロイの高速化
コンテナを元にデプロイを自動で行ってくれるので、手動でデプロイ作業を行う必要がありません。またアプリケーション自体の動作についてはローカルで担保されるため、
開発、検証、本番のインフラストラクチャについての検証を行う必要がなく、高速にデプロイを行うことができます。
場合によっては、より多くのコンテナを稼働させたいというシーンがあります。Kubernetesであれば、定義ファイルの修正と反映のみで増減が可能であるため、容易にデプロイの調整を行うことができます。
・高可用性
KubernetesはPodという最小単位で構成されているため、Podを増やしたり減らしたりすることで、可用性を高めることができます。また、定義ファイルによってレプリケーションなども自動で行うことができるので、可用性が高い状態の構成をすぐに取ることができます。
設計次第で、コストパフォーマンスを高く保ちつつ、可用性を担保することが可能です。