首页 » 排名链接 » 云原生应用管理平台Radius 101(环境部署应用程序容器红烧肉)

云原生应用管理平台Radius 101(环境部署应用程序容器红烧肉)

神尊大人 2024-11-28 14:36:39 0

扫一扫用手机浏览

文章目录 [+]

我们先通过一个简单的示例,让大家有一个直观的感知。

示例

通过本示例,我们可以学会如何使用 Radius 定义、部署和管理一个云原生应用。

云原生应用管理平台Radius 101(环境部署应用程序容器红烧肉) 排名链接
(图片来自网络侵删)

主要包括:

定义和部署 Radius 环境和应用程序将容器 frontend 添加到应用程序,并自定义该容器将 Mongodb 数据库添加到应用程序,并配置上述的容器 frontend 访问该数据库添加第二个容器 backend,并配置第一个容器 frontend 访问该容器通过网关Gateway安全地向 Internet 公开应用程序

首先运行 rad init 命令,来完成初始化工作。
初始化工作主要包括:

部署 Radius 控制面组件,如果已经部署过,则本步骤会跳过。
创建默认的环境default,如果已经创建,则本步骤会跳过。
如果指定了新的环境,则会完成新环境的创建工作。
在当前目录生成 app.bicep 文件,即 Radius 应用配置文件。

rad initInitializing Radius. This may take a minute or two...✅ Use existing Radius 0.28.0 install on docker-desktop✅ Use existing environment default✅ Scaffold application cloud-native-platform-engineering-demo✅ Update local configurationInitialization complete! Have a RAD time

然后我们打开 app.bicep,编辑相关内容。
具体如下:

import radius as radiusparam application stringparam environment stringresource demo 'Applications.Core/containers@2023-10-01-preview' = { name: 'demo' properties: { application: application container: { image: 'ghcr.io/radius-project/samples/demo:latest' env: { FOO: 'bar' } ports: { web: { containerPort: 3000 } } } connections: { mongodb: { source: mongodb.id } backend: { source: 'http://backend:80' } } }}resource mongodb 'Applications.Datastores/mongoDatabases@2023-10-01-preview' = { name: 'mongodb' properties: { environment: environment application: application }}resource backend 'Applications.Core/containers@2023-10-01-preview' = { name: 'backend' properties:{ application: application container: { image: 'nginx:latest' ports: { api: { containerPort: 80 } } } }}resource gateway 'Applications.Core/gateways@2023-10-01-preview' = { name: 'gateway' properties: { application: application routes: [ { path: '/' destination: 'http://demo:3000' } ] }}

然后运行 rad deploy app.bicep 命令,完成部署工作。
具体如下:

Building app.bicep...Deploying template 'app.bicep' for application 'cloud-native-platform-engineering-demo' and environment 'default' from workspace 'default'...Deployment In Progress... Completed gateway Applications.Core/gatewaysCompleted backend Applications.Core/containersCompleted mongodb Applications.Datastores/mongoDatabases. demo Applications.Core/containersDeployment CompleteResources: backend Applications.Core/containers demo Applications.Core/containers gateway Applications.Core/gateways mongodb Applications.Datastores/mongoDatabasesPublic Endpoints: gateway Applications.Core/gateways http://localhost

如图所示,Radius 按照我们的 app.bicep 应用程序描述,在本地的 kubernetes 中完成了所有的部署。

我们可以通过暴露的URL,访问该应用程序。

是不是很简单?对于开发同学来说,只需要按照 radius 的规范,描述自己的服务和服务的依赖,即可一键发布自己的应用程序。

接下来我们探究一下 Radius 的设计思想以及如何支持一键发布应用程序。

解读

想要真正理解 Radius,必须搞清楚以下几个概念。

Recipe

Recipe ,翻译过来就是菜谱。
怎么理解Recipe那?

顾客到饭店点菜的时候,根据自己的喜好和需求,点不同的菜,也可能会提出免辣或是微辣等特殊要求。
厨师根据所点的菜和特殊要求,完成菜的制作,最后交给顾客。
这里,顾客完全不需要关注菜是如何制作、以及原料的采购。

比如红烧肉,有预制菜类型的红烧肉,也有国宴大师亲自抄的红烧肉。
如果顾客只是想填饱肚子,那就点预制红烧肉,如果是宴请贵宾,就需要点国宴红烧肉了。

对应到技术场景,我们需要一个 redis。
预制红烧肉就是本地开发环境的 redis,在 k8s 里部署一个单节点的 redis 容器即可满足要求。
在生产环境,考虑到稳定性,我们可能需要购买云厂商的 redis 集群。

Recipe 体现了关注分离的思想。
开发和运维协作来完成应用的交付。
运维会制定一些列的 recipe ,也就是基础设施的模板,开发选择自己所需的 recipe。

具体从炒菜到交付给顾客,就是 IaC 的思想。
Radius 支持 Bicep 和 Terraform 两种 IaC 方案,未来会支持 Crossplane ,实现基础设施的自动化交付。

