自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

將 Terraform 生態(tài)粘合到 Kubernetes 世界

云計算 新聞
KubeVela 是一個現代的軟件交付控制平面, 面向開發(fā)者提供統一的 API 抽象,使開發(fā)者使用相同的 IaC 方式來同時交付普通應用和云服務。

背景

隨著各大云廠商產品版圖的擴大,基礎計算設施,中間件服務,大數據/AI 服務,應用運維管理服務等都可以直接被企業(yè)和開發(fā)者拿來即用。我們注意到也有不少企業(yè)基于不同云廠商的服務作為基礎來建設自己的企業(yè)基礎設施中臺。為了更高效,統一的管理云服務,IaC 思想近年來盛行,其中 Terrafrom 更是成功得到了幾乎所有的云廠商的采納和支持。以 Terrafrom 模型為核心的云服務 IaC 生態(tài)已經形成。然而在 Kubernetes 大行其道的今天,IaC 被冠以更廣大的想象空間,Terraform IaC 能力和生態(tài)成果如果融入 Kubernetes 世界,我們認為這是一種強強聯合。

理由一:構建統一的企業(yè)混合云 PaaS 平臺

目前大多數企業(yè)基于 Kubernetes 服務來構建 PaaS 平臺或基礎設施管理平臺,統一集成云上和自建基礎設施。但除了提供基礎設施以外,各種中間件,大數據服務,AI 服務,應用可觀測等也是云廠商重點提供的產品。企業(yè)平臺需要具備創(chuàng)建和銷毀更多云服務的能力,這時 Terraform 會進入平臺構建者的視線,那么他們還需要在 Kubernetes 之外再做一次對接開發(fā)嗎?而且同時還需要考慮持續(xù)發(fā)布,GitOps,灰度發(fā)布等需求。顯然如果直接 基于 Kubernetes 即可完成對接是更好的選項。

理由二:為開發(fā)者打造 Serverless 體驗

云計算的本質或目標就是 Serverless 化,然而自建的基礎設施總是有限的,無縫接入云服務可以開啟 “近乎無限”的資源池。同時開發(fā)者在架構業(yè)務應用時,除了在 Serverless 平臺上直接完成業(yè)務服務部署以外,還需要直接獲得例如消息中間件,數據庫等服務。更多的企業(yè)會采用對接云廠商的方案,運維管理成本更低。但對于開發(fā)者,這最好是透明的,一致的。

理由三:更徹底的 IaC 能力

一切皆服務,我們需要通過統一的模型來描述云資源、自建基礎設施和各種企業(yè)應用。Terraform 和 Kubernetes 可以整合并統一為面向開發(fā)者的 IaC 規(guī)范。帶來的好處是同時納管云資源和容器生態(tài)豐富的運維能力,以及面向復雜應用的統一編排

理由四:Terraform 開源版本是客戶端模式工作,無法像 Kubernetes 一樣進行終態(tài)維持。

Terraform 開源發(fā)行版只能以客戶端模式工作,即用戶進行完一次交付后無法維持服務狀態(tài),且如果遇到網絡故障交付失敗時需要手動進行重試處理。Kubernetes 為開發(fā)者帶來了面向終態(tài)的 IaC 思想,通過控制器模式實現對目標資源的狀態(tài)維持,這進一步提升了 Terraform 工具在自動化層面的優(yōu)勢。

KubeVela 是一個現代的軟件交付控制平面, 面向開發(fā)者提供統一的 API 抽象,使開發(fā)者使用相同的 IaC 方式來同時交付普通應用和云服務。KubeVela 向下直接支持 Terraform 的 API 和 Kubernetes API,無需修改可復用所有 Terraform 模塊和所有 Kubernetes 對象。通過 KubeVela 你可以非常簡單的實現上訴三方面訴求。我們也看到了另外一種模式的 Crossplane 項目,通過定義 Kubernetes 原生 CRD 的形式在對接云服務,使其體驗更加原生,KubeVela 也天然支持 Crossplane API。

接下來讓我們通過兩部分內容,來詳細看看 KubeVela 是如何應用 Terraform 來為用戶提供統一 IaC 體驗的。

  • Part.1 將介紹如何將 Terraform 與 KubeVela 粘合,這需要一些 Terraform 和 KubeVela 的基礎知識。
  • Part.2 將介紹 KubeVela 交付云服務的一個實踐案例,包括 :

1)通過 KubeVela 提供一個公網 IP 的 Cloud ECS 實例;

2)使用 ECS 實例作為隧道服務器,為內網環(huán)境中的任何容器服務提供公共訪問。

