源自 Azure 的 Azure stack 作为一款业界唯一的和领先的公有云平台一致的混合云平台,能够帮助企业客户从自有数据中心交付 Azure 云服务。作为《Azure Stack 技术深入浅出系列》的第三篇文章,本文将介绍 Azure Stack 部署完成以后,如何快速的管理和维护这套系统环境,包括虚拟机的管理、远程 VPN 连接、传输部署镜像、远程监控等。本文将通过一套 Azure Stack 运维工具集——Azure Stack Tools 来尝试使用和管理 Azure Stack 集群环境。

\\

Azure Stack Tools 是在 GitHub 上维护的一套 Azure Stack 工具集,由微软 Azure Stack 团队为系统开发者和运维者提供的一款基于 Azure Resources Manager 的脚本工具。为了混合云管理开发运维一致性的设计原理,它沿袭了 Azure Resource Managers 设计风格的指令集,可以使开发者与运维者能够像使用 AzureRM 模块一样使用 Azure Stack Tools。不同于 Portal 界面,Azure Stack Tools 能够批处理相关运维、监控操作,为相关人员节省不必要的工作。

\\

这一篇,我们将探讨以下几个方面:

\\

  • \\t

    准备工作:部署前准备、获取 Azure Stack Tools

    \\t\\t

  • \\t

    功能介绍及实例:安装 Azure Stack、远程连接、上传镜像、部署虚机、部署模板

    \\t\

就在本文撰写过程中,2017 年 7 月 10 日 Azure Stack Development Kit(Azure Stack PoC 版本 GA 之后的名字) GA,Azure Stack Tools 也进行了一定程度的更新。后续,我们会根据更新内容测试之后,更新相关技术文档。

\\

部署前准备

\\

