介绍 曾经有一个单一软件应用程序的时代,整个应用程序被打包并部署在作为单个进程运行的单个服务器上。我们都知道,在这个模型中,单点故障可能会导致整个应用程序崩溃。 微服务体系结构的发展是为了解决单片应用程序的这个缺点和其他缺点。在容器中托管微服务解决了部署和管理基于微服务的应用程序的一些问题,而像Docker这样的平台使得在可移植的容器中打包应用程序变得很容易。Kubernetes协调了容器化应用程序的部署和管理。 Kubernetes是可以下载并部署到本地环境中的软件,但大多数云托管服务都提供内置的Kubernetes服务,帮助您在其环境中协调云托管功能和微服务。在本文中,我们将演示如何编排整个ASP的部署和扩展。NET Core应用在云端使用Docker和微软的Azure Kubernetes服务(AKS)。 应用程序概述 在本教程中,我们将创建一个简单的ASP。NET Core web应用程序,用Docker封装,然后部署到一个AKS集群。应用程序的逻辑在这里并不重要,因为我们将使用它来部署应用程序,以便在扩展部署时说明应用程序在何处运行。相反,重点是创建容器并使用Kubernetes将应用程序部署到一个AKS集群。当应用程序被dockerized时,我们将创建应用程序的本地映像以在本地进行测试。 您需要一个有效的Azure帐户来进行部署,我们将在开发机器上使用以下应用程序。 针对Windows。net Core 2.1或以上版本的azure cli azure powershell docker 当Windows的Docker安装并运行后,转到设置并启用Kubernetes的复选框,如下所示: 或者,Windows的Docker应该在Linux容器模式下运行,否则,Kubernetes选项将不会显示在设置中。 在Azure CLI安装之后,运行以下命令(az——version)以确保CLI已启动并运行。 我创建了一个简单的ASP。NET Core应用程序,可以克隆或从https://github.com/akhilmittal/az-kubernetes-service下载。 在克隆或下载并解压缩项目之后,执行dotnet run命令,如下所示。这将运行服务器,并告诉服务器在哪个端口监听应用程序。http://localhost: 5000。 打开浏览器并导航到所提供的URL,通常是http://localhost:5000。您将看到,它只是一个简单的应用程序,显示运行该应用程序的主机或容器。目前,它运行在没有容器的开发windows机器上,因此它显示主机机器的名称,在本例中为3593BH2。 用集装箱装ASP。网络核心应用程序 现在我们将使用Docker为ASP创建一个容器。网络核心应用程序。我已经在示例下载中完成了一些工作,因此我们不必遍历创建容器的每个步骤。 导航到应用程序目录的根目录,查看已经创建的Docker文件。这个Docker文件将用于构建映像。 使用docker build命令构建运行时镜像,如下所示: 隐藏,复制Code

docker build . -t aks:local

确保您在包含Docker文件的目录中,然后运行该命令。如果您不熟悉语法,点表示Docker文件位于当前目录,-t开关允许您指定标记aks:local。 这将启动构建过程。 构建完成后,运行docker映像列表命令。它列出了一个名为aks:local的全新形象。 要测试此图像,请使用docker run命令运行基于此图像的容器: 隐藏,复制Code

docker run -d -p 5000:80 aks:local

d开关告诉Docker将其作为守护进程运行。p开关将主机上的端口5000映射到容器上的本地端口80。 执行docker ps命令来查看容器的启动和运行情况。 现在转到浏览器并连接到http://localhost:5000。 我们看到应用程序现在在docker容器下运行,因为主机名现在显示了容器的ID。 通过运行以下命令删除新创建的测试容器: 隐藏,复制Code

docker container rm -f [container name]

对于[容器名称],替换在浏览器中显示的容器的ID,或者运行docker ps命令。 在本地Kubernetes集群上部署 现在,我们将快速地将应用程序部署到本地Kubernetes集群,以演示使用Kubernetes手动编排的方法。这将提供一个基线,以比较Kubernetes编配与AKS。 在本地Kubernetes集群上部署映像有两种方法:交互式和声明式。 当使用互动应用程序roach,您可以将Kubernetes的所有部署和编排步骤直接指定为带参数的命令。使用声明式方法,可以在Kubernetes部署清单文件中指定详细信息,并在运行Kubernetes时使用该清单作为参数。 让我们从一个交互式示例开始,运行下面的命令: 隐藏,复制Code

