はじめに
自動化は、ソフトウェア開発において最も重要な概念の1つになっています。インフラストラクチャを自動化すると、構成の変更がスピードアップし、人的エラーのリスク要因が排除され、プロジェクト全体のすべてのチームに必要な透明性が提供されます。
この記事では、TerraformとKubernetesという2つの一般的な自動化の選択肢の概要を説明します。また、両方のツールの一般的なユースケースを提供し、Infrastructure as Code(IaC)環境で連携する方法を提案します。
TerraformとKubernetes:定義
TerraformとKubernetesはさまざまな目的を果たし、さまざまなレベルのソフトウェア自動化を処理します。
テラフォーム
Terraformは、インフラストラクチャ構成を安全かつ効率的に管理するためのツールです。インフラストラクチャを定義するためのフレームワークをユーザーに提供し、リソースプロバイダーを介したリソースへのアクセスを可能にします。プロバイダーは、さまざまな一般的なパブリッククラウドプラットフォーム、Gitホスティングプラットフォーム、一般的なHTTPおよびFTPソリューションをカバーしています。
Kubernetes
Kubernetesは、コンテナ化されたアプリのデプロイ、スケーリング、管理を自動化するためのコンテナオーケストレーションプラットフォームです。 Kubernetesは、クラスターに編成されたホストのグループを管理することで、ダウンタイムなしで分散コンテナシステムを実行できるようにします。
どのように機能しますか?
テラフォーム
コードとしてのインフラストラクチャ(IaC)は、Terraformがどのように機能するかを理解するために必要な主要な概念です。このツールは、インフラストラクチャリソースの定義に使用される宣言型構成言語であるHCL(HashiCorp構成言語)を備えています。
1つまたは複数のインフラストラクチャプロバイダーを使用しているかどうかに関係なく、TerraformユーザーはHCLを利用して、完全なインフラストラクチャをコードの形式で記述することができます。 Terraformは、クラウドおよびSaaSプロバイダーと通信するように設計されたプラグインである「プロバイダー」を通じてこれを実現します。
Terraform Kubernetesプロバイダーは、Kubernetesがサポートするリソースとのやり取りを支援します。 kubectlなどのツールを使用してKubernetesリソースを管理することは可能ですが、Terraformはワークフローの統合を可能にし、完全なライフサイクル管理を提供します。
Terraformは、次のようなコマンドを備えています。
-
terraform init
-Terraform構成ファイルを含むディレクトリを初期化します。 terraform plan
-オブジェクトの現在の状態を読み取って最新であることを確認し、システムの現在の状態を以前の状態と比較し、宣言された構成に一致するために必要なオブジェクトの変更を提案する実行プランを作成します。terraform apply
-提案された計画を実行します。-
terraform destroy
-特定の構成で管理されているオブジェクトを削除します。
Kubernetes
Kubernetesはクラスターで動作します -ノードと呼ばれるマシンのグループ 、これらを組み合わせて、コンテナ化されたアプリケーションの実行を容易にします。
1つのKubernetesクラスターは次のもので構成されます:
- ポッド -連携するコンテナグループ。
- サービス -同じ機能を持つポッドのグループ。
- レプリケーションコントローラー -ポッドレプリカ管理のフレームワーク。
Kubernetesシステムの構造には、次の2つの重要な部分があります。
- ワーカーノード コンテナ化されたアプリケーションと、K8sクラスターの一部としてノードを管理するために必要なツールが含まれています。各クラスターには、割り当てのためにAPIをリッスンする少なくとも1つのワーカーノードがあります。
- コントロールプレーン クラスタを管理するためのツールを実行するヘッドノードが含まれています。
Kubernetesは、システムの目的の構成を宣言するように設計されたYAMLマニフェストファイルを処理することで機能します。 Kubernetes APIサーバーと通信するために、ユーザーは kubectlなどのコマンドラインツールを使用します 。
YAMLファイルは、単純な宣言型構文を特徴としています。 Kubernetesのデプロイを宣言するファイルの例は次のとおりです。
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-demo
namespace: default
spec:
replicas: 3
selector:
matchLabels:
k8s: web
template:
metadata:
labels:
k8s: web
spec:
containers:
- name: k8s-testapp
image: testapp:1.0
上記のファイルは、 k8s-demoというデプロイメントを指定しています testapp:1.0を使用したポッドのレプリカが3つ含まれています 画像。ファイルはシステムに保存され、コマンドラインツールを使用して適用されます。これにより、Kubernetesデプロイメントが効果的に生成されます。
Terraform:長所と短所
長所
- さまざまなリソースを使用したマルチクラウド展開を可能にします。
- ダウンタイムを回避するのに役立ちます。
- 変更の記録、追跡、および管理を容易にします。
- 宣言型構文を備えています。
- 読みやすく包括的なドキュメント。
短所
- GKE(Google Kubernetes Engine)を完全にはサポートしていません。
- エラー処理機能はありません。
- ロールバックなし-必要に応じて、ユーザーは管理対象オブジェクトを破棄して再適用する必要があります。
- 新しいリリースにはバグが含まれていることがよくあります。
Kubernetes:長所と短所
長所
- リソースに優しい-インフラストラクチャの水平スケーリングを可能にします。
- インフラストラクチャのロックインを回避するのに役立ちます。
- 宣言型構文を備えています。
- レプリカを監視し、システムが常に正常であることを確認することで、修復プロセスを自動化します。
- 包括的なドキュメントを備えた、Googleが支援する最先端のコンテナ管理ツール。
短所
- 習得するのは難しい。
- インフラストラクチャオーケストレーションのみを有効にします。
- 組織にK8を導入するには、ワークフローを大幅に調整する必要がある場合があります。
選択方法
IaCの概念を念頭に置いて設計されているため、 Terraform アプリケーションインフラストラクチャの体系化を目指す組織、特に複数のパブリッククラウドとプライベートクラウドにわたってインフラストラクチャを管理する必要がある組織に適しています。これは、Kubernetesがアプリケーションの移植性を実現するための便利なツールであるため、TerraformとKubernetesが相互に補完できる例です。
Terraformを使用してKubernetesを補完する別の方法は、KubernetesTerraformプロバイダーを使用することです。プロバイダーはK8sAPIサーバーを管理し、リソース構成の変更を検出します。これは、Kubernetes自体が行うように設計されていないことです。
Terraformと同様に、 Kubernetes IaCパラダイムをサポートします。 IaCコンテキストでKubernetesを使用すると、クラスター構成を標準化する場合に役立ちます。 Kubernetesは、水平スケーリングを導入することでリソース使用量を最小限に抑えることを目指すプロジェクトにも最適です。