目录

Azure Kubernetes服务

Azure资源管理器

先决条件和清理

AKS群集模板

Azure DevOps管道

下一步


在本系列的前面部分,我们使用Azure Functions创建了一个基本的、事件驱动的、云原生应用程序。然后,我们了解了容器化和Kubernetes。

虽然我们可以用函数本身做很多事情,但我们经常需要一些不适合函数模型的功能。为了确保我们的云应用程序仍然可以动态扩展并利用云原生的优势,使用容器是有意义的,尤其是对于运行时间更长的应用程序组件。

在本文中,我们通过使用Azure Kubernetes服务(AKS)构建和部署Kubernetes集群来扩展我们现有的云原生应用程序。然后,在我们的最后一篇文章中,我们将部署应用程序的基于容器的组件。为此,我们使用Azure DevOps和Azure资源管理(ARM)模板,以便我们的单一代码库包含基础结构和应用程序组件的代码。

Azure Kubernetes服务

Azure Kubernetes服务提供了一个由Azure管理的简化Kubernetes集群。只需指定配置和部署节点,无需担心管理和监控集群。Kubernetes承载各种不同的体系结构,Azure支持许多不同的配置,但在本示例中,我们部署了一个简单的节点集群来支持单个容器。

Azure资源管理器

Azure资源管理器是在Azure中管理和部署资源的底层服务。Azure中的所有内容都通过ARM运行,但出于我们的目的,我们使用ARM模板来定义和控制集群所需的资源。

ARM模板是资源管理器用来配置和部署资源的JSON文件,使我们能够像应用程序代码一样创建和管理它们。Azure DevOps(以及其他工具,如GitHub Actions)也可以在这些文件被签入时自动发送到Azure资源管理器进行部署。

先决条件和清理

在创建模板来部署资源之前,我们需要配置两个访问组件:

  • 用于连接到集群节点的SSH密钥对
  • 为Kubernetes群集提供基于角色的访问控制以与Azure资源交互的服务主体

要生成密钥对,请打开Azure门户并单击顶部菜单栏上的Cloud Shell () 图标。这将打开用于处理Azure资源的Bash或PowerShell接口。

在此shell中,输入命令ssh-keygen -t rsa -b 2048并按照提示使用默认的保存密码和密码(您可以将其留空以进行开发,但最好提供密码)。

完成此过程后,应保存标识和公钥文件。使用上传和下载 ( ) 图标,下载这两个文件以备后用。

当我们在这个云shell中时,让我们还通过运行az ad sp create-for-rbac --skip-assignment命令为我们的集群创建服务主体。这会将JSON样式文本输出到命令窗口。保存此文本以访问我们的集群,然后关闭shell窗口。

在我们创建我们的ARM模板之前,我们应该清理我们的Function App和Azure DevOps项目,以便我们有一个地方来放置我们的基础设施代码。首先,创建一个FunctionApp文件夹,并将我们在第一篇文章中使用的所有代码移动到该文件夹中(.gitignore、.git和.vscode除外)。

接下来,创建一个名为Infrastructure的空文件夹来存储我们的ARM模板。不要忘记签入并将这些更改推送到Azure DevOps。

AKS群集模板

现在我们的先决条件已经完成并且我们的项目已经清理完毕,我们可以创建我们的ARM模板。由于Azure资源的大小和范围,创建模板可能是一项艰巨的任务。我们可以从头开始创建模板,但是单个资源上的选项数量可能会让人不知所措。如果您查看AKS资源,您会发现许多潜在的属性需要设置。幸运的是,Azure社区有许多快速入门模板,我们可以将其用作起点。

让我们通过将azuredeploy.json文件作为aks_cluster.json复制到我们的基础结构目录中来使用AKS启动模板。然后让我们逐步了解一些最重要的细节。

所有模板都从定义$schema和contentVersion属性开始。从那里,我们分为三个主要部分:

  • 参数——定义用于配置资源的模板的输入
  • 资源——定义要在Azure中部署的资源
  • 输出——定义模板的返回值

像这样一个编写良好的模板,使资源相当通用,并将大部分灵活性推给了参数。我们可以在通过Azure门户部署模板时使用这些参数,也可以在我们的Azure DevOps管道中定义它们。我们还可以指定一个配置文件,这样我们就不需要通过管道传递选项。

为此,我们在Infrastructure文件夹中创建一个名为aks_cluster_params.json的新文件,代码如下:

{"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#","contentVersion": "1.0.0.0","parameters": {"location": {"value": "centralus"},"clusterName": {"value": "TSAppCluster"},"dnsPrefix": {"value": "TSAppDns"},"linuxAdminUsername": {"value": "tsAdmin"},"sshRSAPublicKey": {"value": "ssh-rsa AAAAB3NzaC1yc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000R3JIOgtLQ9ORNTi/PN6Avk7rNi0ZS5BKrbLeieLhrD06ct2E23Hsb0vnK0w5aOQKhedQz1IOV43MAPU6Om+KC65qzVKVQk30wUoV/gSJhS9trYz+Y8L9twVQ92NKMo+UNXpG5Uhh2Hk6F5ysJBB45lo0jw5h4JQ13pEkCxotFrWmn9XUIigMZpoUuv4RhMROyLLNmy1csndMWkq9zgdxdIsw7mAUes6KiaHWN7hPOzL0sYtwlnLWPgP0sWfLT glenn@cc-884047f1-74f86db768-lblpf"}}
}

