Terraform+Docker+Kubernetesの三角関係
同期にこの3つの関係についてうまく説明ができず、とっても悔しかったので記事としてまとめてみました。
Terraformとは
IaC(Infrastructure as Code)ツールの一つで、インフラをコードで定義して、自動で作成や変更ができるツールです。
AWSなどのサービスはコンソール画面を操作してサーバ、ネットワークなどの設定をすることができますが、Terraformを使用することで、それらの操作をすべてコード化することができます。
インフラをこういった状態にしたい、と記入すると、Terraformがその通りに構築してくれるのです。
インフラをコード化することで、変更履歴を追跡できたり、手作業を削減できてヒューマンエラーが減らせたりなど、さまざまなメリットがあります。
Dockerとは
アプリケーションとその環境をコンテナにまとめて、どこでも同じように動かせるようにしてくれるツールです。
コンテナは、ホストマシンのカーネルをそのまま利用し、Linuxのnamespace、cgroupsを使った制御によって仮想的な環境を提供します。
そのため、ゲストOSの起動を待つ必要のある仮想マシンと異なり、軽量で高速な起動と停止をすることができるという良さがあります。
アプリやその依存ライブラリ、設定などを全部まとめて、Dockerイメージを作成します。それをもとにDockerコンテナを起動し、アプリを実行してくれます。
Kubernetesとは
コンテナ化されたアプリケーションを、複数のホストマシン上で安定して実行・管理するためのツールです。
Kubernetesは、複数台のサーバ(クラスタ)上でコンテナの起動、停止、負荷分散などを自動化してくれます。
「Pod」という単位でコンテナを管理し、これをサーバー(Node)に割り当てて実行します。
アプリケーションの構成や動作をあらかじめ宣言的に記述しておくことで、Kubernetesがその状態を保つように制御してくれるのです。
それぞれの関係性
例えば、Terraformでクラウド上にインフラを構築します。
その上に、Dockerでコンテナ化したアプリケーションを配置し、
Kubernetesでそのコンテナを管理する。
のような関係になると思います。
同期が釣り好きなので、無理やり釣りに絡めて例えてみました。
以上です。
参考文献
間違っている部分やわかりにくい部分があれば、教えていただけるととってもありがたいです。
Discussion