KubeVela 上手(1)|让云端应用交付更加丝滑

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
函数计算FC,每月15万CU 3个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: KubeVela 是阿里云和微软共同发起的 OAM(Open Application Model)标准的技术实现,旨在打造统一、标准、跨环境的云端应用交付,省时省力,轻松简单

作者|KubeVela 社区

封面图.jpg

作者|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/_

安装 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 里查看到相关容器信息:

1.png

按 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(组件系统)。

如果你想更好的了解 KubeVela 项目,欢迎搜索钉钉群号 23310022 或直接钉钉扫码加入社区交流群:


二维码.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
运维 JavaScript Java
快速部署阿里云WebIDE(DevStudio)并参与开源项目开发
3个步骤,在轻量应用服务器上完成部署DevStudio,帮你快速学习使用DevStudio进行代码的开发。
快速部署阿里云WebIDE(DevStudio)并参与开源项目开发
|
Kubernetes Cloud Native 关系型数据库
使用Zadig从0到1搭建持续交付平台(上)
使用Zadig从0到1搭建持续交付平台
使用Zadig从0到1搭建持续交付平台(上)
|
5月前
|
前端开发 JavaScript 测试技术
构建与部署全栈JavaScript应用:从构思到上线的完整指南
【8月更文挑战第9天】构建和部署一个全栈JavaScript应用是一个复杂但充满挑战的过程。从需求分析到项目上线,每一步都需要精心策划和严格执行。通过本文的指南,希望能帮助你更好地理解和掌握全栈JavaScript应用的开发流程,从而打造出高性能、高可用、易维护的应用。
|
5月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
105 0
|
5月前
|
监控 安全 Devops
DevOps实践:从代码到部署的无缝过渡
【8月更文挑战第30天】本文通过深入浅出的方式,向读者展示了DevOps文化和实践如何帮助团队实现从代码编写到软件部署的高效、自动化流程。我们将探讨持续集成(CI)、持续交付(CD)以及监控和日志记录的最佳实践,旨在为希望优化软件开发周期的专业人士提供实用指南。文章不展示具体代码示例,而是聚焦于概念理解和实践应用,确保内容即便在没有代码的情况下也具有实质性价值。
|
JSON 运维 Prometheus
让应用交付和管理统一:KubeVela 亮点功能及核心技术回顾
让应用交付和管理统一:KubeVela 亮点功能及核心技术回顾
11792 0
让应用交付和管理统一:KubeVela 亮点功能及核心技术回顾
|
运维 资源调度 Kubernetes
「开源人说」第五期 | KubeVela:一场向应用交付标准的“冲锋”
「开源人说」第五期聚焦云原生领域开源至今仅两年多的项目——KubeVela,将镜头对准 KubeVela 项目背后的代码贡献者和落地实践者,讲述这个从第一天就诞生在社区的技术,如何走到对不同场景应用“海纳百川”,直至成为 CNCF 孵化项目,并逐渐向应用交付领域的事实标准演进的故事。 阅读下文,让我们跟随 KubeVela 创始团队,一起了解它的开源背后的故事。
199769 1
「开源人说」第五期 | KubeVela:一场向应用交付标准的“冲锋”
|
运维 前端开发 jenkins
前端自动化集成部署交付实践
随着前后端分离应用模式的推广,前端项目可独立部署维护上线,不再仅仅将前端开发后打包的文件直接丢到一个文件目录下就完事大吉了,现在对前端来说也需要了解运维的相关知识,本文旨在介绍一些相关的运维概念以及一些前端运维的实践。
340 0
|
弹性计算 Kubernetes Cloud Native
招商银行 KubeVela 离线部署实践
本文将以 KubeVela v1.2.5 版本为例,介绍招商银行 KubeVela 的离线部署实践,来帮助其他用户在离线环境中更便捷的完成 KubeVela 的部署。
588 8
招商银行 KubeVela 离线部署实践
|
Kubernetes Cloud Native 安全
专访 KubeVela 核心团队:如何简化云原生复杂环境下的应用交付和管理
2021 年 7 月,KubeVela 和 OAM 项目整体捐赠给 CNCF 基金会托管。 在 1.2 版本中,KubeVela 新增了以应用为中心的控制面板 UI 功能,使应用组装、分发、交付流程变得更简单,并可以通过 UI 控制台及时了解整个交付链路状态,简化多云/混合环境交付方式。另外还新增了基于订阅模型的开源应用交付系统 ,使企业和云原生应用开发者只需要在 GitHub/Gitlab 上修改代码,就可以自动完成云原生应用交付的整个链路。 从开源到现在已经有一年多,KubeVela 社区取得了什么样的进展?有了哪些落地实践?1.2 版本中为什么会新增加这两个功能,适合于什么场景?
1782 5
专访 KubeVela 核心团队:如何简化云原生复杂环境下的应用交付和管理
下一篇
开通oss服务