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 でのゼロトラストの実装

推薦する

Baiduライブラリを使用した個人的な体験談

Baidu のサイトウェイトが高いことは周知の事実です。 Baidu の製品はすべてオリジナルソース...

WeChatビジネスは左へ、Douyinビジネスは右へ

以前、「私はフォーチュン500企業の食品従業員ですが、Douyinの焼きエビ販売者に騙されました」と...

virmach-34 USD/E3-1240V2/32G メモリ/2X1T ハードディスク/12IP/10T トラフィック/IPMI

私のブログを長い間フォローしている若い人たちは、8月にvirmachが初めてサーバー上で起動されたと...

TSMCの「ウイルスゲート」から次世代クラウドデスクトップセキュリティ保護の新しいアイデアについて語る

メディアの報道によると、8月3日夕方、世界有数のウエハーファウンドリーであるTSMCは、台湾の新竹サ...

SEO最適化10のヒントと重み付け改善方法

親愛なる友人の皆様。こんにちは、Ah Siです。今日は最適化のヒントをいくつか紹介します。 ウェブマ...

qhoster# VPS マーチャント紹介、22 コンピュータルーム、32 支払い方法 (Alipay)

2004年に設立されたqhoster.comは、Legendary Tech Enterprises...

連載記事の力: ユーザーが繰り返し読みたくなる

コンテンツはウェブサイトの魂です。コンテンツのサポートが不十分だと、ウェブサイトの価値を発揮できませ...

一般的なコンテナイメージ構築ツールとソリューションの紹介

[[420216]] Docker を使用する場合、通常は docker build を使用してイメ...

Douyinの食品専門家の「オルタナティブ起業」:パーソナルマーケティングを活用して人気商品を管理

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています「人がいる...

全国で合計2,859の共同購入サイトが閉鎖され、死亡率は48%となっている。

【はじめに】データによると、2012年6月末現在、中国の共同購入サイトの総数は6,069に達し、その...

UCloud、海外でのSSHアクセスをスムーズにするGlobalSSHを発表

近年、海外の発展途上国におけるインターネットの普及が徐々に進み、BATなどのインターネット大手による...

SEO検索エンジン最適化の定義方法

気がつけば、インターネット SEO 検索エンジン最適化の職に就いて 3 年近くになります。その間、喜...

機械製品ウェブサイトの2年間の運営経験の簡単な分析

こう言うと笑われるかもしれませんが、私の会社の機械製品部門は、過去 2 年間でわずか 3 か月ほどし...

ドメイン駆動設計の復活

[51CTO.com からのオリジナル記事] ドメイン駆動設計 (DDD) はまだ多くの人にとってあ...

Weiboの断片化されたコンテンツを統合することで、ウェブサイトの高品質なコンテンツになることもできる。

数年にわたる発展を経て、Weibo のインターネット上およびネットユーザーの心の中での地位はますます...