Terraform エコシステムを Kubernetes の世界に結び付ける

Terraform エコシステムを Kubernetes の世界に結び付ける

背景

主要クラウドベンダーの製品ポートフォリオが拡大するにつれ、基本的なコンピューティング設備、ミドルウェアサービス、ビッグデータ/ AIサービス、アプリケーション運用保守管理サービスなどが企業や開発者によって直接利用できるようになります。多くの企業が、さまざまなクラウド ベンダーのサービスに基づいて独自のエンタープライズ インフラストラクチャ プラットフォームを構築していることに気付きました。クラウド サービスをより効率的かつ統一的に管理するために、近年 IaC の考え方が普及しており、その中でも Terrafrom はほぼすべてのクラウド ベンダーに採用され、サポートされています。 Terrafromモデルを中核としたクラウドサービスIaCエコシステムが形成されました。しかし、Kubernetes が普及するにつれて、IaC にはより広い想像の余地が与えられています。 Terraform IaC の機能とエコロジカルな成果が Kubernetes の世界に統合されれば、これは強力な組み合わせになると信じています。

理由1: 統合エンタープライズハイブリッドクラウドPaaSプラットフォームの構築

現在、ほとんどの企業は、クラウドと自社構築のインフラストラクチャを統一的に統合するために、Kubernetes サービスに基づく PaaS プラットフォームまたはインフラストラクチャ管理プラットフォームを構築しています。しかし、インフラストラクチャの提供に加えて、さまざまなミドルウェア、ビッグデータサービス、AIサービス、アプリケーションの観測性なども、クラウドベンダーが提供する主要な製品です。エンタープライズ プラットフォームには、より多くのクラウド サービスを作成および破棄する機能が必要です。この時点で、Terraform がプラットフォーム ビルダーの目に留まることになります。では、Kubernetes の外部で別のドッキング開発を行う必要があるのでしょうか?同時に、継続的リリース、GitOps、グレースケールリリースなどの要件も考慮する必要があります。明らかに、Kubernetes に基づいて直接接続を完了できる場合は、それがより良いオプションです。

理由2: 開発者向けのサーバーレスエクスペリエンスの構築

クラウド コンピューティングの本質または目標はサーバーレスですが、自社構築のインフラストラクチャには常に制限があります。クラウド サービスへのシームレスなアクセスにより、「ほぼ無制限」のリソース プールが実現します。同時に、開発者がビジネス アプリケーションを設計する際には、サーバーレス プラットフォーム上でビジネス サービスのデプロイメントを直接完了するだけでなく、メッセージ ミドルウェアやデータベースなどのサービスも直接取得する必要があります。クラウドベンダーに接続するソリューションを導入する企業が増え、運用・保守管理コストが削減されます。しかし、開発者にとっては、これを透明性と一貫性を持って行うのが最適です。

理由3: より徹底したIaC機能

すべてがサービスであり、クラウド リソース、自社構築のインフラストラクチャ、さまざまなエンタープライズ アプリケーションを記述するには、統一されたモデルを使用する必要があります。 Terraform と Kubernetes は、開発者向けの IaC 仕様に統合および統一できます。メリットとしては、クラウド リソースの管理機能、コンテナ エコシステムの豊富な運用および保守機能、複雑なアプリケーションの統合オーケストレーションなどが挙げられます。

理由 4: Terraform のオープンソース バージョンはクライアント モードで動作し、Kubernetes のように最終状態を維持できません。

Terraform オープンソース ディストリビューションはクライアント モードでのみ動作するため、ユーザーは配信完了後にサービス ステータスを維持できず、ネットワーク障害が発生して配信が失敗した場合は手動で再試行する必要があります。 Kubernetes は開発者に最終状態指向の IaC コンセプトをもたらし、コントローラー モードを通じてターゲット リソースの状態を維持します。これにより、自動化レベルでの Terraform ツールの利点がさらに強化されます。

KubeVela は、開発者に統一された API 抽象化を提供する最新のソフトウェア配信コントロール プレーンであり、開発者は同じ IaC アプローチを使用して一般的なアプリケーションとクラウド サービスの両方を配信できます。 KubeVela は Terraform API と Kubernetes API を直接サポートします。すべての Terraform モジュールとすべての Kubernetes オブジェクトは、変更せずに再利用できます。 KubeVela を使用すると、上記の 3 つの要求を簡単に実現できます。また、Kubernetes ネイティブ CRD を定義してクラウド サービスに接続し、エクスペリエンスをよりネイティブにする、Crossplane プロジェクトの別のモデルも確認しました。 KubeVela は当然のことながら Crossplane API もサポートしています。

