KubeVela 上手(1)|讓云端應(yīng)用交付更加絲滑
本文適合所有軟件工程師進(jìn)行閱讀使用,尤其是希望開拓后端技術(shù)視野的前端、移動端和全棧工程師們。
前言
在軟件開發(fā)越來越敏捷的今天,后端技術(shù)架構(gòu)也一直一刻不停地演進(jìn)以適應(yīng)需求的變化。
從最初的物理機(jī)時(shí)代、云計(jì)算萌芽的虛擬機(jī)時(shí)代,再到大爆發(fā)的容器時(shí)代,所有這一切,我們本來都朝著一個(gè)確定方向發(fā)展,即:讓應(yīng)用交付更好、更快和更強(qiáng)。目前處在容器時(shí)代的我們,一邊迎接 Kubernetes 等云原生技術(shù)浪潮帶來的豐富能力,一邊又不得不面對這些煩惱:
Kubernetes 陡峭的學(xué)習(xí)曲線和一堆眼花繚亂的概念,使得應(yīng)用開發(fā)人員的開發(fā)效率很難令人滿意。
服務(wù)應(yīng)用開發(fā)的平臺團(tuán)隊(duì),卻沒有一個(gè)合適的框架來構(gòu)建用戶友好且高度可擴(kuò)展的抽象。
尤其在未來的混合云、多云、分布式云這些日益復(fù)雜的業(yè)務(wù)場景中,應(yīng)用交付更是變得碎片化。
KubeVela 是阿里云和微軟共同發(fā)起的 OAM(Open Application Model)標(biāo)準(zhǔn)的技術(shù)實(shí)現(xiàn),旨在打造統(tǒng)一、標(biāo)準(zhǔn)、跨環(huán)境的云端應(yīng)用交付,省時(shí)省力,輕松簡單:
以應(yīng)用程序?yàn)橹行? KubeVela 引入了開放應(yīng)用程序模型(OAM)來作為更高級別的 API,通過高度一致的工作流來捕獲面向混合環(huán)境的微服務(wù)交付的所有信息。包括多集群分發(fā)策略、流量調(diào)配和滾動更新等運(yùn)維特征,都聲明在應(yīng)用級別。用戶無需關(guān)心任何基礎(chǔ)設(shè)施細(xì)節(jié),只需要定義和部署應(yīng)用即可。
可編程式交付工作流- KubeVela 的模型層是利用 CUE 來實(shí)現(xiàn)的。它使得你可以輕松地將應(yīng)用交付工作流聲明為一個(gè) DAG,并將所有步驟和應(yīng)用部署需求以可編程的方式粘合在一起。這里沒有任何限制,原生可擴(kuò)展。
運(yùn)行時(shí)無關(guān) - KubeVela 是一個(gè)完全與運(yùn)行時(shí)無關(guān)的應(yīng)用交付與管理控制平面。它可以按照你定義的工作流與策略,面向混合環(huán)境交付和管理任何應(yīng)用組件:包括容器、云函數(shù)、數(shù)據(jù)庫甚至 AWS EC2 實(shí)例。
現(xiàn)在快跟我來,走進(jìn) KubeVela 一探究竟!
可以先熟悉的概念
Docker:常用的一種容器。
Image:容器鏡像。Docker 的最核心組成,簡單理解為可拷貝的安裝光盤。
DockerHub:Docker 公司負(fù)責(zé)維護(hù)的一個(gè)容器鏡像公開下載中心。
Kubernetes:容器編排標(biāo)準(zhǔn),工作是統(tǒng)一管理調(diào)度容器。
YAML:一種配置文件格式。
話不多說,來愉快地敲代碼學(xué)習(xí)吧!
試玩 KubeVela 環(huán)境搭建
這一次,我們將介紹使用 Kind(Kubernetes in Docker)來搭建本地 Kubernetes 環(huán)境。顧名思義,Kubernetes in Docker,所以繼續(xù)往下看之前,請確保跟隨鏈接先安裝好 Docker(_https://docs.docker.com/desktop/_)和 Kubernetes 的命令行工具 kubectl(_https://kubernetes.io/zh/docs/tasks/tools/_)。
安裝 Kind,如果是 MacOS 系統(tǒng),請?jiān)诿钚墟I入:
- 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,運(yùn)行如下命令:
- 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
同時(shí)我們需要安裝 Ingress for Kind。如果把 Kubernetes 比作為“容器酒店”的總經(jīng)理,Ingress 則類似于這家酒店的迎賓員,負(fù)責(zé)把前來的“訪問客人”引導(dǎo)到下面具體的哪一步,是去餐廳、去客房還是去健身等等:
- kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
當(dāng)以上一切就緒,就意味著本地我們已經(jīng)有了完備的 Kubernetes 環(huán)境。
接下來,讓我們來安裝 KubeVela。首先請安裝 Helm Chart,它是 Kubernetes 生態(tài)的包管理工具,運(yùn)行:
- 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!
好,那開始編寫第一個(gè) KubeVela Demo 吧!
KubeVela,Hello World!
在前一小節(jié)的環(huán)境配置當(dāng)中,我們啟動了一個(gè) Kind 集群,可以在 Docker GUI 里查看到相關(guān)容器信息:
按 KubeVela 所抽象的方式,我們定義一個(gè) 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 會默認(rèn)把你在 YAML 中聲明的 webservice 綁定到 localhost,所以如果你想得到訪問部署好的應(yīng)用,只需要在命令行里鍵入:
curl -H "Host:testsvc.example.com" localhost
Viola!出現(xiàn)了讓我們最親切的詞語:Hello World!
- <xmp>Hello World ## . ## ## ## == ## ## ## ## ## === /""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o _,/ \ \ _,' `'--.._\..--''</xmp>
總結(jié)與預(yù)告
上文帶我們完整地體驗(yàn)了一遍 KubeVela 帶來的應(yīng)用交付流程,就像“把大象關(guān)進(jìn)冰箱只要三步”一樣簡單直接。
通過編寫一個(gè)叫做 Application 的“應(yīng)用交付計(jì)劃” YAML 文件,我們得到交付的是一個(gè) Web Service 類型的 Kubernetes 組件。
Web Service 組件背后的機(jī)制是什么?KubeVela 如何交付 Helm 組件?又如何交付云服務(wù)組件?如何編排這些組件?
這些就留待下一期我們回來詳細(xì)講解 KubeVela 的核心概念:Application 和 Components(組件系統(tǒng))。