基于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 ...
随机推荐
- js 模板方法模式
* 分离出共同点 function Beverage() {} Beverage.prototype.boilWater = function() { console.log("把水煮沸&q ...
- python学习笔记(十六)-Python多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- 定要过python二级选择题第一套
1. 2.https://zhuanlan.zhihu.com/p/199883725 树,队列,二叉树,树的基本回忆 二叉树: 分叉为俩个; 一个是右子树一个是左子树 队列:先进先出 柞:后进先出 ...
- AT4518-[AGC032C]Three Circuits【欧拉回路】
正题 题目链接:https://www.luogu.com.cn/problem/AT4518 题目大意 给出\(n\)个点\(m\)条边的一张简单无向联通图,求能否把它分成三个可重复点的环. \(1 ...
- 自从学会了Python自动化Pytest框架,领导再也不敢在我背后指手划脚了
前言 大家都知道Python有自带的单元测试框架unittest,那为什么还要学习Pytest呢?先了解下Pytest优点 pytest: pytest是一个非常成熟的全功能的Python测试框架,是 ...
- 学校选址(ArcPy实现)
一.背景 合理的学校空间位置布局,有利于学生的上课与生活.学校的选址问题需要考虑地理位置.学生娱乐场所配套.与现有学校的距离间隔等因素,从总体上把握这些因素能够确定出适宜性比较好的学校选址区. 二.目 ...
- 关于django配置好静态文件后打开相关图片页显示404的解决方法
在url里设置以上代码即可,即可解决图片显示异常(出现此问题的根本原因是django版本)django3后需要加以上代码)
- Hibernate的介绍及入门小案例
1.Hibernate的诞生 在以前使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心,例如对几十,几百张包含几十个字段 ...
- QFNU-ACM 2021.10.09 Rating补题
A - A CodeForces - 478A 注意点: 和为0时要特判一下. 代码: #include<bits/stdc++.h> using namespace std; int m ...
- Hive面试题整理(一)
1.Hive表关联查询,如何解决数据倾斜的问题?(☆☆☆☆☆) 1)倾斜原因:map输出数据按key Hash的分配到reduce中,由于key分布不均匀.业务数据本身的特.建表时考虑不周.等原因 ...