使用YAML部署Azure容器的实例

419 阅读7分钟

Azure容器实例为在Azure基础设施中快速实施基于容器的图像提供了一个灵活的解决方案。它不需要构建虚拟机、安装Microsoft SQL Server等应用程序或配置软件。你可以从库中选择容器镜像并构建解决方案。你可以使用非持久性(默认)和持久性存储,以避免在你的容器状态改变为停止和重启时丢失容器数据。

在以前的文章中(底部的TOC),我们探讨了以下容器实例部署的方法。

  • Azure门户网站
  • Azure CLI
  • ARM模板
  • 使用容器实例的持久化存储部署

本文给大家介绍了使用YAML的Azure容器实例的操作方法。

注意:本文没有对Azure容器实例进行详细的描述或其配置。在继续阅读本文之前,你应该先浏览一下TOC文章。

YAML的介绍

YAML是Yet Another Markup Language的缩写,它是一种数据序列化文件,特别用于配置文件。它是一种用户友好型语言,提供广泛的语言支持。YAML 是一种区分大小写的语言,使用**.yaml** 或 .yml作为文件扩展。它被认为是JSON文件的一个超集。然而,YAML往往比JSON更具可读性。

让我们看看一个基本的YAML文件,以了解YAML的概念。

---
# It is a sample YAML file
name: Mary Smith
age: 27
location: India
  • YAML文件以三个破折号(- - -)开始。如果你在YAML文件中包含多个文件,每个文件以三个破折号开始。
  • 评论以哈希(#)开始。你必须用空格将注释与其他标记分开。
  • YAML由键值对组成。例如,在上面的代码中。
    • key: 名称
    • 值:值。玛丽-史密斯
  • YAML支持多种数据类型,如整数、浮点数、字符串。
    • 字符串可以用单引号、双引号或无引号括起来。
    • 要使用一个成员列表,请使用前面的连字符(-)。
  • 你可以使用一个数组,使用冒号(:)的键值格式。它应该由大括号{}括起来。
  • 要指定一个null,使用tilde(~)或未引用的null字符串字面。
  • 你可以使用一个管道(|)字符来保留换行符。你可以用它来指定长字符串或多行字符串。

Azure容器实例的YAML配置文件

我们可以通过在YAML配置文件中指定容器配置,在一个容器组中部署多个容器。之前,在文章中。 使用ARM模板在Azure中部署一个容器实例中,我们学习了Azure资源管理器模板,以实现容器部署的自动化。

在本文中,我们将使用部署以下容器。

  • Ubuntu上带有SQL Server 2019镜像的Azure容器实例
  • SQL服务器镜像:mcr.microsoft.com/mssql/server:2019-CU12-ubuntu-20.04

注意:你可以参考 https://hub.docker.com/_/microsoft-mssql-server 查阅Docker Engine的Microsoft SQL Server on Linux的官方镜像。

为了配合文章,我们有以下要求。

  • Azure门户中的Azure Cloud Shell bash环境或
  • 本地安装的Azure CLI扩展
  • Azure凭证
  • Visual Studio Code作为YAML脚本编辑器

注意:你可以从以下网址下载Visual Studio代码的最新版本。 https://code.visualstudio.com/

我们将使用Azure门户中的Azure Cloud Shell bash终端。为此,请登录Azure门户,并点击云外壳图标,如下图所示。

Launch Azure Cloud Shell

你会在Azure门户中得到以下BASH终端。

Launch bash terminal

用于容器部署的YAML脚本如下。我们可以使用安全字符串作为SQL SA的密码;但是,为了演示,我用简单的文本指定密码。

apiVersion: 2019-12-01
location: eastus
name: securetest
properties:
containers:
- name: mycontainer
properties:
environmentVariables:
- name: 'ACCEPT_EULA'
value: 'Y'
- name: 'MSSQL_SA_PASSWORD'
value: 'India@123'
image: mcr.microsoft.com/mssql/server:2019-CU12-ubuntu-20.04
ports:
- port: 1433
resources:
requests:
cpu: 2
memoryInGB: 2
osType: Linux
restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

在终端中执行该脚本进行容器部署之前,我们先了解一下该脚本。

  • 地点。它是我们要部署资源的Azure区域
  • 容器属性。
    • 使用键 "name "和值"... "定义环境变量
  • 用于SQL Server的azure容器镜像
  • 端口。输入用于通信的SQL Server端口号。我们将在本节中使用默认的1433端口。
  • 在脚本中为你的容器配置指定CPU和MemoryInGB。
  • 操作系统类型。Linux,它应该与我们在脚本中指定的应用程序镜像一致
  • 类型。它是Azure容器类型。它的值将是 -Microsoft.CotainerInstance/containerGroups

让我们切换到bash终端。在这里,我们将使用内置的代码编辑器创建一个YAML脚本文件。执行命令代码deploy-aci.yaml ,创建一个空的YAML文件来编写我们的脚本。你可以写你的代码或粘贴上面为容器资源指定的脚本。

YAML code file

保存脚本文件并关闭编辑器。现在,我们已经准备好部署Azure容器实例了。为了执行YAML脚本,我们使用Azure CLI命令--az container create ,并使用容器部署的参数**-file** 。

    az container create --resource-group myResourceGroup --file deploy-aci.yaml

你会得到JSON脚本输出,显示Azure容器实例已成功部署。

Create Azure container instance with YAML

你可以使用Azure CLI或门户来验证容器。它的状态应该是正在运行,如下图所示。

Container status

以YAML格式导出现有的Azure Container Instance

假设你是YAML的初学者,或者有一个具有各种参数和配置的容器实例。在这种情况下,写一个脚本可能是一个耗时且略显困难的任务。因此,我们可以使用逆向工程的方法。

  • 使用你的平台选择部署一个Azure容器实例。例如,你可以用以下任何一种方式进行部署。
    • Azure门户网站
    • Azure CLI
    • Azure ARM模板

Azure CLI命令--az container export 可以导出YAML脚本中的容器。你可以修改文件内容,如容器名称、端口、CPU、内存。你可以使用更新的YAML脚本进行进一步的资源部署。

该脚本有以下输入。

  • 输出文件格式。指定输出容器的YAML的具体(yaml)格式
  • 名称:指定你希望导出的容器的名称
  • resource-group:指定资源组的名称
  • file: 输入希望导出的yaml脚本文件名。
    az container export --output yaml --name myazuresql --resource-group myResourceGroup --file myazuresql.yaml

它导出了指定的Azure容器实例。你可以用 ls命令验证导出的文件,以列出当前目录中可用的文件。

Export custom container

我们可以在Cloud Shell的代码编辑器中打开该文件,也可以在本地系统中下载该文件并进行编辑以获得更好的体验。要下载生成的YAML脚本,请点击图标-上传/下载文件

Download files from CLI

下载文件的提示中,你需要输入完全合格的文件路径。在这种情况下,导出的文件存在于主目录中。因此,输入带有YAML扩展名的文件名,如下图所示。

Specify the file path

点击下载,在本地系统的VS Code中打开该文件。

Open file in visual studio code

为Azure容器实例导出的脚本如下所示。

The exported script for Azure Container Instance

在容器部署过程中,你可以通过修改参数值来重新使用这个导出的脚本。例如,我修改了容器名称、DNS名称标签、IP地址。

additional_properties: {}
apiVersion: '2018-10-01'
extended_location: null
identity: null
location: eastus
name: myazuresql1
properties:
containers:
- name: myazuresql1
properties:dns lable, IP address as public.
environmentVariables:
- name: ACCEPT_EULA
value: Y
- name: MSSQL_SA_PASSWORD
value: India@1234
image: mcr.microsoft.com/mssql/server:2019-CU12-ubuntu-20.04
ports:
- port: 1433
protocol: TCP
resources:
requests:
cpu: 2.0
memoryInGB: 2.0
ipAddress:
dnsNameLabel: mysqlazure1
fqdn: mysqlazure.eastus.azurecontainer.io
ip: public
ports:
- port: 1433
protocol: TCP
type: Public
osType: Linux
restartPolicy: Always
tags: {}
type: Microsoft.ContainerInstance/containerGroups

你可以用更新的资源配置替换myazuresql.yaml的内容,或者如前所示创建一个新的YAML文件。在Azure CLI中,指定资源组名称、YAML脚本文件。如下图所示,使用Azure CLI和YAML脚本,容器部署正在进行中。

   az container create --resource-group myResourceGroup --file myazuresql.yaml

Updated configuration

一旦容器部署完毕,记下公共IP地址和FQDN。

Public IP and FQDN

使用公共IP地址或FQDN验证SQL Server与Azure Container Instance的连接。如果你在SSMS中查看服务器名称,它显示的是以SandboxHost开头的名称。SQL Server版本是安装在Ubuntu 20.04上的开发者版本。

SQL Server host name

总结

本文探讨了用于Azure容器实例部署与SQL Server 2019 Linux镜像的YAML脚本。我们还探讨了如何将现有的容器导出到YAML文件中,用你的配置更新该文件,并使用Azure CLI重新部署它们。