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

推薦する

国家インターネット情報局は違法なニュースおよび情報サービスウェブサイトを調査し、処罰する。

記者は最近、中国サイバースペース管理局から、5月9日にインターネットニュース情報発信規制特別キャンペ...

感染症の予防と制御期間中、クラウドサービスは飛躍的な発展の機会をもたらした

現在、情報通信業界は5G、ビッグデータ、クラウドコンピューティング、人工知能などの情報技術の総合的な...

Zhihu の収益化構造を分析: 大手 V は本当に儲かるのか?

最近、知乎はニューヨーク証券取引所で正式に鐘を鳴らした。周元氏はその場で、知乎の成長に付き添った優秀...

企業向け Kubernetes サービスを選択する際に考慮すべき 6 つの基準

[51CTO.com クイック翻訳] あなたの会社がほとんどの企業と同様であれば、おそらくマルチクラ...

エンタープライズレベルのコンテナクラウドプラットフォームの実装と実践

IT 業界の発展と変化に伴い、IT アプリケーションの基盤となるサポートも、メインフレーム、ミニコン...

中小企業は戦略を考える必要はない。最も重要なのは、自ら豆腐を挽くことだ

多くの企業は生き残ることがますます困難になっていると感じています。彼らはもはや消費者を理解しておらず...

Baidu は外部リンクを公開するための完全なガイドを知っています: 5 つの誤解と 4 つのヒント

Baidu Knowsは多くのウェブマスターに多大な不安を与えており、私もその一人です。1年前、初め...

DevOpsレビュー

DevOps の出現は、「左シフト運動」の具体的な現れです。ソフトウェア製品とサービスを時間どおりに...

独占企業百度、破壊企業360、そして新鋭のSogouの今後の戦い

360が検索競争の氷を破った後、百度、360、Sogouの3大検索プレーヤーの戦略的立場と内部の勢い...

ftpit-2 USD/512 MB RAM/10 GB SSD/2 TB トラフィック/シカゴ

FtpIt は 1 月に設立され、これまでほぼ 1 年が経過しました。ニューヨーク、シカゴ、ロサンゼ...

マーケティングの基本は顧客との交流を活性化させることである

私自身も小さなビジネスを始めました(誤解を避けるために、ここでは何のビジネスかは言いません)。これま...

人工知能とクラウドコンピューティングはアプリケーションエコシステムの形成を加速させている

現在、人工知能は生産性の向上を可能にし、さまざまな産業のインテリジェント化と新旧の運動エネルギーの変...

タオバオのリベート規則が調整され、URLクエリリベートが禁止される

【概要】業界関係者は、今回の措置はタオバオのリベート規則に対する大きな調整であり、Fanli.com...

新華社通信:Qvodに対する罰金の額はまだ決定されておらず、法的手続きもまだ完了していない。

経済オブザーバーレポートのスクリーンショット20日午後、「Qvod社が2億6000万元の罰金を科せら...

Fliphost ストレージ VPS - 最低 16 USD/年 75G ハードディスク

fliphost.net は、2011 年に設立された小規模な VPS 販売業者です。この会社には ...