將 Terraform 模塊轉化為 KubeVela 組件

準備 Terraform Module

如果你已經有一個經過良好測試的 Terraform 模塊,那么可以跳過該步驟。

在開始之前,請確保您擁有:

  • 安裝 Terraform CLI[1]
  • 準備一個云服務賬號(AK/SK),本文用例使用阿里云。
  • 學習一些使用 Terraform 的基礎知識。

這是我用于此演示的 Terraform 模塊[2]

1.下載 Terraform 模塊。

git clone https://github.com/wonderflow/terraform-alicloud-ecs-instance.git
cd terraform-alicloud-ecs-instance

2.初始化并下載最新穩(wěn)定版本的阿里云 Provider。

terraform init

3.配置阿里云授權賬號信息。

export ALICLOUD_ACCESS_KEY="your-accesskey-id"
export ALICLOUD_SECRET_KEY="your-accesskey-secret"
export ALICLOUD_REGION="your-region-id"

你也可以通過創(chuàng)建 provider.tf 文件來配置賬號信息。

provider "alicloud" {
access_key = "your-accesskey-id"
secret_key = "your-accesskey-secret"
region = "cn-hangzhou"
}

4.測試資源創(chuàng)建是否正常。

terraform apply -var-file=test/test.tfvars

5.測試正常后銷毀所有已創(chuàng)建的資源。

terraform destroy  -var-file=test/test.tfvars

到此你也可以根據需要將此模塊推送到你自己的代碼倉庫中。

轉化 Terrafrom 模塊作為 KubeVela 擴展組件類型

這一步是核心,在開始之前,請確保您已經安裝了 Kubevela 控制平面[3],如果您沒有 Kubernetes 集群也不用擔心,快速演示時通過 VelaD 一鍵安裝完成就足夠了。

我們將使用我們剛剛準備好的 Terraform 模塊來進行下述動作。

生成 KubeVela 組件定義。

vela def init ecs --type component --provider alibaba --desc "Terraform configuration for Alibaba Cloud Elastic Compute Service" --git https://github.com/wonderflow/terraform-alicloud-ecs-instance.git > alibaba-ecs-def.yaml
vela kube apply -f alibaba-ecs-def.yaml

如果你已自定義過 Module ,請直接使用自己的代碼倉庫地址。

到此你已經成功的將 ECS 模塊添加為 KubeVela 的擴展組件類型,您可以從這里[4]了解更多詳細信息。Vela 平臺上的開發(fā)者可以開始直接使用該類型的組件。你可以通過下述命令來查閱自動生成的組件使用文檔:

vela show alibaba-ecs
# OR
vela show alibaba-ecs --web

是不是非常簡單?KubeVela 對 Terraform 有完善的工具鏈,但你也不必擔心需要為所有的 Terraform 模塊重復做該操作,因為社區(qū)已經為用戶提供了開箱即用的插件,只需要安裝對應云廠商的插件即可獲得已經轉化好的組件。接下來讓我們來應用這項能力實驗一些有意思的場景。

使用云服務將本地容器應用暴露到公網

在這一部分中,我們將介紹一種解決方案,您可以使用特定端口將任何 Kubernetes 服務公開。解決方案由以下組成:

  1. KubeVela 環(huán)境,如果你在第 1 部分練習過,你已經擁有了。
  2. 阿里云 ECS,KubeVela 會通過 Access Key 自動創(chuàng)建一個 tiny ECS(1u1g)。
  3. FRP[5],KubeVela 將在服務器端和客戶端啟動這個代理。

準備 KubeVela 環(huán)境

  • 安裝 KubeVela
curl -fsSl https://static.kubevela.net/script/install-velad.sh | bash
velad install

查看文檔 1[6]以了解更多安裝細節(jié)。

  • 啟用 Terraform Addon 和 Alibaba Provider
vela addon enable terraform
vela addon enable terraform-alibaba
  • 添加授權信息
vela provider 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 服務

cat <<EOF | vela up -f -
# YAML begins
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: ecs-demo
spec:
components:
- name: ecs-demo
type: alibaba-ecs
properties:
providerRef:
name: terraform-alibaba-default
writeConnectionSecretToRef:
name: outputs-ecs
name: "test-terraform-vela-123"
instance_type: "ecs.n1.tiny"
host_name: "test-terraform-vela"
password: "Test-123456!"
internet_max_bandwidth_out: "10"
associate_public_ip_address: "true"
instance_charge_type: "PostPaid"
user_data_url: "https://raw.githubusercontent.com/wonderflow/terraform-alicloud-ecs-instance/master/frp.sh"
ports:
- 8080
- 8081
- 8082
- 8083
- 9090
- 9091
- 9092
tags:
created_by: "Terraform-of-KubeVela"
created_from: "module-tf-alicloud-ecs-instance"
# YAML ends
EOF