所以,简单理解 Recipe = 模板 + IaC。

示例中的,部署一个 mongo, 配置非常简单,实际上是直接使用了提前设置好的 mongo recipe。
执行以下命令,查看 Radius 预置的 Recipe:

rad recipe listRECIPE TYPE TEMPLATE KIND TEMPLATE VERSION TEMPLATEdefault Applications.Datastores/mongoDatabases bicep ghcr.io/radius-project/recipes/local-dev/mongodatabases:0.28default Applications.Datastores/redisCaches bicep ghcr.io/radius-project/recipes/local-dev/rediscaches:0.28default Applications.Datastores/sqlDatabases bicep ghcr.io/radius-project/recipes/local-dev/sqldatabases:0.28default Applications.Messaging/rabbitMQQueues bicep ghcr.io/radius-project/recipes/local-dev/rabbitmqqueues:0.28default Applications.Dapr/pubSubBrokers bicep ghcr.io/radius-project/recipes/local-dev/pubsubbrokers:0.28default Applications.Dapr/secretStores bicep ghcr.io/radius-project/recipes/local-dev/secretstores:0.28default Applications.Dapr/stateStores bicep ghcr.io/radius-project/recipes/local-dev/statestores:0.28

Radius 支持自定义 Recipe,所以我们的运维需要按照自己公司的实际情况,定义自己的 Recipe。

Environment

环境就是应用部署的目的地。
可能有本地开发环境和生产环境之分。
那么对于生产环境,也有AWS生产环境,Azure生产环境。

环境主要包含容器运行时和各种 cloud provider设置。

比如初始化过程中默认的 default 环境设置如下:

rad env show -e default -o json{ "id": "/planes/radius/local/resourcegroups/default/providers/Applications.Core/environments/default", "location": "global", "name": "default", "properties": { "compute": { "kind": "kubernetes", "namespace": "default" }, "provisioningState": "Succeeded", "recipes": { "Applications.Dapr/pubSubBrokers": { "default": { "plainHTTP": false, "templateKind": "bicep", "templatePath": "ghcr.io/radius-project/recipes/local-dev/pubsubbrokers:0.28" } }, "Applications.Dapr/secretStores": { "default": { "plainHTTP": false, "templateKind": "bicep", "templatePath": "ghcr.io/radius-project/recipes/local-dev/secretstores:0.28" } }, "Applications.Dapr/stateStores": { "default": { "plainHTTP": false, "templateKind": "bicep", "templatePath": "ghcr.io/radius-project/recipes/local-dev/statestores:0.28" } }, "Applications.Datastores/mongoDatabases": { "default": { "plainHTTP": false, "templateKind": "bicep", "templatePath": "ghcr.io/radius-project/recipes/local-dev/mongodatabases:0.28" } }, "Applications.Datastores/redisCaches": { "default": { "plainHTTP": false, "templateKind": "bicep", "templatePath": "ghcr.io/radius-project/recipes/local-dev/rediscaches:0.28" } }, "Applications.Datastores/sqlDatabases": { "default": { "plainHTTP": false, "templateKind": "bicep", "templatePath": "ghcr.io/radius-project/recipes/local-dev/sqldatabases:0.28" } }, "Applications.Messaging/rabbitMQQueues": { "default": { "plainHTTP": false, "templateKind": "bicep", "templatePath": "ghcr.io/radius-project/recipes/local-dev/rabbitmqqueues:0.28" } } } }, "systemData": { "createdAt": "0001-01-01T00:00:00Z", "createdBy": "", "createdByType": "", "lastModifiedAt": "0001-01-01T00:00:00Z", "lastModifiedBy": "", "lastModifiedByType": "" }, "tags": {}, "type": "Applications.Core/environments"}

Application 应用模型

Radius 抽象了 Application 对象,翻译过来就是应用。
一个应用可能包含服务、依赖以及关系。
如我们示例中的 demo 应用,包含了 frontend 服务、backend 服务、mongodb 依赖、frontend 与 backend 的关系以及访问方式 Gateway。

这里其实体现了以应用为中心的思想。

Radius 应用设计为与云和平台无关。
这意味着你可以定义一次应用,并将其部署到 Radius 支持的任何云或平台。
这使你可以轻松地在云之间,甚至在云和本地环境之间迁移应用程序。
开发人员可以定义他们的需求和依赖关系(Redis、SQL、Dapr 等),运维可以定义将这些需求绑定到相应云资源的 environment 和 Recipe。

当运维配置好相应的 environment 和 Recipe,研发就可以基于这些能力结合自己实际的业务,使用 Bicep 这种 DSL来完成一个应用的描述和一键部署。

其中 VSCODE 有相关 Bicep 的扩展支持。

总结

本文简单介绍了 Radis。
并通过一个示例和相关概念讲解,来让大家感受到,Radius 如何实现以应用为中心和开发和运维关注分离两个思想。

相关链接:

https://github.com/radius-project/radiushttps://learn.microsoft.com/zh-cn/azure/azure-resource-manager/bicep/

相关文章