kubectl run aks-deployment --image=aks:local --port=80 --replicas=3

这里的关键选项是——replicas,我们使用它来指定应用程序需要三个副本。当执行命令时,将创建一个部署,其中所需的状态设置为三个副本。创建一个副本集,以确保应用程序始终有三个副本在运行。 调度器在工作节点上调度pod部署,这将命令在工作节点上运行的Docker引擎拉出映像,然后在pods中运行。 部署应用程序后,创建一个服务来公开此部署。 隐藏,复制Code

kubectl expose deployment aks-deployment --type=NodePort 

这将创建服务。通过运行kubectl get服务或kubectl get svc来验证它。 要连接到服务,启动浏览器并连接到本地主机,然后连接到节点上公开的端口号。现在我打开了三个浏览器并点击了相同的URL。 我们看到容器主机名发生了变化。这是因为在服务器后面,有三个pods或容器,服务负责向它们平衡请求的负载。 使用delete命令删除部署和服务,从而清理它们。 隐藏,复制Code

kubectl delete deployment aks-deployment

同样,也要删除该服务。 隐藏,复制Code

kubectl delete service aks-deployment

声明式方法使用保存在部署清单文件中的预配置选项。我在应用程序的根目录中包含了一个YAML清单文件:aksdeploy.yml。 该文件有两个部分。第一个指定如何创建部署。第二个指定如何将其公开为服务。 打开文件,将副本数("replicas:")改为3,图像文件名("image:")改为aks:local。 下面的命令使用aksdeploy.yml中的配置创建部署和服务。 隐藏,复制Code

kubectl create -f .\aksdeploy.yml

使用kubectl get svc检查服务的状态,然后启动浏览器连接到服务。您应该看到与前面的交互式演示相同的结果,请求分布在可用的副本上。 同样,删除部署和服务,但这一次通过指定文件名。 隐藏,复制Code

kubectl delete -f .\aksdeploy.yml

Docker镜像和Azure容器注册表(ACR) 用户容器的一个关键部分是让它们在注册表中随时可用。在本例中,我们将把应用程序的Docker图像推送到Azure容器注册中心。 我们将使用Azure CLI。使用az登录命令登录到Azure。 创建一个资源组,名称为aksgroup,位置为australiaeast。(你可以使用你自己的位置。) 隐藏,复制Code

az group create -n aksgroup -l australiaeast

现在创建一个容器注册项,名称为learningaksacr,资源组为aksgroup,位置为australiaeast(或您首选的位置),sku为标准。 隐藏,复制Code

az acr create -n learningaksacr -g aksgroup --sku standard

创建容器注册表后,需要推入映像。首先,登录。 隐藏,复制Code

az acr login -n learningaksacr

成功登录之后,在推入之前,用容器注册中心的登录服务器名标记本地映像。 隐藏,复制Code

az acr list -o table

复制登录服务器名并保持方便。要列出这台机器上可用的Docker镜像,可以使用Docker镜像列表命令。我们有aks:local映像,需要使用登录服务器名对其进行标记。 现在,运行docker tag命令。指定本地图像名称、新名称(将是登录服务器名称)、图像名称和标记。 隐藏,复制Code

docker tag aks:local learningaksacr.azurecr.io/aks/v1

通过docker图像列表命令验证这一点,我们会看到成功标记的图像。本地和标记的图像共享相同的图像ID。 现在使用docker push命令将标记的图像推送到注册表。 隐藏,复制Code

docker push learningaksacr.azurecr.io/aks/v1:latest

这个映像现在可以被任何其他Docker机器使用或访问,或者AKS集群可以轻松地从注册表中提取这个映像。 部署Azure Kubernetes服务(AKS)集群 我们在本地部署了Kubernetes集群,现在是时候使用AKS部署到Azure了。通过AKS,可以很容易地提供生产级的Kubernetes集群。 在继续之前,创建一个服务主体,将应用程序注册到Azure Active Directory (AD),并为其创建一个身份。如果应用程序将自己暴露给其他Azure服务,则需要注册的ID。 使用Azure CLI使用以下命令创建一个服务主体: 隐藏,复制Code

