KubernetesとTerraformの比較

<font color="Grey">*[Kubernetes vs. Terraform](https://aiven.io/blog/kubernetes-vs-terraform)の翻訳です。*</font>

2022年3月18日

# KubernetesとTerraformの比較

DevOpsの世界における2つの重鎮について一刀両断に分析する。

ツールは争いを好まないが、人々は "Xツール vs Yツール "の遺恨試合を仕掛けるのが好きだ。このブログでは、DevOpsの世界で重量級の2つの競合に光を当て、いくつかの一般的な誤解を明らかにしようと試みている。もしあなたがデータベースやデータエンジニアリングを理解しているが、データインフラにKubernetesをいつ使うべきか、Terraformをいつ使うべきかを理解するのに苦労しているのであれば、ぜひ読んでみてほしい。


## Kubernetes vs. Terraform - 何が違うのか？


KubernetesとTerraformはどちらもDevOps分野のオープンソースプロジェクトだ。Kubernetesがコンテナを管理するためのオーケストレーションツール*であるのに対して、*Terraformはアプリケーションの実行がコンテナであろうと巨大なモノリスであろうと、インフラをコード*として定義することができる。Kubernetesを使用するための最低限のエントリーフィーはコンテナを使用することです。しかし、アプリケーションをコンテナとして実行する場合、基盤となるインフラ（コンピュート、ストレージ、ネットワーク）は誰がセットアップするのでしょうか？アプリケーションはシン・エアーの上で動くわけではない。Terraform以前の時代では、SysAdminがスクリプトやAnsible playbookを書いて仮想マシンやベアメタルサーバを立ち上げて設定していた。Terraformでは、アプリケーション/データインフラをどのように計画するかを宣言することができ、Terraformはその計画に基づいて実行する。


Terraformでインフラを構築・管理し、Kubernetesでアプリケーションを格納するコンテナを管理する。


## オーケストレーションと自動化


アプリケーションの観点から見ると、KubernetesやTerraformのようなツールはお互いを補完し合っている。どちらのツールも、システムを宣言的に定義することを可能にし、実行中のシステムをコードで定義されたものと一致させるために実行する。また、システム全体またはその一部に対してモジュール性と再利用性を提供する。こうして、まったく同じインフラを何度もコピーしながら、書くのは一度で済む。


データの観点からは、Terraformはステートフルなインフラストラクチャのプロビジョニングと管理にも役立つ。データベースであろうとストリーミングプラットフォームであろうと、正確な構成を指定すれば、Terraformはデータインフラストラクチャを立ち上げるための基礎となる依存関係とネットワーキングの面倒を見てくれる。


*Kubernetes operators*は、Kubernetesにおけるデータベースやストリーミングプラットフォームのようなカスタムリソースの定義を容易にします。Kubernetesのビルトインスケジューリング機能を使うことで、宣言的な方法でデータインフラストラクチャを作成・管理するためにこれらのオペレータを使うこともできます。


## KubernetesとTerraformでAiven上のデータインフラをプロビジョニングする


KubernetesとTerraformのパワーを理解したところで、Aiven上でデータインフラストラクチャをプロビジョニングするためにそれらをどのように使用できるか見てみましょう。[Aiven Terraform Provider](https://registry.terraform.io/providers/aiven/aiven/latest/docs)と[Aiven Operator for Kubernetes](https://aiven.github.io/aiven-operator/)は、プログラム的にデータリソースを作成する方法を提供します。Aivenは、直感的なWebコンソール、強力なCLI、そしてこれら2つのDevOpsツールを提供していますが、あなたのビジネスに使用するツールをどのように選択しますか？


すでにTerraformに慣れ親しみ、他のインフラリソースのプロビジョニングに使用しているのであれば、*Aiven Terraform Provider*は完璧な選択となるでしょう。既存のスキルセットを使ってAivenリソースを作成・管理できます。Terraformプロバイダーは、インフラストラクチャのプロビジョニングのドライランを行い、作成するリソースをプレビューするのにも適しています。Terraformは、定義したリソースの依存関係も管理します。つまり、TerraformはどのAivenリソースを最初に作成すべきかを知ることができます。


一方、*Aiven Operator for Kubernetes*は、アプリケーションがすでにKubernetes上で動作していて、アプリケーションとデータリソースの両方を管理する単一のコントロールプレーンが必要な場合に理にかなっています。現在、このオペレーターは*Aiven for PostgreSQL®*と*Aiven for Apache Kafka®*のみをサポートしています。このツールを選択すると、Kubernetesの自己修復性と自動スケーリング特性の恩恵を受けることができます。


## 続きを読む


最も人気のある2つのオープンソースプロジェクトとして、KubernetesもTerraformも、サービスのデプロイ、監視、アップグレード、バックアップ、リストアのための独自のユースケースを持っている。Terraformは[provider](https://www.terraform.io/language/providers)を使って、アクセス可能なAPIを持つほぼすべてのプラットフォームやサービスと連携します。


#### Aiven Terraform クックブック

各 "レシピ "には、アーキテクチャ図と、セットアップを自分で構築するために必要なTerraformサンプルコードが含まれています。

[すべてのレシピを探そう！[](https://docs.aiven.io/docs/tools/terraform/reference/cookbook.html)
これらのツールの詳細や、データインフラのプロビジョニングを自動化する方法については、他の記事もチェックしてみてください：


* [Aiven Terraform Provider - Developer Docs](https://developer.aiven.io/docs/tools/terraform/index.html)
* [Aiven Operator for Kubernetes - Developer Docs](https://developer.aiven.io/docs/tools/kubernetes.html)


ついでに[Navigating your Kubernetes logs with Aiven](https://aiven.io/blog/navigating-your-kubernetes-logs-with-aiven)でAivenがKubernetesとどのように連携しているか、[Aiven databases with Terraform for fun and profit](https://aiven.io/blog/aiven-databases-and-terraform-for-fun-and-profit)でTerraformとどのように連携しているかもご覧ください。


--


まだAivenのサービスをご利用になっていませんか？<https://console.aiven.io/signup>から無料トライアルにお申し込みください！


また、[changelog](https://aiven.io/changelog)や[blog](https://aiven.io/blog)のRSSフィード、または[LinkedIn](https://www.linkedin.com/company/aiven/)や[Twitter](https://twitter.com/aiven_io)のアカウントをフォローし、製品や機能関連の最新情報をご確認ください。