五分钟!获得轻量级的云原生应用控制平面

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 五分钟!获得轻量级的云原生应用控制平面

作者:乔中沛


云原生的不断成熟让大量基础设施层的能力可以被业务应用直接使用,然而广大的开发者们却苦于很高的上手门槛和学习成本,一直没有机会深入了解云原生生态的工具体系。今天我们将为你介绍一个好用的工具,它能够在离线环境帮你快速安装 Kubernetes 集群,低门槛的上手业务应用部署,还能具备多集群、云资源等一系列高阶能力,而你只需要准备一个能够运行 Docker 的系统环境。


这个工具就是 VelaD[1],它可以帮助开发者从零开始,在三分钟内快速搭建基于 K3s 和 KubeVela 的云原生应用控制平面。


准备工作


  1. 如果你使用的是 Mac 或者 Windows,需要准备 Docker 环境,推荐使用 Docker Desktop[2]
  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]

image.png

该命令的背后是基于 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,登陆后你需要设置邮箱和密码。

image.png


部署应用

下面将带你体验使用 VelaUX 三步部署一个 Wordpress 应用。Wordpress 是一个著名的博客软件,可以通过 Helm Chart 部署。


第一步:在插件列表中启用 fluxcd 插件。fluxcd 插件为 KubeVela 提供了交付 Helm Chart 的能力。等待 fluxcd 插件就绪,状态转为 running。


Tips: KubeVela 的微内核设计,可以通过插件系统不断扩充系统能力,你可以借此持续采纳云原生领域中最新的实践。目前 KubeVela 官方插件目录中含有 40+ 正式插件,30+ 实验插件,涉及工作负载、云资源、可观测性、滚动发布等多个领域,并且还在不断扩充中。

image.png


第二步:创建应用,填入名称 wordpress,选择主组件类型为 helm,并绑定 default 环境。


Tips: 环境是 VelaUX 的重要概念,可以帮助用户区分例如开发、测试、生产等环境。

image.png

点击下一步,填写如下参数:

仓库地址: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],你还可以选择其它你需要的参数。以上参数保证我们可以完成交付。

image.png


第三步:点击“部署”,你可以看到正在执行的工作流,我们的应用没有额外配置工作流,所以 VelaUX 会生成一个默认工作流。点击左侧状态栏,可以追踪整个应用的拓扑结构。等待直至工作流完成。以及资源拓扑图中所有资源都达到健康状态。


Tips: 除了通过应用的拓扑结构观察全部底层资源的状态,你还可以在其它 Tab 中查看容器状态、事件、日志、资源指标等信息,如果开启了 cloudshell 插件,用户还能进入 pod shell 执行命令。整个过程受到 VelaUX 多租户权限体系的严格管控。你可以通过 KubeVela 文档[5]进一步了解权限管理、单点登录等问题。


Tips: 应用的工作流是 KubeVela 中对应用发布过程的一部分。提供了面向过程的灵活性,可以实现条件判断、暂停、状态等待、数据流传递、多环境灰度等复杂操作。

image.png


访问应用

接下来,你就可以访问刚刚部署的应用了!运行如下命令,将 Wordpress 的端口转发到本地。使用上下键和回车选择 local | wordpress | wordpress:80


vela port-forward wordpress 8081:80


使用浏览器访问:http://127.0.0.1:8081/login,使用刚刚填写的用户名和密码:admin/wordpress_password 登录为管理员。

image.png

我们一直在使用端口转发来访问应用,但是在实际情况中,你可能更多采用其它更高效和安全的方式来暴露服务,但是在测试环境中,端口转发已经足够好用。我们在高级功能中将展示如何在跨环境差异化部署,并且不同环境甚至可以在不同集群中!因为多集群应用的部署在 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>


其中↓

<master-ip>:是 VelaD 控制平面第一个节点的 IP 地址,只要 worker 节点可以访问该 IP 地址即可,例如二者在同一个内网环境内。需要 worker 通过公网访问第一个节点时,请参见远程访问文档[9]来创建第一个节点。(必填参数)