此代码配置Azure位置以部署集群、集群名称、dns前缀和管理员用户名。将最后一个值设置为我们在先决条件步骤中创建的id_rsa.pub文件的内容。保存这些文件并签入您的更改。

Azure DevOps管道

现在我们的存储库中有所有组件,我们可以只部署我们的集群,但让我们设置管道来部署我们的应用程序。

单击左侧的Pipelines并创建一个新的Pipeline。

对于连接选项,选择Azure Repos Git,然后选择项目的存储库,您将获得模板列表。

选择Node.js Function App to Linux on Azure,连接到你的Azure订阅,然后选择我们在第一篇文章中创建的Function App。

完成后,您将看到包含订阅详细信息的模板。在我们可以运行之前,我们需要更新一些元素,因为我们存储我们的函数应用程序的位置,以及Node.js的更新版本。具体来说:

  • 在第35行,将Node版本的versionSpec更改为12.x。
  • 在第49行之后,添加行workingDirectory: '$(Build.SourcesDirectory)/FunctionApp'。这将npm指向正确的目录以构建我们的源代码。
  • 最后,在第55行(或添加上述内容之前的第54行),将存档文件rootFolderOrFile属性更改为“$(Build.SourcesDirectory)/FunctionApp”。这确保我们的构建位于创建的ZIP存档的根目录中。

现在,单击Save and Run按钮开始我们的Function应用程序的构建和部署过程。这个部署模板有两个阶段,构建和部署。我们在构建之前添加了第三个阶段,称为基础设施。但是,在我们执行此操作之前,我们需要确保我们的DevOps项目可以向我们的订阅添加资源。

在左侧的菜单面板中,选择项目设置,然后选择管道部分下的服务连接。

选择Azure资源管理器选项并使用服务主体(自动)作为身份验证方法。填写订阅、资源组、名称和描述的详细信息,然后单击保存

一旦我们设置了我们的服务主体,我们就可以将新阶段添加到我们的构建管道中。代码如下:

- stage: InfrastructuredisplayName: Deploy Infrastructurejobs:- job: ClusterdisplayName: Deploy AKS Clusterpool:vmImage: $(vmImageName)steps:- task: AzureResourceManagerTemplateDeployment@3displayName: 'Deploy AKS Cluster'inputs:deploymentScope: 'Resource Group'azureResourceManagerConnection: 'TSTutorialExample'subscriptionId: '37200000-0000-0000-0000-000000000000'action: 'Create Or Update Resource Group'resourceGroupName: 'TSFunctionTutorial'location: 'centralus'templateLocation: 'Linked artifact'csmFile: 'Infrastructure/aks_cluster.json'csmParametersFile: 'Infrastructure/aks_cluster_params.json'deploymentMode: 'Incremental'

此阶段有一个步骤,即使用AzureResourceManagerTemplateDeployment任务类型部署我们的ARM模板和配置文件。如果我们运行此任务的配置,我们需要填充以下输入:

  • azureResourceManagerConnection:我们的服务主体的名称,因此管道可以访问部署资源
  • subscriptionId:我们Azure订阅的唯一标识符
  • resourceGroupName:我们将资源部署到的资源组
  • location:我们要放置资源的Azure位置
  • csmFilecsmParametersFile:我们的ARM模板和参数文件位置

同样值得注意的是,deploymentMode设置为增量后,资源组中已有的资源将保持不变。保存此管道代码并签入后,管道将运行并部署我们的集群。如果您转到Azure门户,您应该会看到群集出现在资源文件夹中。

我们还可以使用kubectl连接到我们的集群并检查正在运行的节点。最简单的方法是再次在Azure门户中打开云控制台并使用以下命令:

az aks get-credentials --resource-group TSFunctionTutorial --name TSAppCluster

这将已配置的kubectl实用程序连接到我们部署的集群。现在,如果您运行kubectl get nodes,您应该看到三个代理节点返回并准备就绪。

下一步

在本文中,我们研究了Azure的托管Kubernetes服务AKS,并使用ARM模板和Azure DevOps管道将一个简单的集群部署到我们的应用程序资源组。在创建管道时,我们还将应用程序配置为自动构建和部署到我们在第一篇文章中配置的资源。

通过将我们所有的应用程序代码组合到一个我们可以在检查更改时部署的代码库,我们可以构建和部署我们的应用程序和基础设施,而无需任何进一步的工作。

