基于Dapr的 Azure 容器应用
微软在 Ignite 2021 大会上发布了预览版的Azure Container Apps,这是一个完全托管的无服务器容器运行时间,用于大规模构建和运行现代应用程序。从2021 年 11 月 2 日)起,Azure 容器应用程序可在公共预览中使用。虽在服务到达 GA 之前,Azure Container Apps 可能会发生变化。因此我们可以用来学习,不建议用于生产。
Azure Container Apps是什么?
- kubernetes 是目前最为强大的应用程序平台调度器,然而他很复杂,有着陡峭的学习曲线,云原生计算基金会(CNCF)联合Linux基金会推出了皆在考察相关从业者对Kubernetes的开发知识了解程度的认证考试Certified Kubernetes Application Developer (CKAD),通过CKAD考试后,持证者即被认可能够为Kubernetes设计、构建、配置和部署云原生应用,在Kubernetes中能够定义应用程序资源,使用核心功能构建、监控和诊断可伸缩的应用程序。开发人员要通过CKAD考试的陡峭学习曲线,然后才能充分利用kubernetes提供的功能,Azure Container Apps 把这里的陡峭学习曲线抹平了。
- Azure Container Apps就是kubernetes之上的抽象层,是一种运行容器化应用程序的完全托管的服务。它让你专注于构建应用程序,而不是管理配置kubernetes。
- 利用Kubernetes Event-driven Autoscaling (KEDA) 缩放Container Apps,无论你是想根据CPU、内存等资源对应用缩放,还是基于消息队列的长度对特定的负载进行缩放。
- 利用分布式应用运行时 Dapr 轻松构建和连接微服务。 Dapr允许你构建松耦合的微服务应用程序,而不是构建一个分布式单体应用,在Azure Container Apps里我,们利用 Dapr 及其组件构建具有弹性、可扩展性和松耦合的应用程序
- 利用Envoy proxy 路由外部进来的HTTP请求流量,Envoy就有强大的网络代理功能,我们基本不需要配置就可以实现强大的功能,比如金丝雀发布
- 您可以随时可以从 Azure Container Apps 升级到更自主的 Azure Kubernetes 服务 (AKS),并释放kubernetes 的全部力量。
Azure Container Apps的核心组件
Azure Container Apps有一系列组件,我们必须了解并利用这些组件来构建企业级云本地应用程序。
- Container:我们可以在Azure Container Apps里运行容器,这些容器和k8s 一样可以从各种容器仓库中拉取容器镜像,和k8s 一样,Azure Container Apps 也是用Pod 作为运行容器的最小单位,我们可以在Pods里定义多个容器,这个k8s 上通常的SideCar 模式就是这样的,Pod的所有容器共享硬盘和网络资源。目前 Azure Container Apps只支持Linux 容器。
- Revisions:Revision 表示Pod的不可变快照,至少有一个Revision,这是初始部署的时候自动创建的。通常我们会在某个时间点对Pod 做多次的Revision,以实现金丝雀发布和A/B测试.
- Container Apps: 容器应用程序包括至少一个Revision 。每个容器应用程序都可以进行主动和非活动Revision 。但是,它至少有一个主动Revision 。如果不再需要Revision ,我们可以停用Revision 。(我们还可以重新激活非活动Revision )
- Environment: Environment 至少有一个容器应用程序组成。每个环境是一个安全边界,这意味着其所有容器应用程序都部署到专用的 Azure 虚拟网络中。所有由Environment 内部容器产生的日志都发送到专用的 Azure Log Analytics 。
下面我们就来玩一下Azure Container App 体验一下,部署一个简单的容器到Azure容器应用程序,具体文档参见 https://docs.microsoft.com/zh-cn/azure/container-apps/get-started?tabs=bash 。
需要注意的是当前Azure Container App 只在 北欧(northeurope
) 和加拿大中部 (canadacentral
)这两个区域可用
首先,我们必须为 Azure CLI 安装 Azure Container App 扩展。
az extension add \
--source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl
设置以下环境变量:
RESOURCE_GROUP="my-containerapps"
LOCATION="canadacentral"
LOG_ANALYTICS_WORKSPACE="containerapps-logs"
CONTAINERAPPS_ENVIRONMENT="containerapps-env"
定义这些变量后,可以创建一个资源组来组织与新容器应用相关的服务。
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
升级 CLI 并提供新的资源组后,可以创建容器应用环境并部署容器应用。
创建环境
Azure 容器应用中的环境围绕一组容器应用创建安全边界。 部署到相同环境的容器应用部署在同一虚拟网络中,并将日志写入同一个 Log Analytics 工作区。
Azure Log Analytics 用于监视创建容器应用环境时所需的容器应用。
使用以下命令创建新的 Log Analytics 工作区:
az monitor log-analytics workspace create \
--resource-group $RESOURCE_GROUP \
--workspace-name $LOG_ANALYTICS_WORKSPACE
接下来,检索 Log Analytics 客户端 ID 和客户端密码。请确保单独运行每个查询,以便有足够的时间完成请求。
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az monitor log-analytics workspace show --query customerId -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`
LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=`az monitor log-analytics workspace get-shared-keys --query primarySharedKey -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`
单个容器应用部署到 Azure 容器应用环境。 若要创建环境,请运行以下命令:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--logs-workspace-id $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--logs-workspace-key $LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET \
执行到这里的时候报错了
Command group 'containerapp env' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
MissingRegistrationForLocation: The subscription is not registered for the resource type 'kubeEnvironments' in the location 'canadacentral'. Please re-register for this provider in order to have access to this location.
后面我们用Azure的Portal 页面来进行下面的实验
通过Portal 进行创建也失败了。
基于Dapr的 Azure 容器应用的更多相关文章
- 【原创】基于Docker的CaaS容器云平台架构设计及市场分析
基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...
- 本地使用 Docker Compose 与 Nestjs 快速构建基于 Dapr 的 Redis 发布/订阅分布式应用
Dapr(分布式应用程序运行时)介绍 Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言 ...
- NodeJS 基于 Dapr 构建云原生微服务应用,从 0 到 1 快速上手指南
Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr 确保开发人员专注 ...
- dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器
# dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器 #环境centos 7.4 docker 18.03.0-ce # nuxus,创建maven本地源(可 ...
- 腾讯基于Kubernetes的企业级容器云平台GaiaStack (转)
GaiaStack介绍 GaiaStack是腾讯基于Kubernetes打造的容器私有云平台.这里有几个关键词: 腾讯:GaiaStack可服务腾讯内部所有BG的业务: Kubernetes:Gaia ...
- 基于反射启动Spring容器
基于反射启动Spring容器 package com.maple.test; import org.springframework.context.ApplicationContext; import ...
- 【OF框架】在Visual Studio中发布Docker镜像,推送镜像到Azure容器注册表
准备 拥有Azure账号,已经创建 Azure容器注册表,获得注册表地址.账号.密码 本地已经在Visual Studio登录Azure账号. 本地已经拥有Docker环境 注意:首次发布Docker ...
- 【Spring Framework】Spring入门教程(二)基于xml配置对象容器
基于xml配置对象容器--xml 标签说明 alias标签 作用:为已配置的bean设置别名 --applicationContext.xml配置文件 <?xml version="1 ...
- Spring系列9:基于注解的Spring容器配置
写在前面 前面几篇中我们说过,Spring容器支持3种方式进行bean定义信息的配置,现在具体说明下: XML:bean的定义和依赖都在xml文件中配置,比较繁杂. Annotation-based ...
随机推荐
- 哪5种IO模型?什么是select/poll/epoll?同步异步阻塞非阻塞有啥区别?全在这讲明白了!
系统中有哪5种IO模型?什么是 select/poll/epoll?同步异步阻塞非阻塞有啥区别? 本文地址http://yangjianyong.cn/?p=84转载无需经过作者本人授权 先解开第一个 ...
- Java基础系列(34)- 什么是数组
数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
- tomcat 跨域的配置
* 允许所有跨域 E:\apache-tomcat-7.0.81\conf\web.xml <filter> <filter-name>CorsFilter</fil ...
- P4980-[模板]Pólya定理
正题 题目链接:https://www.luogu.com.cn/problem/P4980 题目大意 \(n\)个物品图上\(m\)种颜色,求在可以旋转的情况下本质不同的涂色方案. 解题思路 既然是 ...
- requirejs的加载原理 - 场景1. 定义一个require依赖a模块
我们学习一个新的技术,熟练的使用之后,就应该去探索它的原理.这篇文章我们来探索下requirejs的原理. 从4个场景来探索requirejs的原理 场景1. 定义一个require依赖b模块 场景2 ...
- Spring Bean装配笔记
Spring Bean装配笔记 Spring中的Bean是一个很重要的概念.Spring作为一个Bean容器,它可以管理对象和对象之间的依赖关系,我们不需要自己建立对象,把这部分工作全部转交给容器完成 ...
- 手机淘宝轻店业务 Serverless 研发模式升级实践
一.前言 随着 Serverless 在业界各云平台落地,阿里内部 Serverless 研发平台.各种研发模式也在业务中逐步落地,如火如荼.在此契机下,淘系团队启动了轻店 Serverless 研发 ...
- 干货 | 数据为王,携程国际火车票的 ShardingSphere 之路
以下文章来源于携程技术 ,作者瑞华 作者简介 瑞华,携程高级后端开发工程师,关注系统架构.分库分表.微服务.高可用等. 一.前言 随着国际火车票业务的高速发展,订单量快速增长,单数据库瓶颈层面的问题逐 ...
- 详解build-gradle文件
目录 gradle 两个build.gradle文件 最外层目录下的build.gradle文件 jcenter dependencies闭包 app目录下的build.gradle文件 com.an ...
- 内网渗透DC-1靶场通关(CTF)
最新博客见我的个人博客地址 DC系列共9个靶场,本次来试玩一下DC-1,共有5个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题. ...