次に、KubeVela が Terraform を使用して 2 つの部分を通じてユーザーに統一された IaC エクスペリエンスを提供する方法を詳しく見てみましょう。

  • パート 1 では、Terraform と KubeVela を連携させる方法を紹介します。これには、Terraform と KubeVela に関する基本的な知識が必要です。
  • パート 2 では、次のような KubeVela によるクラウド サービスの実例を紹介します。

1) KubeVela を通じて Cloud ECS インスタンスにパブリック IP アドレスを提供します。

2) ECS インスタンスをトンネル サーバーとして使用して、イントラネット環境内の任意のコンテナ サービスへのパブリック アクセスを提供します。

Terraform モジュールを KubeVela コンポーネントに変換する

Terraform モジュールの準備

十分にテストされた Terraform モジュールがすでにある場合は、この手順をスキップできます。

始める前に、以下のものを用意してください。

  • Terraform CLIをインストールする[1]
  • クラウド サービス アカウント (AK/SK) を準備します。この記事ではAlibaba Cloudを使用します。
  • Terraform の使用に関する基本を学びます。

これはこのデモに使用したTerraformモジュールです[2]

1. Terraform モジュールをダウンロードします。

 gitクローンhttps://github.com/wonderflow/terraform-alicloud-ecs-instance.git
cd terraform - alicloud - ecs -インスタンス

2. Alibaba Cloud Provider の最新の安定バージョンを初期化してダウンロードします。

テラフォーム初期化

3. Alibaba Cloud 認証アカウント情報を設定します。

エクスポートALICLOUD_ACCESS_KEY = "アクセスキーID"
export ALICLOUD_SECRET_KEY = "アクセスキーシークレット"
export ALICLOUD_REGION = "あなたの地域ID"

provider.tf ファイルを作成してアカウント情報を設定することもできます。

プロバイダー「alicloud」 {
access_key = "アクセスキーID"
secret_key = "あなたのアクセスキーの秘密"
地域= "cn-杭州"
}

4. リソースの作成が正常かどうかをテストします。

 terraform apply - var -ファイル= test / test .tfvars

5. テストが正常になったら、作成されたリソースをすべて破棄します。

 terraform destroy - var -ファイル= test / test .tfvars

この時点で、必要に応じてこのモジュールを独自のコード リポジトリにプッシュすることもできます。

Terrafrom モジュールを KubeVela 拡張コンポーネント タイプに変換する

このステップが核心です。始める前に、Kubevelaコントロールプレーン[3]がインストールされていることを確認してください。 Kubernetes クラスターがなくても心配はいりません。簡単なデモンストレーションの場合は、VelaD を使用してワンクリックでインストールするだけで十分です。

先ほど準備した Terraform モジュールを使用して、次のアクションを実行します。

KubeVela コンポーネント定義を生成します。

 vela def init ecs -- type component -- provider alibaba -- desc "Alibaba Cloud Elastic Compute Service の Terraform 構成" -- git https://github.com/wonderflow/terraform-alicloud-ecs-instance.git > alibaba-ecs-def.yaml
vela kube を適用- f alibaba - ecs - def .yaml

モジュールをカスタマイズしている場合は、独自のコード リポジトリ アドレスを直接使用してください。

この時点で、ECS モジュールが KubeVela の拡張コンポーネント タイプとして正常に追加されました。詳細はこちら[4]をご覧ください。 Vela プラットフォームの開発者は、このタイプのコンポーネントを直接使い始めることができます。次のコマンドを実行すると、自動的に生成されたコンポーネントの使用方法のドキュメントを表示できます。

ベラショーアリババ- ecs
または
velaショーalibaba - ecs - web

とても簡単じゃないですか? KubeVela には Terraform 用の完全なツール チェーンがありますが、コミュニティがユーザーにすぐに使用できるプラグインを提供しているため、すべての Terraform モジュールに対してこの操作を繰り返す必要はありません。変換されたコンポーネントを取得するには、対応するクラウド ベンダーのプラグインをインストールするだけです。次に、この機能を適用して、いくつかの興味深いシナリオを試してみましょう。

クラウド サービスを使用してローカル コンテナ アプリケーションをパブリック ネットワークに公開する