az ad sp create-for-rbac --skip-assignment

创建之后,您将获得服务主体的appID、displayName、URL、密码和租户属性。保留这些信息以备以后参考。 现在将权限授予服务主体来拉取im从ACR开始。我在这里使用PowerShell窗口。 使用az ACR show命令获取ACR资源ID ($acrId)。 隐藏,复制Code

az acr show --name learningaksacr --resource-group aksgroup --query "id"

然后将读取器角色授予AKS集群,以便它可以使用az角色分配创建命令读取存储在ACR中的映像。 隐藏,复制Code

az role assignment create --assignee [appID] --role Reader -- scope $acrId

使用为服务主体提供的appID,范围被设置为ACR的资源ID,该资源ID是从az ACR show命令获取的。 现在使用az AKS create命令创建我们的AKS集群。提供名称和资源组。对于节点数,将其设置为单个工作节点。使用generate- SSH -keys来生成SSH公共(和私有)密钥文件。指定服务主体和客户端秘密,即之前复制的应用程序ID和密码。运行该命令。 隐藏,复制Code

az aks create `
>> --name learningakscluster `
>> --resource-group aksgroup
>> -- node-count 1 `
>> --generate-ssh-keys `
>> --service-principal [appID] `
>> --client-secret [password]

部署完成后,要从客户端计算机连接到我们的AKS集群,请使用kubectl命令行界面。 如下图所示,位于用户位置的.kube文件包含设置为在端口6445上运行的本地服务器的服务器设置。 通过使用az AKS Get -credentials命令,指定名称和资源组名称,获取我们刚刚部署的AKS集群的凭据。 现在,回到.kube\配置,注意服务器现在反映了在Azure中运行的AKS集群。要进行验证,请执行kubectl get nodes命令。我们可以看到单个节点工作人员确认了我们的AKS集群的成功配置。 部署的ASP。NET Core应用到AKS 集群已经设置好,应用程序现在可以部署到集群中。打开aksdeploy。我们前面在应用程序的根目录中看到的yml文件。 当前,该映像引用了一个本地Docker映像。让我们改变它来引用我们推送到Azure容器注册中心的图像。代替指向aks:local的“image:”属性,将其更改为服务器上的图像名称,标记为:learningaksacr.azurecr.io/aks/v1:latest。 之前,我们将此应用程序部署到本地集群,并使用服务类型作为NodePort。现在我们正在将它们部署到Azure这样的云服务中,我们可以将“type:”属性更改为LoadBalancer。 保存文件,然后使用kubectl apply命令进行部署。 隐藏,复制Code

kubectl apply -f .\aksdeploy.yml

这将创建定义的Kubernetes对象,其中包括部署和服务。创建的服务将应用程序公开到internet。 要监视部署的进度,使用kubectl get服务命令和——watch参数。最初,aks部署服务的外部IP显示为挂起。一旦外部IP从挂起更改为IP地址,就复制该IP。 要测试应用程序,请浏览到外部IP地址。 我们可以看到我们的应用程序在一个AKS集群的工作节点上运行。 结论 现在您应该了解了如何封装和部署ASP。NET Core应用程序——或任何类似的微服务应用程序——到Azure Kubernetes服务。在本文中,我们还探讨了Azure容器注册中心的作用。 虽然我们绕道演示了在本地系统上的部署,但这很可能说明了扩展Kubernetes部署是多么容易,无论是交互式的还是通过清单的声明性配置。 要了解更多关于通过Azure Kubernetes服务使用Kubernetes的信息,请从Microsoft Azure文档中对Azure Kubernetes服务(AKS)的介绍开始。阅读本文后,您应该熟悉其中的一些步骤,但是文档将带您了解其他选项和场景。 所有Azure服务都与成本相关。确保你勤奋地使用这些工具,如果不需要,就关掉或清除它们。 历史 2019年7月22日:初版 本文转载于:http://www.diyabc.com/frontweb/news19221.html

用集装箱装ASP。带有Docker和Azure Kubernetes服务的NET Core应用程序的更多相关文章

  1. 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

    本文是对 <.NET Tutorial - Deploy a microservice to Azure> 的翻译和实践.入门级踩坑实践,k8s 大佬请回避,以免耽误您宝贵的时间. 介绍 ...

  2. Azure Kubernetes 服务 (AKS)

    一.首先创建集群 1,注意:一定要选择Kubernets Service(红框处),上面的那一堆虚拟机都没有用, 2,设置好相关属性,集群大小可后面更改节点数,但是节点的大小不可更改 二.登陆集群 在 ...

  3. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...

  4. Azure Kubernetes Service 入门

    一,引言 上一节,我们使用Azure CLI 创建了Azure Resource Group 和 Azure Container Registry 资源,并且将本地的一个叫 “k8s.net.demo ...

  5. Azure Kubernetes(AKS)部署及查看应用资源

    简介 上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上.但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对 ...

  6. 利用VisualVM监测Azure云服务中的Java应用

    在做Java开发的时候,我们需要在上线之前对程序进行压力测试,对程序的性能进行全面的监控,了解JVM的CPU,内存,GC,classes,线程等等信息,或者在程序上线运行的过程当中以便于诊断问题或者对 ...

  7. 不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序

    一般我们写好了应用程序想要部署发布它,要么发布到物理机,要么发布到虚拟机,要么发布到容器来运行它.现在有了Azure应用服务,我们可以完全不用管这些东西,只管写好自己的代码,然后使用VisualStu ...

  8. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  9. 使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序

    说在前面 在阅读本文之前,您必须对 Docker 的中涉及的基本概念以及常见命令有一定了解,本文侧重实战,不会对相关概念详述. 同时请确保您本地开发机器已完成如下安装: Docker 18.06 或更 ...

随机推荐

  1. git 合并两个分支的某个文件

    软件开发基本都是多个feature分支并行开发,而在上线前有可能某个分支的开发或测试还没有完成,又或者是产品调整,取消了该分支功能的上线计划,我们在release前不合并该分支即可,然而如果该分支中的 ...

  2. Google Kick Start 2020 Round B T1-3

    这场题目除了最后一题稍微难了点,其他都是1眼题. T1 Bike Tour 没啥好说的,一个循环解决. T2 Bus Routes 没啥好说的,从第\(n\)的车站开始贪心取最晚的. T3 Robot ...

  3. 测试JsonAnalyzer2的12个测试用例:

    测试用例如下: 01. Compact json text={"status":"","message":"success&quo ...

  4. SpringMVC-数据提交

    数据提交 目录 数据提交 1. 前端的参数与controller中的参数名一致 2. 前端的参数与controller中的参数名不一致 3. 前端接收的是一个对象 4. 总结 5. 数据显示到前端 1 ...

  5. linux如何把普通用户添加到sudo组

    sudo原理:运行命令时,系统检查/etc/sudoers 配置文件,看这个用户是否有执行sudo的权限,如果有权限,系统要求输入用户自己的密码,如果密码输入正确,系统会以root身份运行 passw ...

  6. tcp、http 学习小结

    tcp.http 学习小结 前言 最近因为cdn的一个问题,困扰了自己好久.因为需要统计网站访问的成功数,而且要求比较精确.目前的实现不能满足要求,因为没有区别访问成功与否,也没有对超时做处理.期间解 ...

  7. 一次MySQL索引失效引发的思考

    最近公司做了一个千万数量级的项目,由于要求性能比较高,每一个相对慢的查询都需要优化,项目经理是一个比较有经验的开发人员,基本上遇到问题都会先自行处理:或自己分析原因或网络寻求帮助. 但是项目平稳运行一 ...

  8. Istio中的流量配置

    Istio中的流量配置 目录 Istio中的流量配置 Istio注入的容器 Istio-init istio-proxy Envoy架构 Pilot-agent生成的初始配置文件 Envoy管理接口获 ...

  9. k8s部署使用Dashboard(十)

    安装Dashboard 前面博客Kubernetes 所有的操作我们都是通过命令行工具 kubectl 完成的.为了提供更丰富的用户体验,Kubernetes 还开发了一个基于 Web 的 Dashb ...

  10. matlab中的多项式计算

    在做多项式加法的时候需要做多项式扩展.这里将g1扩展到与f等长 多项式的乘积,是两个多项式之和减1, 多项式求导函数:ployder() 先建立两个多项式,再求a的导函数 在计算两个多项式乘积的导函数 ...