在本系列的下一篇也是最后一篇文章中,我们将在我们的集群中部署一个容器化的应用程序组件。

Creating Your First Kubernetes Cluster On Azure - CodeProject

(三)在Azure上创建您的第一个Kubernetes集群相关推荐

  1. 使用 kubeadm 创建一个 kubernetes 集群

    [福利]赠书活动仍在继续中:<大话代码架构> 简介 kubeadm是一个 kubernetes官方提供的快速安装和初始化拥有最佳实践(best practice)的 kubernetes集 ...

  2. 云图说 | 快速创建一个kubernetes集群

    随着应用程序开发向基于容器的方向发展,编排和管理资源的需求变得越来越重要.Kubernetes是一个开源的.功能强大的容器编排系统,用于管理容器化应用和服务,它提供了应用部署.规划.更新.维护的一种机 ...

  3. 【Kubernetes】在CentOS7上通过kubeadm工具快速安装Kubernetes集群(一)

    此文作为学习<Kubernetes权威指南>的相关笔记,可以参考,不适合直接使用 参考文章: https://www.jianshu.com/p/cd4d1fde08bc https:// ...

  4. 容器编排技术 -- 创建Kubernetes集群

    容器编排技术 -- 创建Kubernetes集群 Kubernetes可以在多种平台运行,从笔记本电脑,到云服务商的虚拟机,再到机架上的裸机服务器.要创建一个Kubernetes集群,根据不同场景需要 ...

  5. 在Azure上创建MYSQL服务

    Azure和所有的云服务一样,也提供了MYSQL数据库,在Azure中叫mysql database on azure.下面我们来一起在Azure上创建一个Mysql数据库. 在新建--> 数据 ...

  6. Global Azure上创建SSTP模式***配置介绍

    Global Azure上创建SSTP模式×××配置介绍 说到Windows Azure ×××配置,相信大家都很熟悉了,当然我们已经在前几篇文章介绍了很多***的模式配置,比如从本地到Winodow ...

  7. 容器编排技术 -- 在Azure上使用CoreOS和Weave的 Kubernetes

    容器编排技术 -- 在Azure上使用CoreOS和Weave的 Kubernetes 介绍 在本指南中我将演示如何在Azure云端部署Kubernetes集群.您将使用CoreOS与Weave,We ...

  8. 如何在CentOS上创建Kubernetes集群

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由编程男孩 发表于云+社区专栏 介绍 Kubernetes(常简称为K8s)是用于自动部署.扩展和管理容器化(containerized ...

  9. (一)在GKE上创建MLOps Kubernetes集群

    目录 Kubernetes简述 设置GKE集群 启动GKE集群 创建secrets.yaml文件 下一步 在之前的系列文章中,我们讨论了在一组Docker容器中作为CI/CD  MLOps管道的一部分 ...

最新文章

  1. pip install 报错:Versioning for this project requires either an sdist tarball, ...
  2. 封装自己的控件库:iPhone静态库的应用
  3. Linux学习日记之sshd服务
  4. Ubuntu16.04 + ROS kinetic + 激光slam-cartographer ROS + 数据仿真 + Turtlebot3仿真
  5. java 字节输入流_JavaIO流(一)-字节输入流与字符输入流
  6. VC返回文件所在的路径
  7. 职专计算机怎么学,浅析职业中专计算机专业计算机教学
  8. [论文阅读] Looking for the Detail and Context Devils: High-Resolution Salient Object Detection
  9. 中国移动 呼叫转移 设置
  10. Java使用DES加密解密
  11. 蔡军生先生第二人生的源码分析(2)第二人生的基本功能
  12. 什么手势使用电子计算机比较快,手势功能
  13. 在MATLAB中采用M文件实现对Simulink中的S函数程序实现自动调参数
  14. 基于MobileNetv3实现人脸面部表情识别
  15. OpenCV的区域分割、轮廓检测和阈值处理
  16. 01 JDK8安装教程
  17. 机器学习习题(16)
  18. MASK_RCNN与YOLO系列算法初学者笔记(摘抄自其他)
  19. python networkx 边权重_Python / NetworkX:通过边缘发生频率向边缘添加权重
  20. LJJ-C++接口类代码编写规范

热门文章

  1. 高度固定 宽度裁剪_高领落肩连衣裙的制版裁剪教程才智服装
  2. linux 笔记服务器,Linux服务器 CentOS7.5 操作小笔记
  3. python登录验证程序_Python模拟用户登录验证
  4. visio能做动态原理图_单、双节锂电池2x20W动态升压双声道音频功放组合方案
  5. python psutil替代_Python2.7 psutil模块
  6. python json loads 中文乱码_python实现智能语音天气预报
  7. 冬天人物活动插画|表达有温度的冬季海报必备psd分层素材
  8. PSD分层情人节海报模板,让人眼前一亮
  9. PNG免扣艺术字体素材|为年货季准备好了么?
  10. PNG免扣(抠)素材,直接应用才是设计师友好的帮助图片