このセクションでは、特定のポートを使用して任意の Kubernetes サービスを公開できるソリューションを紹介します。ソリューションは次のものから構成されます。

  1. KubeVela 環境。パート 1 で練習した場合は、すでにお持ちです。
  2. Alibaba Cloud ECS の場合、KubeVela はアクセス キーを通じて小さな ECS (1u1g) を自動的に作成します。
  3. FRP [5]では、KubeVelaはサーバー側とクライアント側の両方でこのプロキシを起動します。

KubeVela環境を準備する

  • KubeVelaをインストールする
 curl - fsSl https://static.kubevela.net/script/install-velad.sh |バッシュ
ベラドインストール

インストールの詳細については文書1 [6]を参照してください。

  • TerraformアドオンとAlibabaプロバイダーを有効にする
 velaアドオンでTerraformを有効にする
velaアドオンでTerraformを有効にする- alibaba
  • 認証情報を追加する
 velaプロバイダーadd terraform - alibaba -- ALICLOUD_ACCESS_KEY < "your-accesskey-id" > -- ALICLOUD_SECRET_KEY "your-accesskey-secret" -- ALICLOUD_REGION < your - region > -- name terraform - alibaba - default

他のクラウドの詳細については文献2 [7]を参照。

パブリックIPアドレスを持つECSインスタンスをデプロイし、FRPサービスを開始する

<< EOF |ベラアップ- f -
# YAMLが始まります
apiバージョン:コアオーム開発版/ v1beta1
種類:アプリケーション
メタデータ:
名前: ecs -デモ
仕様:
コンポーネント:
-名前: ecs -デモ
タイプ: alibaba - ecs
プロパティ:
プロバイダーリファレンス:
名前: terraform - alibaba -デフォルト
接続シークレットをRefに書き込む:
名前:出力- ecs
名前: "test-terraform-vela-123"
インスタンスタイプ: "ecs.n1.tiny"
ホスト名: "test-terraform-vela"
パスワード: 「Test-123456!」
インターネット最大帯域幅: "10"
パブリック IP アドレスを関連付ける: "true"
インスタンス料金タイプ: 「後払い」
ユーザーデータ URL : "https://raw.githubusercontent.com/wonderflow/terraform-alicloud-ecs-instance/master/frp.sh"
ポート:
- 8080
- 8081
- 8082
- 8083
- 9090
- 9091
- 9092
タグ:
created_by : 「Terraform-of-KubeVela」
created_from : "module-tf-alicloud-ecs-instance"
# YAML終了
終了

このアプリケーション定義は、パブリック IP アドレスを持つ ECS インスタンスをデプロイします。

各フィールドの詳細を確認するには、次のコマンドを使用します。

ベラショーアリババ- ecs

上記のデプロイメント コマンドを実行した後、次の方法でアプリケーションのデプロイメント ステータスを表示できます。

 velaステータスecs -デモ
velaログecs -デモ