在部署之前需要确认用于部署的物理环境是否能够满足部署的基本要求,建议参阅《Azure-Stack-PoC-Deployment》(http://www.a-stack.com/Azure-Stack-PoC-Deployment/)中第一章节“部署前准备”。

\\

获取 Azure Stack Tools

\\

首先我们通过 git 工具从代码库中下载 Azure Stack Tools。

\\

\git clone https://github.com/Azure/AzureStack-Tools.git --recursive

\\

打开 AzureStack-Tools 文件夹,我们看到 Azure Stack Tools 子模块,他们涵盖了部署、连接 VPN、虚机管理、监控等多个不同功能。本篇我们将主要介绍部署、连接和虚机管理这三大功能。

\\

\\

辅助 Azure Stack 安装工具

\\

Azure Stack Tools 的里提供一些脚本用于 Azure Stack 部署流程, Azure Stack Development Kit 发布之后,新推出了基于 GUI 的部署模式,简化了部署流程,有兴趣的读者可以研究一下 Azure Stack Tool 提供的相关脚本,相信对于理解 Azure Stack 基础架构会有一定的帮助。

\\

使用 Azure Stack Tools 之前,我们必须安装 PowerShell 模块。可以使用如下代码测试是否已安装模块:

\\

\Find-Module -Name azurerm.*\Find-Module -Name AzureStack.*

\\

如果出现下列情况,说明已经安装 AzureRM 模块。

\\

\\

否则请执行下列代码,安装 AzureRM

\\

\Install-Module -Name 'AzureRm.Bootstrapper' -Scope CurrentUser\Install-AzureRmProfile -profile '2017-03-09-profile' -Force -Scope CurrentUser\Install-Module -Name AzureStack -RequiredVersion 1.2.9 -Scope CurrentUser

\\

现在我们打开 PowerShell, 开始进行安装过程。

\\

首先安装 Azure Stack TP3 支持文件。然后 cd 到该文件目录下,最后执行“PrepareBootFromVHD.ps1”。

\\

\# Variables\$Uri = 'https://raw.githubusercontent.com/Azure/AzureStack-Tools/master/Deployment/'\$LocalPath = 'c:\\AzureStack_TP3_SupportFiles'\\# Create folder\New-Item $LocalPath -Type directory\\# Download files\'BootMenuNoKVM.ps1', 'PrepareBootFromVHD.ps1', 'Unattend.xml',\ 'unattend_NoKVM.xml' | foreach { Invoke-WebRequest ($uri + $_)`\     -Out File ($LocalPath + '\\' + $_) } \\# Deploy from VHD\.\\PrepareBootFromVHD.ps1 -CloudBuilderDiskPath C:\\CloudBuilder.vhdx -ApplyUnattend\Restart-Computer -Force

\\

执行完上述操作后,需要重新启动。

\\

\Restart-Computer-force

\\

远程连接

\\

访问 Azure Stack 服务,有两种途径。一种是通过远程桌面(RDP)访问 Azure Stack 宿主机中的 MSA-CON01 机器。第二种方式通过 VPN 隧道的形式,使我们使用的电脑成为 Azure Stack 网络中的一部分,对 Azure Stack 进行访问。连接 VPN 的好处在于可以让多个用户在同一时间对 Azure Stack 进行使用。这一节,我们会介绍如何使用 VPN 连接 Azure Stack。

\\

我们了解下 Azure Stack VPN 连接的流程

\\

(点击放大图像)

\\

\\

Azure Stack Tools 工具包中有多个模块,导入 Connect 文件夹中的 AzureStack.Connect.psm1。

\\

\Import-Module .\\ComputeAdmin\\AzureStack.ComputeAdmin.psm1

\\

使用 window remote manager,在本地电脑中添加 Azure Stack 主机和 MAS-CA 服务信任模式。这里的 $hostIP 就是安装 Azure Stack 平台的主机 IP 地址。

\\

\# 在 Powershell 中执行 \winrm quickconfig\# Add Azure Stack One Node host \u0026amp; CA to the trusted hosts on your client computer\Set-Item wsman:\\localhost\\Client\\TrustedHosts -Value $hostIP -Concatenate\Set-Item wsman:\\localhost\\Client\\TrustedHosts -Value mas-ca01.azurestack.local -Concatenate

\\

连接 BGP-NAT 服务器,获取 NAT IP 地址。$password 为安装 Azure Stack 平台部署时所设定的基础架构虚拟机的管理员密码

\\

\# Update Azure Stack host address to be the IP Address of the Azure Stack POC Host\$natIp = Get-AzureStackNatServerAddress -HostComputer $hostIP -Password $Password

\\

当我们获取 NAT IP 之后,添加 VPN 连接,使用如下代码即可。

\\

\# Create VPN connection entry for the current user\Add-AzureStackVpnConnection -ServerAddress $natIp -Password $Password\\# Connect to the Azure Stack instance. This command can be used to reconnect\Connect-AzureStackVpn -Password $Password

\\

我们打开 windows 电脑显示网络界面,此时我们的电脑已经与 Azure Stack 网络联通。

\\

\\

完成上述操作之后,我们打开 windows 电脑显示网络界面,此时我们的电脑已经与 Azure Stack 网络联通。

\\

\# To test the portal connection, open an Internet browser and navigate to either the user portal \https://publicportal.local.azurestack.external \# the administrator portal, sign in and create resources.   https://portal.local.azurestack.external

\\

我们现在可以在浏览器中打开下列地址。

\\

\\

在结束 VPN 连接之前,我们可以为 Azure Stack RM 添加两个环境,这样做的好处在于。如果我们使用 PowerShell 进行 Azure Stack 脚本部署和模板搭建,这两个环境能够方便我们获取租户 Id 信息,从而通过 AzureRM 模块工具对 Azure Stack 进行开发。

\\

\# Remove existed Enviroment\Remove-AzureRmEnvironment -Name AzureStack\Remove-AzureRmEnvironment -Name AzureStackAdmin\\# Set AzureStackAdmin ARM Endpoint\Add-AzureStackAzureRmEnvironment -Name \"AzureStack\"\-ArmEndpoint \"https://management.local.azurestack.external\" \# Set AzureStackAdmin ARM Endpoint \Add-AzureStackAzureRmEnvironment -Name \"AzureStackAdmin\" -ArmEndpoint \"https://adminmanagement.local.azurestack.external\"

\\

Azure Stack 从 TP3 开始,顺应客户的要求,分离了 Admin 和 Tenant 的门户和端点,以确保安全。只有管理员在执行管理类的操作,例如添加 Resource Provider、Image 等,才需要登录到 AzureStackAdmin 环境;而租户自己执行操作,则登录到 AzureStackUser,租户没有 Admin 账户权限,也不可能登录到 AzureStackAdmin。

\\

\# Get the AAD Tenant GUID\$TenantID = Get-DirectoryTenantID -AADTenantName \"\u0026lt;mydirectorytenant\u0026gt;.onmicrosoft.com\" -EnvironmentName AzureStackAdmin \#Get the ADFS Tenant GUID\$Tenantid = Get-DirectoryTenantID -ADFS -EnvironmentName AzureStackAdmin\\# Sign-in Admin to AzureStackAdmin ARM Endpoint\# e.g username: pengtest1@azurestack.local\Login-AzureRmAccount -EnvironmentName \"AzureStackAdmin\" -TenantId $TenantID\Login-AzureRmAccount -EnvironmentName \"AzureStack\" -TenantId $TenantID

\\

上传镜像

\\

当我们安装完成 Azure Stack 之后,会发现 Azure Stack 内部什么都没有,镜像库里没有 VHD 镜像资源,如果我们需要在 MarketPlace 中添加镜像,可以使用 Azure Stack Tools 中的 ComputeAdmin 模块进行镜像的上传。

\\

在下图中,我们看到 Virtual Machines 选项中显示出两个镜像资源,分别为 Ubuntu14.02 和 Windows Server 2016。对于 Linux 和 Windows 系统,制作镜像的途径不一样。在本文中,我们着重进行镜像上传的操作。如果有童鞋需要了解镜像制作的方法,可以点击该链接。

\\

(点击放大图像)

\\

\\

在创建镜像资源之前,我们先要载入 Connect 模块和 ComputeAdmin 模块

\\

\Import-Module .\\Connect\\AzureStack.Connect.psm1\Import-Module .\\ComputeAdmin\\AzureStack.ComputeAdmin.psm

\\

在上一节,我们已经通过 VPN 的方式为 Azure Stack 打通隧道,我们继续使用上述环境,利用 VPN 环境获取租户的 id。

\\

\# Get tenant id\$Tenantid = Get-DirectoryTenantID -ADFS -EnvironmentName AzureStackAdmin

\\

接着通过 AzureRM 模块,登录 Azure Stack Admin 环境。这边我们是不是看到一个熟悉的使用环境了?对的,这就是 PowerShell Azure 开发中最基本的脚本运行代码。为了使 Azure 和 Azure Stack 开发和运维保持一致性,微软基本沿用了 Azure Resource Manager 的指令。包括在下一章节,我们创建虚机使用的代码都符合这个规范。

\\

回归正题,使用下列代码登录 Azure Stack:

\\

\# Login Administrator Account\Login-AzureRmAccount -EnvironmentName \"AzureStackAdmin\" -TenantId $TenantID

\\

此时会弹出一个对话框,需要我们输入 Azure Stack 管理员账户密码:

\\

\\

对于 ADFS 模式:Azure Stack 上传镜像需要通过 azurestackadmin@azurestack.local 账户进行上传,不能使用 azure\\AzureStackAdmin 域账户。

\\

对于 AAD 模式:需要提供安装 Azure Stack 是提供的国际版 Azure 账户密码。

\\

对于 Windows 镜像,我们使用下列代码进行安装:

\\

\$ISOPath = \"\u0026lt;Path to ISO\u0026gt;\"\New-Server2016VMImage -ISOPath $ISOPath -TenantId $TenantID -EnvironmentName \"AzureStackAdmin\"

\\

对于 Linux 镜像,我们使用这段代码进行安装:

\\

\$ISOPath = \"\u0026lt;Path to ISO\u0026gt;\"\Add-VMImage -publisher \"Canonical\" -offer \"UbuntuServer\" -sku \"14.04.3-LTS\" -version \"1.0.1\" -osType Linux`   -osDiskLocalPath $ISOPath -tenantID $TenantId -EnvironmentName \"AzureStackAdmin\"

\\

由于镜像的容量通常比较大,所以通过远程 VPN 的方式上传镜像会比较慢。这边有个讨巧的方法,通过 RDP 登录 Azure Stack MAS-CON01 的虚拟机。现将镜像拷过去,然后在该虚拟机内进行安装。

\\

当我们运行相关代码之后,PowerShell 就会显示出如下信息。通过对 Azure Stack 的组件分析,我们可以了解到。上传镜像的过程分为三步:

\\

(点击放大图像)

\\

\\

完成镜像上传之后,将自动创建 Gallery items 用来通过 GUI 界面让用户通过自服务的形式创建资源。相关自定义镜像创建流程请关注后续推出的《Azure Stack 技术深入浅出系列》第四篇。下图显示的是镜像在上传的过程,我们可以看到 Azure Stack Tools 显示了一个 JSON 格式的信息组,这是上传之后镜像的基本信息。

\\

\\

在下面的截图中,我们可以看到上传到镜像会放置在一个叫 addvmimagestorageaccount 存储账号中一个 blob 存储中的 container 里面。

\\

(点击放大图像)

\\

\\

当结束上述所有过程之后,我们可以看到 StatusCode 显示 Created,说明镜像已经上传成功。此时我们回到 Azure Stack 门户页面,可以随心所欲的创建各种定制化的镜像。

\\

\\

部署虚机

\\

在 Azure Stack 部署虚机与在 Azure 上面部署虚机一样,我们通过以下代码通过 Azure Stack 部署。

\\

首先,我们创建资源组。

\\

\# Create a resource group\New-AzureRmResourceGroup -Name 'myResourceGroup1' -Location \"local\"

\\

注意:-Location 的参数需要使用 local 或用户自定义区域位置信息,与 Azure 公有云有所区别

\\

然后创建虚拟网络以及子网,并为网络配置公共 IP。

\\

\############### Create networking resources ##############################\\# Create a subnet configuration\$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name 'mySubnet01'`\                -AddressPrefix 10.0.1.0/24\\# Create a virtual network\$vnet = New-AzureRmVirtualNetwork -ResourceGroupName 'myResourceGroup1'`\        -Location 'local' -Name myResourceGroup1-vnet`\        -AddressPrefix 10.0.0/16 -Subnet $subnetConfig\\# Create a public IP address and specify a DNS name\$pip = New-AzureRmPublicIpAddress -ResourceGroupName 'myResourceGroup1'`\       -Location 'local' -AllocationMethod Static`\       -IdleTimeoutInMinutes 4 -Name \"test1-ip\"

\\

添加完公网 ip 后,我们为虚机添加网络安全组。

\\

\# Create a virtual network card and associate with public IP address and NSG\$nic = New-AzureRmNetworkInterface -Name 'myNic'`\       -ResourceGroupName 'myResourceGroup1' -Location 'local' `\       -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id`\       -NetworkSecurityGroupId $nsg.Id\\# Create an inbound network security group rule for port 3389\$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig`\              -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `\              -Direction Inbound -Priority 1000 -SourceAddressPrefix *`\              -SourcePortRange * -DestinationAddressPrefix * `\              -DestinationPortRange 3389 -Access Allow\\# Create an inbound network security group rule for port 80\$nsgRuleWeb = New-AzureRmNetworkSecurityRuleConfig -Name`\              myNetworkSecurityGroupRuleWWW  -Protocol Tcp `\              -Direction Inbound -Priority 1001 -SourceAddressPrefix *`\              -SourcePortRange * -DestinationAddressPrefix * `\              -DestinationPortRange 80 -Access Allow\\# Create a network security group\$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName myResourceGroup1`\       -Location local -Name test1-nsg -SecurityRules $nsgRuleRDP,$nsgRuleWeb\\# Create a virtual network card and associate with public IP address and NSG\$nic = New-AzureRmNetworkInterface -Name myNic` \       -ResourceGroupName myResourceGroup1 -Location local `\       -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id`\       -NetworkSecurityGroupId $nsg.Id

\\

最后在 Azure Stack 中添加虚机。

\\

\################################ Create VM ##############################\\# Define a credential object\$cred = Get-Credential\\# Create a virtual machine configuration\$vmConfig = New-AzureRmVMConfig -VMName myVM -VMSize Standard_D1 | `\    Set-AzureRmVMOperatingSystem -Windows -ComputerName myVM `\    -Credential $cred | Set-AzureRmVMSourceImage -PublisherName `\    MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter `\    -Version latest | Add-AzureRmVMNetworkInterface -Id $nic.Id \\New-AzureRmVM -ResourceGroupName myResourceGroup -Location 'local' -VM $vmConfig

\\

最后我们会在 Azure Stack 界面上看到如下新建资源,说明已经添加成功。

\\

(点击放大图像)

\\

\\

部署模板

\\

在 Azure Stack 模板工具和权限工具的共同作用下,我们可以通过修改从 Azure 上获取的模板,将其转化成 Azure Stack 的模板,从而促进 Azure Stack 的更好开发。

\\

对于 Azure Stack 的 ARM 模板参数,例如 Location、存储端点等时,目前的使用的范例中特指 POC 环境 (POC 环境端点默认是 azurestack.external、Location 默认是 Local),如果是生产环境,这些都是客户自己定义,每个 Azure Stack 实例的 Location 和端点并不会相同。

\\

\\

Template Validator Tool(模板验证工具): 用于 Azure 和 Azure Stack 的资源和配置有所不同,所以 Azure Stack Tools 中提供了模板验证工具。它的主要功能在于验证从 Azure 中移植的 ARM 是否正确、是否符合 Azure Stack 的规范。我们可以在 Azure Stack Template 中找到符合 Azure Stack 规范的模板。

\\

Azure Stack 规范如下:

\\

1、 Azure Stack 资源位置(location)

\\

在 ARM 模板中通常从资源组中获取 Azure 服务的位置,通过 -location 来确定模板所要使用资源的物理位置。在 Azure 中,我们会获得 40 多个位置,如 “chinaeast、chinanorth、westus”等。在 Azure Stack 环境下,默认为“local”或者用户自定义位置,如下面例子:

\\

{ \"resources\":[         {             \"name\": XXXXXXXX,             \"type\": XXXXXXXXXXXXXX,             \"apiVersion\": XXXXXXXXXXXXXXXX,             \"location\": \"[resourceGroup().location]\

Azure Stack运维工具Azure Stack Tools的使用及实战相关推荐

  1. python开发web运维工具_【实战小项目】python开发自动化运维工具--批量操作主机...

    有很多开源自动化运维工具都很好用如ansible/salt stack等,完全不用重复造轮子.只不过,很多运维同学学习Python之后,苦于没小项目训练,本篇演示用Python写一个批量操作主机的工具 ...

  2. 简单介绍自动化运维工具clip

    Clip是一款自动化运维工具,适用于海量服务器的管理场景,可以降低系统误操作风险,提高工作效率等.Clip将传统的IP管理纬度替换为String管理纬度,管理方式的改变使海量运维时更加的便捷.可靠与高 ...

  3. 自动化运维工具Ansible实战---常用模块

    Ansible默认提供了很多模块来供我们使用.在Linux中,我们可以通过 ansible-doc -l 命令查看到当前Ansible支持哪些模块,通过 ansible-doc -s [模块名] 又可 ...

  4. 自动化运维工具Ansible

    ansible简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批 ...

  5. 自动化运维工具----ansible

    自动化运维工具----ansible ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能. 主要模块以及功能 ...

  6. linux运维人员必会运维工具

    linux运维人员必会开源运维工具体系 说明:不同的技术人员,不同的阶段确定知识边界非常重要,否则,就像马拉车,不知道终点在哪,累死也达不到目标.例如拿8K要学多少,拿15K要学多少.一个新手也许只想 ...

  7. 轻量级自动化运维工具Fabric的安装与实践

    一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...

  8. mysql 自动化运维工具_MySQL使用工具Inception实现自动化运维

    MySQL使用工具Inception实现自动化运维 发布时间:2020-05-27 17:11:14 来源:51CTO 阅读:180 作者:三月 下面一起来了解下MySQL使用工具Inception实 ...

  9. 自动化运维工具Puppet(管理资源)

    接上文<自动化运维工具Puppet>http://kaliarch.blog.51cto.com/8966921/1973736 利用模块与模版管理agent端资源 一.模块管理 环境安装 ...

最新文章

  1. 安全问题会对网络购物季产生负面影响吗
  2. 任务管理器进程中多个chrome.exe的问题
  3. 《精通ArcGIS Server 应用与开发》——第 1 章 ArcGIS 10简介1.1 ArcGIS 10体系结构1...
  4. 说一说MVC的CompressActionFilterAttrubute(五)
  5. UA MATH571B 试验设计III 单因素试验设计1
  6. sequelize 连接2个数据库_数据库激荡 40 年,NoSQL、NewSQL谁能接棒?
  7. MySQL选择数据库(MySQL USE语句)
  8. 关于实现android状态栏沉浸的几种方法
  9. Blazor University (4)组件 — 单向绑定
  10. 服务器不知别内存_图文版 许迎果第63期 选购和使用内存需要注意的点
  11. 杭电--1009 C语言实现
  12. Linux设置命令别名alias
  13. 远端异步调用事件结果
  14. 【ML小结3】线性回归与逻辑回归、softmax回归
  15. Azure NSG网络安全组日志分析
  16. 怎么查看笔记本内存条型号_win10怎么查看自己电脑的内存条型号-win7之家·电脑系统下载站...
  17. 搭建无广告免费小说网站------简述(一)
  18. 织梦模板安装后出现中文乱码?
  19. 用python爬小说_今天分享一个用Python来爬取小说的小脚本!(附源码)
  20. 德鲁克:优秀的管理者,都做到了这3点

热门文章

  1. python断言assertequal_python-尝试断言AlmostEqual / assertEqual时,不受支持的操作数类型...
  2. mysql 禁止插入重复数据_防止MySQL重复插入数据的三种方法
  3. html水平分隔线样式,CSS生成漂亮的水平分隔线(horizontal rule)设计效果
  4. mysql中获取时间的年月日_关于苹果ios中的Date()获取时间NaN的问题
  5. 字符串相加 java_字符串相加-LeetCode(Java实现)
  6. renameto 阻塞_打造简化版文件下载器
  7. python用二分法求平方根_Python使用二分法求平方根的简单示例
  8. mysql启动失败LSB_MySQL数据库服务启动失败
  9. plsql无法连接64位oracle数据库的解决方法(图文解说)
  10. C#项目开发系统开发进度-第X组-xxx(简单)