1. 程式人生 > 其它 >KubeVela 上手(1)|讓雲端應用交付更加絲滑

KubeVela 上手(1)|讓雲端應用交付更加絲滑

簡介:KubeVela 是阿里雲和微軟共同發起的 OAM(Open Application Model)標準的技術實現,旨在打造統一、標準、跨環境的雲端應用交付,省時省力,輕鬆簡單

作者|KubeVela 社群

本文適合所有軟體工程師進行閱讀使用,尤其是希望開拓後端技術視野的前端、移動端和全棧工程師們。

前言

​在軟體開發越來越敏捷的今天,後端技術架構也一直一刻不停地演進以適應需求的變化。
​從最初的物理機時代、雲端計算萌芽的虛擬機器時代,再到大爆發的容器時代,所有這一切,我們本來都朝著一個確定方向發展,即:讓應用交付更好、更快和更強。目前處在容器時代的我們,一邊迎接 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: 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
EOF

同時我們需要安裝 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(元件系統)。

原文連結

本文為阿里雲原創內容,未經允許不得轉載。