這款開源的開發(fā)工具真有魔力!
Heighliner(/'ha?la?n?r/) 是一個現(xiàn)代的開發(fā)工具,可將你的應(yīng)用程序堆棧作為代碼交付,你可以將低級別的詳細(xì)信息編碼成人類可讀的配置文件,可以對其進(jìn)行版本控制、重用和共享。甚至可以導(dǎo)入現(xiàn)有堆棧以構(gòu)建更高級的堆棧。
Heighliner 提供并維護(hù)官方堆棧,為常見用例提供開箱即用的體驗,你的開發(fā)環(huán)境可以一鍵啟動,這將幫助你使用最先進(jìn)的云原生堆棧輕松快速地構(gòu)建應(yīng)用程序。
簡介
開發(fā)者的時間是十分寶貴的。如果他們不能全身心投入到軟件本身上,而是去反復(fù)折騰這些基礎(chǔ)設(shè)施工具,那么終將給開發(fā)者和企業(yè)帶來巨大的資源浪費。
今天,我們打造了一款名為 Heighliner 的開發(fā)者工具,它可以將整套 Application Stack 都代碼化 (Stack as Code)。我們嘗試通過 Heighliner 去告訴開發(fā)者:“你的云原生技術(shù)棧也可以像代碼一樣去管理。你值得擁有一個更好的使用體驗?!蔽覀冞@么說是因為:
- Heighliner 從開發(fā)者視角將整套 Application Stack 定義出來,包括了代碼倉庫、應(yīng)用框架、CI/CD、容器鏡像、Helm Chart、監(jiān)控面板、告警規(guī)則、云端開發(fā)配置等。
- 我們?yōu)槌R姷拈_發(fā)語言提供了官方 stacks,用戶可以一鍵拉起現(xiàn)代化的云原生開發(fā)環(huán)境。支持語言和框架包括 Go、Spring、Next.js、Vue.js、Remix 等。
- 用戶可以對 stack 的任何一個環(huán)節(jié)進(jìn)行定制化。我們很高興 Docker 創(chuàng)始人 Solomon 創(chuàng)立了 Dagger 項目,Dagger 大幅簡化了開發(fā) Heighliner Stack 的體驗。我們支持使用 Dagger 來定制化 stack。除了 Dagger 官方的庫,我們還額外提供了一整套針對云原生技術(shù)棧的庫。
有了上面這些,開發(fā)者可以持續(xù)不斷地享受云原生發(fā)展的各種趨勢。這些趨勢將會以開發(fā)者最熟悉的方式 -- 以代碼庫的形式來更新,從而幫助開發(fā)者持續(xù)演進(jìn)整個應(yīng)用架構(gòu)。
架構(gòu)
在使用 Heighliner 之前,有必要了解整體架構(gòu)。從高層次來看,Heighliner 包含以下組件:
CLI
Heighliner CLI 命令行工具提供了使用 Heighliner Stacks 的最佳本地體驗,它引導(dǎo)用戶完成使用 Heighliner Stacks 設(shè)置其應(yīng)用程序環(huán)境的過程。它還可用于搜索和下載 Stack、管理環(huán)境、提供基于 Stack 輸入的用戶交互。
使用 Heighliner CLI,你還可以執(zhí)行 IaC 風(fēng)格的 GitOps 工作流。
StackHub
StackHub 存儲 Heighliner Stacks 并提供可搜索的界面來為你的應(yīng)用程序找到合適的 Stack,它可用于下載安裝以及搜索 Stack。在底層,它可能是某種存儲后端,例如對象存儲,或與 OCI 兼容的倉庫(例如 Harbor)。Heighliner 平臺將識別和索引數(shù)據(jù),并為用戶提供搜索結(jié)果。
Heighliner 官方提供了一個托管在云上的默認(rèn) StackHub,它存儲了默認(rèn)的 Stacks,當(dāng)你使用 CLI/UI 時,它將使用默認(rèn)的。
Service
官方已經(jīng)建立了必要的 Heighliner 服務(wù)來幫助簡化開發(fā)工作流程,有在客戶端無法實現(xiàn)的一些必要的服務(wù)。例如,當(dāng)你需要為你的應(yīng)用程序分配子域時,你可以通過 HTTP API 或 CUE 庫使用 Heighliner 服務(wù)來實現(xiàn)。
Dagger
Dagger 是一個 CICD 的便攜式開發(fā)工具包,我們用它來編排基礎(chǔ)設(shè)施工具和服務(wù),它是 Heighliner Stacks 的執(zhí)行引擎,Heighliner 官方在為 Dagger 上游貢獻(xiàn)了一些庫的同時,還使用自己的 CUE 模塊對其進(jìn)行了擴(kuò)展,以組成云原生工具和基礎(chǔ)架構(gòu)。
Kubernetes
Kubernetes 是一個開源容器編排引擎,用于自動部署、擴(kuò)展和管理容器化應(yīng)用程序,使用它來編排服務(wù)部署,這是部署服務(wù)并與其他云服務(wù)集成的平臺基礎(chǔ)。
Terraform
Terraform 是一種基礎(chǔ)架構(gòu)即代碼的工具,可讓你定義云和本地資源。我們使用它來配置和管理基礎(chǔ)設(shè)施資源。在我們的用例中,Terraform 比 Dagger 低一層:在 Terraform 提供資源后,Dagger 將執(zhí)行 CUE 模塊與之交互,例如部署服務(wù)、設(shè)置配置等。
安裝
首先我們需要安裝 Heighliner 的命令行工具,我這里是 Mac 系統(tǒng),可以直接使用 brew 一鍵安裝:
brew install h8r-dev/tap/heighliner
hln version
其他系統(tǒng)可以使用下面的命令進(jìn)行安裝:
curl -L https://dl.h8r.io/hln/install.sh | sh
./bin/hln version
sudo mv bin/hln /usr/local/bin/hln
當(dāng)然也可以直接下載官方的 Release 二進(jìn)制包進(jìn)行安裝,地址:https://github.com/h8r-dev/heighliner/releases
接下來需要有一個本地可訪問的 Kubernetes 集群,如果沒有建議使用 Kind 進(jìn)行本地安裝,推薦的 Docker 資源為4核8G內(nèi)存。創(chuàng)建如下所示創(chuàng)建 Kubernetes 集群的配置文件 kind.yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
然后執(zhí)行下面的命令創(chuàng)建 Kubernetes 集群和 Ingress 控制器:
kind create cluster --image=kindest/node:v1.23.5 --config=kind.yaml
kubectl apply -f https://raw.githubusercontent.com/h8r-dev/stacks/main/scripts/internal/ingress-nginx/deploy.yaml
集群準(zhǔn)備好后執(zhí)行下面的命令安裝 Heighliner 相關(guān)依賴:
hln init
Waiting buildkitd to be ready
buildkitd is ready!
然后創(chuàng)建一個帶有 repo, workflow, write:packages, delete:packages, admin:org, user, delete_repo 權(quán)限的 GitHub Token:
將創(chuàng)建的 Token 設(shè)置成環(huán)境變量:
export GITHUB_TOKEN=<your-fresh-token>
示例
接下來我們以一個 Gin+Vue 的應(yīng)用為例來說明如何使用 Heighliner。
在開始之前推薦設(shè)置如下的環(huán)境變量:
export NETWORK_TYPE=china_network # 你懂得
使用命令 hln up gin-hello-world -s gin-vue -i 即可創(chuàng)建一個 Gin+Vue 的應(yīng)用:
可以使用命令 hln status gin-hello-world 獲取該應(yīng)用的狀態(tài):
?? Heighliner application gin-hello-world is ready! access URL: http://gin-hello-world.h8r.site
There are 2 services have been deployed:
● gin-hello-world-frontend
● access URL: http://gin-hello-world.h8r.site
● resource code: https://github.com/coding-org03/gin-hello-world-frontend
● gin-hello-world-backend
● access URL: http://gin-hello-world.h8r.site/api
● resource code: https://github.com/coding-org03/gin-hello-world-backend
There are 4 addons have been deployed:
● argocd
● access URL: http://argocd.h8r.site
● credential: [Username: admin Password: bsj1O-Eg9iJM7fCq]
● nocalhost
● access URL: http://nocalhost.h8r.site
● credential: [Username: admin@admin.com Password: 123456]
● prometheus-stack
● access URL: http://grafana.h8r.site
● credential: [Username: admin Password: prom-operator]
● prometheus URL: http://prometheus.h8r.site [Username: admin Password: heighliner123!], alertManager URL: http://alert.h8r.site [Username: admin Password: heighliner123!]
● loki
接下來需要設(shè)置下域名,如果你正在使用 h8s.site 則可以忽略這一步,如果你要使用自定義的名稱,則需要將下面的配置加入到 /etc/hosts 中去:
127.0.0.1 gin-hello-world.<your-domain>
127.0.0.1 argocd.<your-domain>
127.0.0.1 nocalhost.<your-domain>
127.0.0.1 grafana.<your-domain>
127.0.0.1 prometheus.<your-domain>
127.0.0.1 alert.<your-domain>
接下來我們就可以通過 gin-hello-world.h8r.site 來訪問我們創(chuàng)建的這個 Vue 應(yīng)用了。
查看 GitHub 上會有如下幾個倉庫:
要想刪除只需要執(zhí)行下面的命令即可:
hln down gin-hello-world
此外 Heighliner 還會幫我們生成 Github repos、Helm Chart、CI/CD pipelines、域名路由、監(jiān)控日志 dashboards、以及告警規(guī)則等。