此應用定義將部署一個帶有公網 IP 地址的 ECS 實例。

你可以通過下述命令詳細了解每一個字段說明:

vela show alibaba-ecs

執(zhí)行完上述部署命令后,你可以通過下面的方式查看應用部署狀態(tài):

vela status ecs-demo 
vela logs ecs-demo

應用部署完成后可以通過下述命令獲取到 IP 地址:

$ kubectl get secret outputs-ecs --template={{.data.this_public_ip}} | base64 --decode
["121.196.106.174"]

你可以通過 IP:9091 地址訪問到 FRP 服務的管理頁面,初始賬號密為:admin:vela123 至此我們完成了 ECS 服務的部署。

使用 FRP 服務

FRP 客戶端的使用非常簡單,我們可以為集群內的任何服務提供公共 IP。

1.單獨部署 FRP-Proxy。

cat <<EOF | vela up -f -
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: frp-proxy
spec:
components:
- name: frp-proxy
type: worker
properties:
image: oamdev/frpc:0.43.0
env:
- name: server_addr
value: "121.196.106.174"
- name: server_port
value: "9090"
- name: local_port
value: "80"
- name: connect_name
value: "velaux-service"
- name: local_ip
value: "velaux.vela-system"
- name: remote_port
value: "8083"
EOF

在這種情況下,我們通過 velaux.vela-system 指定 local_ip,這意味著我們正在訪問命名空間 vela-system 中名為 velaux 的 Kubernetes 服務。你可以通過公網 IP:8083來訪問該服務。

2.將代理和普通應用共同部署。

cat <<EOF | vela up -f -
# YAML begins
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: composed-app
spec:
components:
- name: web-new
type: webservice
properties:
image: oamdev/hello-world:v2
ports:
- port: 8000
expose: true
- name: frp-web
type: worker
properties:
image: oamdev/frpc:0.43.0
env:
- name: server_addr
value: "121.196.106.174"
- name: server_port
value: "9090"
- name: local_port
value: "8000"
- name: connect_name
value: "composed-app"
- name: local_ip
value: "web-new.default"
- name: remote_port
value: "8082"
EOF

如此部署完成后可通過公網 IP:8082 來訪問該服務。還有一種玩法是將 FRP-Proxy 定義為 Trait,直接掛載到需要暴露服務的組件上,這種方式希望你通過閱讀 KubeVela 的文檔來探索實現啦。

清理環(huán)境

通過下述命令完成測試過程中創(chuàng)建應用的清理動作:

vela delete composed-app -y 
vela delete frp-proxy -y
vela delete ecs-demo -y

云服務組件也會隨著應用刪除被銷毀。

到此我們通過一個具體的使用案例來描述了 KubeVela 是如何完成云服務和普通應用的統一描述和交付,希望你已經掌握并在自己的環(huán)境中進行多樣化嘗試。通過這個案例你也應該大概了解了 KubeVela 結合 Terraform 的最終效果。更多關于 KubeVela 的玩法,可通過閱讀 KubeVela 官方文檔獲得。

責任編輯:張燕妮 來源: 阿里云云棲號
相關推薦

2025-03-05 11:23:44

2015-10-19 10:53:03

2023-01-26 11:56:31

Kubernete虛擬機k3s

2023-02-02 19:12:24

ChatGPT人工智能

2022-05-31 19:03:10

微軟Windows 11賬戶

2020-12-03 18:29:30

KubernetesDocker容器

2019-01-15 08:58:40

Kubernetes生態(tài)圈Docker

2018-05-25 11:28:51

2018-05-13 15:47:31

2024-02-28 08:13:32

2020-11-04 08:00:57

虛擬機stio網格

2019-05-13 15:13:42

華為

2015-04-21 17:23:59

華為

2019-04-01 09:17:23

Kubernetes公共云祼機

2022-01-06 14:33:42

Kubernetes容器

2020-04-13 11:46:12

物聯網醫(yī)療技術

2009-06-22 14:37:00

Java MESDK

2011-08-08 09:33:50

數據中心IO虛擬化

2018-03-04 22:41:04

區(qū)塊鏈互聯網信息傳遞
點贊
收藏

51CTO技術棧公眾號