作者:喬中沛
雲原生的不斷成熟讓大量基礎設施層的能力可以被業務應用直接使用,然而廣大的開發者們卻苦於很高的上手門檻和學習成本,一直沒有機會深入瞭解雲原生生態的工具體系。今天我們將爲你介紹一個好用的工具,它能夠在離線環境幫你快速安裝 Kubernetes 集羣,低門檻的上手業務應用部署,還能具備多集羣、雲資源等一系列高階能力,而你只需要準備一個能夠運行 Docker 的系統環境。
這個工具就是 **VelaD [ 1] **,它可以幫助開發者從零開始,在三分鐘內快速搭建基於 K3s 和 KubeVela 的雲原生應用控制平面。
準備工作
- 如果你使用的是 Mac 或者 Windows,需要準備 Docker 環境,推薦使用 **Docker Desktop [ 2] **。
- 如果你使用的是 Linux,則無需準備工作。
安裝 VelaD
Mac/Linux
curl -fsSl https://static.kubevela.net/script/install-velad.sh | bash
Windows
使用 Powershell 運行
powershell -Command "iwr -useb https://static.kubevela.net/script/install-velad.ps1 | iex"
安裝中需要你輸入當前用戶的密碼來安裝到 PATH 中,用以下命令確認你已經安裝成功:
velad version
Core Version: v1.7.5VelaD Version: v1.7.5
一鍵安裝 Kubernetes 和 KubeVela 控制平面
最簡單的情況下,使用 VelaD 創建多集羣控制平面,只需要一條命令:
velad install
整個安裝過程是離線完成的,只需要 1 分鐘左右便可安裝完成,除了 Kubernetes 以外,還會安裝 KubeVela 這個現代化的雲原生應用交付和管理平臺,幫你輕鬆上手雲原生應用的部署。不僅如此,你還可以通過添加更多節點和數據庫來保證集羣數據的更高可用性(見“添加集羣”小節)。另外,以上命令所創建的控制平面並不會自動將集羣暴露給公網。如果你需要通過公網訪問你在遠程服務器上創建的控制平面,參見**遠程訪問文檔 [ 3] **。
該命令的背後是基於 K3s/K3d 技術爲你在機器上創建一個單節點的 Kubernetes 集羣,並在其中安裝 KubeVela,及其命令行工具 vela。基於這個環境,你可以立刻開始交付你的業務應用。
開箱即用的應用交付功能
開啓 VelaUX
隨着 velad install 的執行,廣受歡迎的控制檯插件 VelaUX 也一併在你的機器上就緒了。注意 velad install 執行結束後的提示:
💡 To enable dashboard, run `vela addon enable /Users/qiaozp/.vela/addons/velaux`
🔑 To access the cluster, set KUBECONFIG:
export KUBECONFIG=$(velad kubeconfig --name default --host)
複製安裝成功後的提示命令,執行,啓用 VelaUX 插件,命令中的路徑在你的環境有所不同
Linux/Mac
export KUBECONFIG=$(velad kubeconfig --name default --host)
vela addon enable $HOME/.vela/addons/velaux
Windows
$env:PATH += ";$HOME.vela\bin;"
$env:KUBECONFIG = $(velad kubeconfig --host)
vela addon enable $HOME.vela\addons\velaux
VelaUX 是一個控制平面上運行的應用,你可以通過瀏覽器來訪問,將 VelaUX 的端口轉發到本機來訪問:
vela port-forward addon-velaux -n vela-system 8080:80
使用上下方向鍵選擇 >local | velaux | velaux。接下來你就能在瀏覽器中訪問:http://127.0.0.1:8080/
初始管理員用戶名和密碼分別爲 admin 和 VelaUX12345,登陸後你需要設置郵箱和密碼。
部署應用
下面將帶你體驗使用 VelaUX 三步部署一個 Wordpress 應用。Wordpress 是一個著名的博客軟件,可以通過 Helm Chart 部署。
第一步: 在插件列表中啓用 fluxcd 插件。fluxcd 插件爲 KubeVela 提供了交付 Helm Chart 的能力。等待 fluxcd 插件就緒,狀態轉爲 running。
Tips: KubeVela 的微內核設計,可以通過插件系統不斷擴充系統能力,你可以藉此持續採納雲原生領域中最新的實踐。目前 KubeVela 官方插件目錄中含有 40+ 正式插件,30+ 實驗插件,涉及工作負載、雲資源、可觀測性、滾動發佈等多個領域,並且還在不斷擴充中。
第二步: 創建應用,填入名稱 wordpress,選擇主組件類型爲 helm,並綁定 default 環境。
Tips: 環境是 VelaUX 的重要概念,可以幫助用戶區分例如開發、測試、生產等環境。
點擊下一步,填寫如下參數:
倉庫地址:https://charts.bitnami.com/bitnami
Chart: wordpress
開啓高級參數,給 Values 添加四個值:
service.type:ClusterIP
wordpressUsername:admin
wordpressPassword:wordpress_password
mariadb.db.password:mariadb_password
*Tips: 參數的來源是 **wordpress/README.md [ 4] *,你還可以選擇其它你需要的參數。以上參數保證我們可以完成交付。
第三步: 點擊“部署”,你可以看到正在執行的工作流,我們的應用沒有額外配置工作流,所以 VelaUX 會生成一個默認工作流。點擊左側狀態欄,可以追蹤整個應用的拓撲結構。等待直至工作流完成。以及資源拓撲圖中所有資源都達到健康狀態。
*Tips: 除了通過應用的拓撲結構觀察全部底層資源的狀態,你還可以在其它 Tab 中查看容器狀態、事件、日誌、資源指標等信息,如果開啓了 cloudshell 插件,用戶還能進入 pod shell 執行命令。整個過程受到 VelaUX 多租戶權限體系的嚴格管控。你可以通過 **KubeVela 文檔 [ 5] *進一步瞭解權限管理、單點登錄等問題。
Tips: 應用的工作流是 KubeVela 中對應用發佈過程的一部分。提供了面向過程的靈活性,可以實現條件判斷、暫停、狀態等待、數據流傳遞、多環境灰度等複雜操作。
訪問應用
接下來,你就可以訪問剛剛部署的應用了!運行如下命令,將 Wordpress 的端口轉發到本地。使用上下鍵和回車選擇 local | wordpress | wordpress:80
vela port-forward wordpress 8081:80
使用瀏覽器訪問:http://127.0.0.1:8081/login,使用剛剛填寫的用戶名和密碼:admin/wordpress_password 登錄爲管理員。
我們一直在使用端口轉發來訪問應用,但是在實際情況中,你可能更多采用其它更高效和安全的方式來暴露服務,但是在測試環境中,端口轉發已經足夠好用。我們在高級功能中將展示如何在跨環境差異化部署,並且不同環境甚至可以在不同集羣中!因爲多集羣應用的部署在 KubeVela 中是一等公民。
回收應用
在 wordpress 應用的 Default 環境裏,選擇左側狀態欄,可以回收應用,這一操作會回收下發的應用以及其下的工作負載。
添加插件,擴展你的應用控制平面
通過上文我們知道 KubeVela 通過插件來提供許多功能。VelaUX、fluxcd 、dex 都是 KubeVela 優秀的插件體系的一部分。插件幫助我們把“以應用爲中心”的理念發揚光大,想要增強控制平面的應用交付、管理能力,只需要啓用不同的插件即可。
- 需要快速迭代並控制發佈的風險?kruise-rollout 插件提供應用灰度發佈能力,支持原生 Deployment/Helm Chart,詳見**文檔 [ 6] **。
- 需要提高團隊生產力和協作效率?backstage 插件幫助將應用信息關聯至開發者門戶,詳見 **demo [ 7] **。
- 需要更高資源彈性以及可用性?terraform 插件賦予平臺交付雲資源的能力,藉助你需要的雲資源完成應用構建。詳見**文檔 [ 8] **。
- 需要掌握應用運行狀態?一組可觀測插件集成了包括 Prometheus、Loki、Grafana 在內的可觀測項目,提供全棧的聲明式可觀測能力,幫助業務開發者靈活定製,輕鬆洞察各類複雜的雲原生工作負載。
KubeVela 插件倉庫還包含了在工作流、網關、大數據、安全、混部等領域的插件,更多來自社區的最佳實踐正在以插件形式沉澱下來。
高級功能
添加節點 - 擴容集羣
本功能要求 VelaD 控制平面安裝在 Linux 中
想要使用 VelaD 作爲輕量級控制平面,單節點在加入更多插件時,或者在控制面部署過多應用時,可能達到計算資源上限,這時你可以向原本的控制平面添加 worker 節點來擴容集羣。
1.在你已經運行過 velad install 的第一個節點上,運行 velad token 獲得該集羣的註冊 Token。
velad token
2.在第二個節點上,通過如下命令向控制平面加入新的 worker 節點,從而組建多節點的控制平面。
velad join --master-ip <master-ip> --token <token> --worker-name <worker-name>
其中↓
:是 VelaD 控制平面第一個節點的 IP 地址,只要 worker 節點可以訪問該 IP 地址即可,例如二者在同一個內網環境內。需要 worker 通過公網訪問第一個節點時,請參見**遠程訪問文檔 [ 9] **來創建第一個節點。(必填參數)
是在第一步中命令打印的結果:VelaD 控制平面的 Token。(必填參數)
是新工作節點的名稱。(可選參數)
3.確認節點已經加入,在任意一個節點上運行,得到兩個條目即爲加入成功。
kubectl get node
4.當你需要卸載節點時,只需在被卸載的節點上運行 velad uninstall 即可。
添加集羣 - 跨多集羣環境部署應用
上文提到 VelaD 可以作爲多集羣的控制平面,但到目前爲止你可能會問,沒有多集羣的事啊?下面就會介紹如何使用 KubeVela 跨集羣環境部署應用。我們將繼續採用 VelaUX 作爲演示平臺。這次我們的目標是將 wordpress 跨集羣、跨環境部署,並且在生產環境中做一些自定義,具體來說:
- 在本地集羣發佈測試版本,人工確認無誤後,將應用發佈到生產集羣。
- 在生產集羣中將 wordpress 容器副本數提高到 2 個以提高可用性。
準備集羣
我們需要一個子集羣(相對於 KubeVela 所在的管控集羣)作爲生產集羣,如果你沒有其它可用集羣,可以通過 VelaD 可以在單臺 MacOS 或者 Windows 機器上輕鬆創建另一個集羣,運行如下命令
Linux 平臺怎麼辦?
VelaD 不支持在單臺 Linux 機器中創建多個集羣。如果你正在使用 Linux 並嘗試 VelaD 作爲多集羣控制平面,可以在其它 Linux 機器中創建集羣並繼續。將集羣暴露給其它機器的方式見遠程訪問文檔。
velad install --name cluster-worker --cluster-only
相比於之前的安裝命令,該命令添加了名字參數(默認爲 default)。因爲該集羣將作爲子集羣,我們用 --cluster-onlyflag 跳過安裝 KubeVela。使用如下命令來檢查兩個集羣的狀態:
velad status
期望輸出
Checking cluster status...
K3d images status:
✔ image rancher/k3s:v1.24.8-k3s1 ready
✔ image ghcr.io/k3d-io/k3d-tools:latest ready
✔ image ghcr.io/k3d-io/k3d-proxy:5.4.6 ready
Cluster(K3d) status:
✔ cluster [cluster-worker] ready
➤ kubevela status: not installed
✔ cluster [default] ready
✔ kubevela status: deployed
Checking KubeVela status...
Vela status:
✔ Vela CLI installed
✔ Vela CLI path: /usr/local/bin/vela
✔ VelaUX addon dir ready
✔ VelaUX addon dir path: /Users/qiaozp/.vela/addons/velaux
Tips:VelaD 創建的第二個集羣是爲了模擬實際上的生產集羣,它實際上還是運行在本地的 Docker 環境的容器。
將集羣加入控制平面的管控
使用已經配套安裝好的 vela 命令行工具,將子集羣加入到控制平面的管控中來。
Linux/Mac
WORKER_KUBECONFIG=$(velad kubeconfig --name cluster-worker --internal)
vela cluster join $WORKER_KUBECONFIG --name=cluster-worker
Windows
$WORKER_KUBECONFIG = $(velad kubeconfig --name cluster-worker --internal)
vela cluster join $WORKER_KUBECONFIG --name=cluster-worker
期望輸出
子集羣加入之後,你可以使用 vela cluster list 來查看被管控的所有集羣。在 VelaUX 中也能查看到剛剛加入的集羣。其中 local 集羣是 KubeVela 所在的控制平面集羣的默認名稱,也就是你第一個創建的集羣。
vela cluster list
期望輸出
升級插件
新集羣加入後,我們需要回到插件頁升級 fluxcd 插件,使其在新集羣生效。
新增環境和交付目標
在左側環境列表中新增 prod 環境,先後創建並添加兩個交付目標
- local 集羣,wordpress-test 命名空間
- cluster-worker 集羣,wordpress-prod 命名空間
發佈應用
在 wordpress 應用配置中
- 綁定 prod 環境
- 新增一個策略使其在生產環境的副本數爲 2。這裏要添加的策略是配置覆蓋。首先選擇應用到的工作流和步驟,在組件中選擇
選擇 Add a component patch來添加一個 Patch,選擇 wordpress 組件。由於 Properties 的 patch 非常自由,VelaUX 提供了黑屏編寫 YAML 的方式開放該接口。選擇 Assign the default properties 並點擊右上角綠框中的“切換黑屏”圖標。在如圖的 value 字段中,添加 replicaCount: 2 一行並最終創建策略。
點擊上方的 prod 環境,VelaUX 以可視化的方式編輯應用的工作流。選擇工作流畫板,在兩個步驟之間添加 suspend 步驟並保存。這允許我們在工作流中暫停並檢查測試環境的應用狀態,並人工確認繼續工作流完成發佈到生產環境。
點擊部署並選擇 prod 環境的工作流、部署。
由於我們添加的 suspend 步驟,在 local/wordpress-test 部署成功後,我們將看到狀態 SUSPENDING 旁邊提示我們是否繼續工作流,假設此時我們通過訪問測試環境
- 確認應用工作正常,就可以批准繼續執行。
- 或者發現測試環境的應用工作異常,選擇停止發佈工作流進行排查。
這裏我們繼續執行工作流。
工作流成功執行後,通過狀態欄可以查看到:我們作爲生產環境的 cluster-worker 集羣中 wordpress-prod 有兩個正在運行的 Pod 副本。驗證了我們對於應用策略的設置。
當然 KubeVela 有更多對多集羣管控的能力,你可以在 KubeVela 文檔 [ 10] 中找到更多用法。
高可用的控制平面
具有單個 master 節點的控制平面滿足了一些使用需求,但是對於控制平面穩定性要求更高的用戶,VelaD 還能幫助搭建一個具備更高可用性的多集羣控制平面。它由以下部分組成
- 兩個及以上的 server 節點
- 一個外部數據庫
- 一個負載均衡器
Note:這些組件的要求:server 和負載均衡節點要求是 Linux 系統,外部數據庫可以採用雲服務或者自建數據庫。
VelaD 儘量將全部的搭建過程變得簡單且順手,爲了搭建具備高可用性的控制平面,你僅需運行幾條命令:
- 在第一個 server 節點上運行
velad install --bind-ip=<LB_IP> --database-endpoint=<DB_ENNDPOINT> --token=<TOKEN> --node-ip=<IP>
其中 是負載均衡節點的 IP 地址。 是外部數據庫的連接串,其格式可見**數據庫格式文檔 [ 11] **。
- 在其他 server 節點運行幾乎相同的命令,額外加上 --cluster-only 參數,這意味着僅將節點作爲 master 加入集羣,跳過安裝 KubeVela,因爲在第一個 server 節點運行命令時,已經安裝了 KubeVela。
velad install --bind-ip=<LB_IP> --database-endpoint=<DB_ENNDPOINT>\
--token=<TOKEN> \
--cluster-only
--node-ip=<IP>
- 通過在任意一個節點上運行配置負載均衡的嚮導,獲得負載均衡的配置命令。
velad load-balancer wizard
To setup load-balancer, run the following command on node acts as load-balancer:
velad load-balancer install --http-port 32196 --https-port 30297 --host=<IP1>,<IP2>
- 在負載均衡節點上,將上述嚮導輸出的第二行復制過來並運行。
velad load-balancer install --http-port 32355 --https-port 30421 --host=172.19.0.5
Tips:其中 IP1 等爲 server 節點的 IP 地址,load-balancer install 命令背後幫助用戶設置了一個轉發到 Server 的 Nginx 服務。
- 在任何一個 server 節點打印 kubeconfig 的位置,並將該文件複製到任何可以訪問到負載均衡節點的位置(例如你的筆記本上)。其中 --external 表示該 kubeconfig 是從外部訪問集羣所需要的。
velad kubeconfig --external
Boom!你可以通過這個 kubeconfig 訪問和管理這個控制平面了!任何一個 server 節點故障都不會影響控制平面的可用性。
結語
以上就是本次的全部內容,感謝你的閱讀和嘗試。雲原生的逐漸成熟湧現出了大量開箱即用的生態功能,但是廣大開發者羣體往往被雲原生複雜的生態圖景勸退,今天我們介紹了 VelaD 項目,期望以最簡單、最快的方式幫助你上手雲原生並立刻開始交付應用。隨着你的需要,VelaD 能不斷提高控制平面的容量和可用性。你還能通過向控制面註冊子集羣的方式,將應用部署到更多你需要的位置。
其背後的 KubeVela 項目在開箱即用的應用交付功能的基礎上,不斷以插件形式將雲原生領域的最佳實踐帶給你,讓你以更快更簡單的方式增強自己的應用交付過程。官方插件倉庫已經擁有了囊括變體工作負載、雲資源、可觀測性、滾動發佈等多個領域的 70+ 插件。目前 KubeVela 的插件生態還在快速成長中,歡迎你來社區提出需求或做出貢獻。
近期 KubeVela 即將發佈 v1.8 版本,帶來集羣資源一鍵納管功能,幫助你無痛遷移遺留系統。還有對大規模應用場景的壓測報告、性能優化以及控制器分片方案,幫助你輕鬆面對業務規模增長的挑戰。
寫在最後
關於 VelaD,關於 KubeVela,你還有什麼需求或者疑問?歡迎通過如下材料瞭解更多 VelaD 和 KubeVela 的項目細節:
- VelaD 代碼庫:https://github.com/kubevela/velad 歡迎 Star/Watch/Fork!
- KubeVela 代碼庫:https://github.com/kubevela/kubevela 歡迎 Star/Watch/Fork!
- 項目官方主頁和文檔:kubevela.io
- 項目釘釘羣:23310022;Slack:CNCF #kubevela Channel
- 加入微信羣:請先添加以下 maintainer 微信號,表明進入 KubeVela 用戶羣:
相關鏈接:
[1] VelaD
https://github.com/kubevela/velad
[2] Docker Desktop
https://www.docker.com/products/docker-desktop/
[3] 遠程訪問文檔
https://github.com/kubevela/velad/blob/main/docs/05.expose-cluster.md
[4] wordpress/README.md
https://github.com/helm/charts/blob/master/stable/wordpress/README.md
[5] KubeVela 文檔
https://kubevela.io/docs/how-to/dashboard/user/
[6] 文檔
https://kubevela.io/zh/docs/end-user/traits/rollout
[7] demo
https://www.bilibili.com/video/BV1v84y1a75x/?vd_source=d7602cf3dc8bc4dbd24e1a83d93c150b
[8] 文檔
https://kubevela.io/zh/docs/tutorials/consume-cloud-services
[9] 遠程訪問文檔
https://github.com/kubevela/velad/blob/main/docs/05.expose-cluster.md
[10] KubeVela 文檔
https://kubevela.io/zh/docs/case-studies/multi-cluster
[11] 數據庫格式文檔
https://github.com/kubevela/velad/blob/main/docs/db-connect-format.md
點擊此處查看 KubeVela 項目官網