アプリケーションがデプロイされた後、次のコマンドを実行して IP アドレスを取得できます。

 $ kubectlシークレット出力を取得- ecs -- template = {{.データこのパブリックIP base64 --デコード
[ "121.196.106.174" ]

FRP サービス管理ページには、IP アドレス 9091 からアクセスできます。初期アカウント パスワードは admin: vela123 です。これまでに、ECS サービスの展開が完了しました。

FRP サービスの使用

FRP クライアントの使い方は非常に簡単で、クラスター内の任意のサービスにパブリック IP を提供できます。

1. FRP-Proxy を個別に展開します。

<< EOF |ベラアップ- f -
apiバージョン:コアオーム開発版/ v1beta1
種類:アプリケーション
メタデータ:
名前: frp -プロキシ
仕様:
コンポーネント:
-名前: frp -プロキシ
タイプ:労働者
プロパティ:
イメージ: oamdev / frpc : 0.43.0
環境:
-名前:サーバーアドレス
: "121.196.106.174"
-名前:サーバーポート
: "9090"
-名前:ローカルポート
: "80"
-名前:接続名
: "velaux-service"
-名前:ローカルIP
: "velaux.vela-system"
-名前:リモートポート
: "8083"
終了

この場合、local_ip を velaux.vela-system として指定します。これは、名前空間 vela-system 内の velaux という名前の Kubernetes サービスにアクセスすることを意味します。パブリック IP:8083 経由でサービスにアクセスできます。

2. エージェントと通常のアプリケーションを一緒に展開します。

<< EOF |ベラアップ- f -
# YAMLが始まります
apiバージョン:コアオーム開発版/ v1beta1
種類:アプリケーション
メタデータ:
名前:作曲-アプリ
仕様:
コンポーネント:
-名前:ウェブ-新規
タイプ: Webサービス
プロパティ:
イメージ: oamdev / hello - world : v2
ポート:
-ポート: 8000
公開: true
-名前: frp -ウェブ
タイプ:労働者
プロパティ:
イメージ: oamdev / frpc : 0.43.0
環境:
-名前:サーバーアドレス
: "121.196.106.174"
-名前:サーバーポート
: "9090"
-名前:ローカルポート
: "8000"
-名前:接続名
: "composed-app"
-名前:ローカルIP
: "web-new.default"
-名前:リモートポート
: "8082"
終了

デプロイが完了すると、パブリック IP:8082 を介してサービスにアクセスできるようになります。もう 1 つの方法としては、FRP-Proxy を Trait として定義し、サービスを公開する必要があるコンポーネントに直接マウントする方法があります。 KubeVela のドキュメントを読んで、このメソッドの実装を調べていただければ幸いです。

環境をきれいにする

テスト中に作成されたアプリケーションをクリーンアップするには、次のコマンドを使用します。

 vela削除構成-アプリ- y
vela削除frp -プロキシ- y
vela ecsを削除-デモ- y

アプリケーションが削除されると、クラウド サービス コンポーネントも破棄されます。

これまで、特定のユースケースを使用して、KubeVela がクラウド サービスと共通アプリケーションの統一された記述と配信をどのように実現できるかについて説明してきました。ぜひマスターしていただき、ご自身の環境でいろいろと試していただければ幸いです。このケースを通じて、KubeVela と Terraform を組み合わせた最終的な効果についても大まかに理解できるはずです。 KubeVela の詳細については、公式の KubeVela ドキュメントをお読みください。

<<:  2023年にはクラウド導入の増加によりビジネス価値が増大

>>:  Kubernetes でのゼロトラストの実装

推薦する

シニアアーキテクトの技術共有: 分散システムのパーティショニングの詳細な説明

データ複製は冗長なプロセスです。冗長性により可用性が向上し、読み取り負荷を効果的に分散できます。デー...

新たな状況下で、中国の VMware になれるのは誰か?

11月25日、Sangfor傘下のクラウドコンピューティングブランドであるSangfor Cloud...

クラウド コンピューティングのセキュリティとは何ですか?クラウド コンピューティングの 3 つのサービス モデルは何ですか?

クラウド コンピューティングのセキュリティとは何ですか?クラウド コンピューティング セキュリティま...

セカンダリドメイン名を友好的なリンクと交換する犯罪

実際、インディアンが誰に対しても罪を犯したことがないのと同じように、セカンドレベルドメイン名は誰に対...

キーワードのランキングを決定する2つの要素

検索エンジンでキーワードの順位が変わるのはよくあることで、ウェブマスターなら誰でもよく目にするもので...

健康的な生活の背後には高IQのサーモフィッシャーサイエンティフィックがあり、その背後にはファーウェイがある

かつて、CCTVの「天気予報」番組の「ミスター・ウェザー」宋英傑氏に非常に興味深いインタビューがあり...

ザクロアルゴリズムに対処するためのいくつかの重要な対策

序文百度が発表したザクロアルゴリズムの詳細については、以前の記事ですでに紹介しました。ウェブマスター...

テンセントカンファレンスアプリマーケットが正式に開始、第一弾には20以上のアプリが登場

6月30日、テンセント会議アプリマーケットが正式に開始され、企業や開発者に数億のトラフィックの入り口...

スパムコンテンツはウェブサイトに悪影響を及ぼす可能性がある

SEO オペレーターの多くは、一般的に、Web サイトのコンテンツの更新と外部リンクの投稿という 2...

A5 ウェブマスター ネットワーク トピック: 今日の JD.com、Suning、Gome 間の戦争は単なる仕掛けか、それとも本物か?

A5ウェブマスターネットワークによると、数ヶ月間激化していた電子商取引の価格戦争は本日午前9時に最高...

要約: 内部リンク構築の 5 つの側面

フォーラムやウェブマスターのウェブサイトでは、良いウェブサイトを構築するには、まず良い内部リンクを構...

共同購入業界の繁栄は終わり、生死は一つの考えにかかっている

天国から地獄までの道のりはどれくらい長いのでしょうか? 共同購入業界は 1 年でこの旅を終えました。...

veesp: 月額 1 ドル、ロシアの VPS、KVM 仮想化、512 RAM/10G ハードディスク、PayPal 対応

2004年に設立されたFishnet Сommunicationsは、RNET、vStoike、Ve...