<token> 是在第一步中命令打印的结果:VelaD 控制平面的 Token。(必填参数)


<worker-name> 是新工作节点的名称。(可选参数)


3.确认节点已经加入,在任意一个节点上运行,得到两个条目即为加入成功。


kubectl get node


4.当你需要卸载节点时,只需在被卸载的节点上运行 velad uninstall 即可。


添加集群  - 跨多集群环境部署应用

上文提到 VelaD 可以作为多集群的控制平面,但到目前为止你可能会问,没有多集群的事啊?下面就会介绍如何使用 KubeVela 跨集群环境部署应用。我们将继续采用 VelaUX 作为演示平台。这次我们的目标是将 wordpress 跨集群、跨环境部署,并且在生产环境中做一些自定义,具体来说:


  1. 在本地集群发布测试版本,人工确认无误后,将应用发布到生产集群。
  2. 在生产集群中将 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


期望输出

image.png

子集群加入之后,你可以使用 vela cluster list 来查看被管控的所有集群。在 VelaUX 中也能查看到刚刚加入的集群。其中 local 集群是 KubeVela 所在的控制平面集群的默认名称,也就是你第一个创建的集群。


vela cluster list


期望输出

image.png

image.png

升级插件

新集群加入后,我们需要回到插件页升级 fluxcd 插件,使其在新集群生效。

image.png

新增环境和交付目标

在左侧环境列表中新增 prod 环境,先后创建并添加两个交付目标


  • local 集群,wordpress-test 命名空间
  • cluster-worker 集群,wordpress-prod 命名空间

image.png

image.png

发布应用

在 wordpress 应用配置中

  1. 绑定 prod 环境

image.png

  1. 新增一个策略使其在生产环境的副本数为 2。这里要添加的策略是配置覆盖。首先选择应用到的工作流和步骤,在组件中选择

image.png

image.png

选择 Add a component patch来添加一个 Patch,选择 wordpress 组件。由于 Properties 的 patch 非常自由,VelaUX 提供了黑屏编写 YAML 的方式开放该接口。选择 Assign the default properties 并点击右上角绿框中的“切换黑屏”图标。在如图的 value 字段中,添加 replicaCount: 2 一行并最终创建策略。

image.png

image.png

点击上方的 prod 环境,VelaUX 以可视化的方式编辑应用的工作流。选择工作流画板,在两个步骤之间添加 suspend 步骤并保存。这允许我们在工作流中暂停并检查测试环境的应用状态,并人工确认继续工作流完成发布到生产环境。

image.png

点击部署并选择 prod 环境的工作流、部署。

image.png

由于我们添加的 suspend 步骤,在 local/wordpress-test 部署成功后,我们将看到状态 SUSPENDING 旁边提示我们是否继续工作流,假设此时我们通过访问测试环境


  • 确认应用工作正常,就可以批准继续执行。
  • 或者发现测试环境的应用工作异常,选择停止发布工作流进行排查。


这里我们继续执行工作流。

image.png

工作流成功执行后,通过状态栏可以查看到:我们作为生产环境的 cluster-worker 集群中 wordpress-prod 有两个正在运行的 Pod 副本。验证了我们对于应用策略的设置。

image.png

当然 KubeVela 有更多对多集群管控的能力,你可以在 KubeVela 文档[10]中找到更多用法。


高可用的控制平面

具有单个 master 节点的控制平面满足了一些使用需求,但是对于控制平面稳定性要求更高的用户,VelaD 还能帮助搭建一个具备更高可用性的多集群控制平面。它由以下部分组成


  • 两个及以上的 server 节点
  • 一个外部数据库
  • 一个负载均衡器

image.png

Note:这些组件的要求:server 和负载均衡节点要求是 Linux 系统,外部数据库可以采用云服务或者自建数据库。


VelaD 尽量将全部的搭建过程变得简单且顺手,为了搭建具备高可用性的控制平面,你仅需运行几条命令:


1. 在第一个 server 节点上运行


velad install --bind-ip=<LB_IP> --database-endpoint=<DB_ENNDPOINT> --token=<TOKEN> --node-ip=<IP>


其中  是负载均衡节点的 IP 地址。 是外部数据库的连接串,其格式可见数据库格式文档[11]


2. 在其他 server 节点运行几乎相同的命令,额外加上 --cluster-only 参数,这意味着仅将节点作为 master 加入集群,跳过安装 KubeVela,因为在第一个 server 节点运行命令时,已经安装了 KubeVela。


velad install --bind-ip=<LB_IP> --database-endpoint=<DB_ENNDPOINT>\
              --token=<TOKEN> \
              --cluster-only
              --node-ip=<IP>


3. 通过在任意一个节点上运行配置负载均衡的向导,获得负载均衡的配置命令。


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>


4. 在负载均衡节点上,将上述向导输出的第二行复制过来并运行。


velad load-balancer install --http-port 32355 --https-port 30421 --host=172.19.0.5

Tips:其中 IP1 等为 server 节点的 IP 地址,load-balancer install 命令背后帮助用户设置了一个转发到 Server 的 Nginx 服务。


5. 在任何一个 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 用户群:

image.png

相关链接:

[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 项目官网

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
19天前
|
Cloud Native 安全 开发者
云原生技术的未来演进与应用展望
【4月更文挑战第9天】 随着企业数字化转型的不断深入,云原生技术以其独特的弹性、敏捷性和可扩展性成为推动创新的重要力量。本文将探讨云原生技术的发展趋势,分析其在各行各业中的应用前景,并针对未来的挑战提出相应的对策和建议。我们还将讨论如何利用云原生技术优化资源配置,提高业务连续性,并最终实现企业的技术升级和价值增长。
|
8天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
44 0
|
8天前
|
Cloud Native 算法 Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(上)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
32 0
|
14天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
17 4
|
18天前
|
运维 Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【4月更文挑战第10天】 随着数字化转型的不断深入,企业对信息技术基础设施的要求日益提高。云原生架构作为一种新兴的设计理念和技术集合,以其灵活性、可扩展性和容错性,正在成为推动企业技术革新的关键力量。本文将探讨云原生技术的核心组件、实施策略以及面临的主要挑战,并分析如何通过采纳云原生架构来优化业务流程和提升服务效率。
|
26天前
|
人工智能 Cloud Native 物联网
探索云原生技术的发展趋势与应用前景
在当今数字化时代,云原生技术已经成为企业数字化转型的核心驱动力之一。本文将深入探讨云原生技术的发展趋势和应用前景,分析其在大数据、人工智能、物联网等领域的应用,并探讨未来可能的发展方向。
12 1
|
27天前
|
运维 Cloud Native 云计算
云原生技术:构建灵活高效的应用生态
随着云计算技术的不断发展,云原生技术作为一种全新的应用开发和部署模式,正逐渐成为业界关注的焦点。本文将介绍云原生技术的基本概念、优势以及在构建灵活高效的应用生态方面的应用实践,以期为读者提供全面了解云原生技术的视角。
|
30天前
|
运维 Cloud Native 云计算
云原生技术在企业信息化中的应用与挑战
随着云计算技术的快速发展,云原生技术作为一种新兴的应用方式,正逐渐成为企业信息化转型中的热门话题。本文将探讨云原生技术在企业信息化中的应用现状、优势以及面临的挑战,并结合具体案例分析其实际效益和发展趋势。
15 3
|
1月前
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。
|
1月前
|
运维 Cloud Native 云计算
云原生技术的发展与应用前景
随着云计算技术的快速发展,云原生技术作为一种新兴的技术范式,正在逐渐引起人们的关注。本文将从云原生技术的概念、特点及其在实际应用中的优势等方面进行阐述,并探讨云原生技术在未来的发展前景。

热门文章

最新文章