KubeVela 上手(1)|讓云端應用交付更加絲滑
本文適合所有軟件工程師進行閱讀使用,尤其是希望開拓后端技術視野的前端、移動端和全棧工程師們。
前言
在軟件開發越來越敏捷的今天,后端技術架構也一直一刻不停地演進以適應需求的變化。
從最初的物理機時代、云計算萌芽的虛擬機時代,再到大爆發的容器時代,所有這一切,我們本來都朝著一個確定方向發展,即:讓應用交付更好、更快和更強。目前處在容器時代的我們,一邊迎接 Kubernetes 等云原生技術浪潮帶來的豐富能力,一邊又不得不面對這些煩惱:
Kubernetes 陡峭的學習曲線和一堆眼花繚亂的概念,使得應用開發人員的開發效率很難令人滿意。
服務應用開發的平臺團隊,卻沒有一個合適的框架來構建用戶友好且高度可擴展的抽象。
尤其在未來的混合云、多云、分布式云這些日益復雜的業務場景中,應用交付更是變得碎片化。
KubeVela 是阿里云和微軟共同發起的 OAM(Open Application Model)標準的技術實現,旨在打造統一、標準、跨環境的云端應用交付,省時省力,輕松簡單:
以應用程序為中心- KubeVela 引入了開放應用程序模型(OAM)來作為更高級別的 API,通過高度一致的工作流來捕獲面向混合環境的微服務交付的所有信息。包括多集群分發策略、流量調配和滾動更新等運維特征,都聲明在應用級別。用戶無需關心任何基礎設施細節,只需要定義和部署應用即可。
可編程式交付工作流- KubeVela 的模型層是利用 CUE 來實現的。它使得你可以輕松地將應用交付工作流聲明為一個 DAG,并將所有步驟和應用部署需求以可編程的方式粘合在一起。這里沒有任何限制,原生可擴展。
運行時無關 - KubeVela 是一個完全與運行時無關的應用交付與管理控制平面。它可以按照你定義的工作流與策略,面向混合環境交付和管理任何應用組件:包括容器、云函數、數據庫甚至 AWS EC2 實例。
現在快跟我來,走進 KubeVela 一探究竟!
可以先熟悉的概念
Docker:常用的一種容器。
Image:容器鏡像。Docker 的最核心組成,簡單理解為可拷貝的安裝光盤。
DockerHub:Docker 公司負責維護的一個容器鏡像公開下載中心。
Kubernetes:容器編排標準,工作是統一管理調度容器。
YAML:一種配置文件格式。
話不多說,來愉快地敲代碼學習吧!
試玩 KubeVela 環境搭建
這一次,我們將介紹使用 Kind(Kubernetes in Docker)來搭建本地 Kubernetes 環境。顧名思義,Kubernetes in Docker,所以繼續往下看之前,請確保跟隨鏈接先安裝好 Docker(_https://docs.docker.com/desktop/_)和 Kubernetes 的命令行工具 kubectl(_https://kubernetes.io/zh/docs/tasks/tools/_)。
安裝 Kind,如果是 MacOS 系統,請在命令行鍵入:
- curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-darwin-amd64chmod +x ./kindmv ./kind /some-dir-in-your-PATH/kind
如果是 Windows 則使用:
- curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.11.1/kind-windows-amd64Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe
安裝好 Kind 之后啟動 Kind,運行如下命令:
- cat <<EOF | kind create cluster --image=kindest/node:v1.18.15 --config=-kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- 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: TCPEOF
同時我們需要安裝 Ingress for Kind。如果把 Kubernetes 比作為“容器酒店”的總經理,Ingress 則類似于這家酒店的迎賓員,負責把前來的“訪問客人”引導到下面具體的哪一步,是去餐廳、去客房還是去健身等等:
- kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
當以上一切就緒,就意味著本地我們已經有了完備的 Kubernetes 環境。
接下來,讓我們來安裝 KubeVela。首先請安裝 Helm Chart,它是 Kubernetes 生態的包管理工具,運行:
- curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
然后在 Helm Chat 中添加 KubeVela:
helm repo add kubevela https://charts.kubevela.net/core
接著更新 Helm Chart:
helm repo update
最后安裝 KubeVela:
helm install --create-namespace -n vela-system kubevela kubevela/vela-core
我們查看一下是否安裝成功:
helm test kubevela -n vela-system
成功后提示:Welcome to use the KubeVela! Enjoy your shipping application journey!
好,那開始編寫第一個 KubeVela Demo 吧!
KubeVela,Hello World!
在前一小節的環境配置當中,我們啟動了一個 Kind 集群,可以在 Docker GUI 里查看到相關容器信息:
按 KubeVela 所抽象的方式,我們定義一個 Web Service,它會拉取 DockerHub 上命為「crccheck/hello-world」的鏡像。
- apiVersion: core.oam.dev/v1beta1kind: Applicationmetadata: name: first-vela-appspec: components: - name: express-server type: webservice properties: image: crccheck/hello-world port: 8000 traits: - type: ingress properties: domain: testsvc.example.com http: "/": 8000
緊接著使用 Kubernetes 的 kubectl apply 命令來部署這條 YMAL:
- kubectl apply -f https://raw.githubusercontent.com/oam-dev/kubevela/master/docs/examples/vela-app.yaml
由于 Ingress for Kind 會默認把你在 YAML 中聲明的 webservice 綁定到 localhost,所以如果你想得到訪問部署好的應用,只需要在命令行里鍵入:
curl -H "Host:testsvc.example.com" localhost
Viola!出現了讓我們最親切的詞語:Hello World!
- <xmp>Hello World ## . ## ## ## == ## ## ## ## ## === /""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o _,/ \ \ _,' `'--.._\..--''</xmp>
總結與預告
上文帶我們完整地體驗了一遍 KubeVela 帶來的應用交付流程,就像“把大象關進冰箱只要三步”一樣簡單直接。
通過編寫一個叫做 Application 的“應用交付計劃” YAML 文件,我們得到交付的是一個 Web Service 類型的 Kubernetes 組件。
Web Service 組件背后的機制是什么?KubeVela 如何交付 Helm 組件?又如何交付云服務組件?如何編排這些組件?
這些就留待下一期我們回來詳細講解 KubeVela 的核心概念:Application 和 Components(組件系統)。


































