Azure自动化部署运维浅谈
本次来谈一谈如何在Azure中实现一些简单的自动化运维的需求,一般来讲自动化运维我们通过很多第三方的工具平台实现,比较流行的目前有很多,比如老牌的chef, puppet,新兴的PowerShell DSC, ansible。这些应该都是耳熟能详的了。
那么在Azure平台,如何实现自动化部署和运维?
方法其实很多,第一种方法比较传统,即仍然使用Chef, Ansible等工具平台进行自动化运维,仍然可以保持以往的体验,无需学习任何新的技术
在Azure中也对这种方式提供了很多的技术支持,在应用市场中也可以找到这种镜像
在VM的extension里也可以找到很多相关的extension
这种方式对于已经很熟悉这些工具的人来说,应该是最容易的方式
当然,除此之后还有一些其他的方法也可以实现一些简单的自动化运维,部署的目的,如果是一些简单的需求,也可以考虑使用这类方法,比如说多台Windows VM想要加入同一个域里,或者是多台web服务器想要统一安装某些软件或者角色,这类较为简单的需求,则可以使用Azure自带的Custom Script Extension来实现
举例来说,想要实现多台VM加域,一般来讲加域可以通过批量推送脚本,或者是手动的方式来实现,在Azure中,实际上我们不需要登录到任何一台VM中,只需要在外部网络即可实现加域的效果,只要要加域的vm到DC之间的网络是联通的,并且DNS可以正常解析到域名即可。
比如,现在我们有一台DC,两位web服务器,web01及web02,现在有两个需求
1. 将两台服务器加入到域中
2. 对两台服务器安装IIS角色
第一个需求,我们可以通过Azure自带的JsonADDomainExtension实现,只需要提供一个加域的cred,以及域名,即可将服务器加入到域中,命令也非常简单
直接在PowerShell中运行以下命令,将<>里的内容替换为实际的内容即可
Set-AzureRmVMADDomainExtension -DomainName <Domain name> -Credential <domain Cred> -Restart -ResourceGroupName <resource group name> -VMName <vm name> -Name <Extension Name> -TypeHandlerVersion "1.3" -JoinOption 3
这里又衍生出另一个问题,credential如果写在脚本中,很有可能是以明文的形式,这样肯定是不行的,如何能保证credential的安全呢?一种方法是可以通过Get-Credential实现,将账户密码直接以加密形式保存在变量里。但是这样的话加域过程中,还需要一些人为的参与。除此之外,其实还可以通过Azure的key vault服务,将账户密码保存在key vault中,通过powershell进行调取
Azure Key Vault 是一个用于安全地存储和访问机密的工具。 可以通过Azure Key Vault保存例如API 密钥、密码或证书等关键信息。举例来说,我们可以把有权限加域的域账户账户名和密码保存在key vault中,然后通过PowerShell获取这些信息,作为加域的credential进行加域操作
创建key vault的方法很简单,首先在Azure中选择好Key Vault服务,点击添加
这里输入一些基本信息,比如location, vault的名字等
创建完成后,因为我们是要保护一些明文信息,所以只需要选择secrets即可,如果是要保存证书,也可以选择certificates,选择generate secret
之后分别录入domain username以及domain password
可以看到这些信息在key vault里是以加密的形式存在的,之后可以通过PowerShell命令Get-AzureKeyVaultSecret获取这些值
运行Get-AzureKeyVaultSecret -VaultName mxytestvault -Name domainuser可以看到这个secret的相关信息
如果获取这个secret的secretvalue,会看到这是一个加密的字符串
如果想获取明文信息,可以获取SecretValueText属性
通过这种方式,即可实现无人参与的部署,同时又能保证信息的安全
下边来看下具体如何将key vault与vm extension结合在一起,实现自动化的部署操作
假设要加域的VM都在一个资源组中,则可以通过以下脚本,直接将资源组中的VM添加到域中
脚本内容如下:
param ([parameter(Mandatory = $true)][string]$RGName,#资源组名[parameter(Mandatory = $false)][string]$vaultname = "mxytestvault",#Azure key vault 名称[parameter(Mandatory = $false)][string]$Domain = "mxyo365.com" #要加入的域名 )function Join-Domain {param ([Parameter(Mandatory = $true)]$RGName,[Parameter(Mandatory = $true)]$VMName,[Parameter(Mandatory = $true)]$Cred)#filter dc vms if ($VMName -notlike "*DC*") {#Get Azure vm$vm = Get-AzureRmVM -ResourceGroupName $RGName -Name $VMName -erroraction SilentlyContinueif ($vm -ne $null) {$ExtensionName = $VMName + (Get-Random -Minimum 1 -Maximum 100)try {#join domain with Azure dommain extension$Error.Clear()Write-Output "Setting domain join extension for vm $VMName, extension name:$ExtensionName"Set-AzureRmVMADDomainExtension -DomainName $Domain -Credential $Cred -Restart -ResourceGroupName $RGName -VMName $VMName -Name $ExtensionName -TypeHandlerVersion "1.3" -JoinOption 3}catch {Write-Output $Error[0].Exception.Message}}else {Write-Output "VM $VMName does not exist."}}}#Get secret with PowerShell $domainuname = (Get-AzureKeyVaultSecret -VaultName $vaultname -Name domainuser).SecretValueText Write-Output "Get username from vault $vaultname" $domainfulluname = "$domainuname@$Domain" $domainpwd = (Get-AzureKeyVaultSecret -VaultName $vaultname -Name domainpassword).SecretValue Write-Output "Get password from vault $vaultname"#Create credential with secret $DomainCred = New-Object System.Management.Automation.PSCredential($domainfulluname, $domainpwd)#Get VMs $VMS = Get-AzureRmVM -ResourceGroupName $RGNameforeach ($VM in $VMS) {Join-Domain -RGName $RGName -VMName $VM.Name -Cred $DomainCred }
脚本运行时,只需要指定资源组名,vault名称,要加入的域名即可
.\RGJoinDomain.ps1 -RGNAME test -vaultname mxytestvault -Domain mxyo365.com
通过提示可以看到,Web01和web02已经成功安装extension
登录到VM后,可以看到WEB01和WEB02都已经加入到域中了
加域完成后,如果希望能安装一些IIS等功能角色,或者是软件,可通过Azure VM extension实现,方法很简单,以下是通过extension安装IIS角色的脚本
param([Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)][Alias('VMName')][string]$Name,[Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)][string]$ResourceGroupName ) begin {Write-Output "Start to install IIS for vms"} process {try {$ExtensionName = $Name + "-IIS-" + (Get-Random -Minimum 1 -Maximum 100)Write-Output "Trying to install iis for vm $Name, extension name:$ExtensionName" $vm=Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $Name -ErrorAction StopSet-AzureRmVMExtension `-ResourceGroupName $ResourceGroupName `-ExtensionName $ExtensionName `-VMName $Name `-Publisher Microsoft.Compute `-ExtensionType CustomScriptExtension `-TypeHandlerVersion 1.4 `-SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `-Location $vm.Location}catch {Write-Warning $_} } end { }
这个脚本是支持管道操作的,运行起来非常方便,比如想给包含web名称的服务器安装IIS,可以首先筛选出来这些服务器,然后通过管道将值传给install-iis脚本,即可通过extension进行安装
Get-AzureRMVM -ResourceGroupName test|?{$_.name -like *web*}|install-iis.ps1
安装完成IIS后,脚本会在default页添加计算机名,访问计算机公网IP时,可以看到已经可以显示计算机的名称
实际上VM extension在运行时,会将命令的内容下载到VM内部运行,可以在C:\Package\Plugins里看到这些extension的目录
可以直接在文件夹里看到extension运行的状态
也可以在C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.9.3找到对应的log等信息
基本上就是这样,当然这只是抛砖引玉,Azure VM的extension还是很好用的,可以做多一些尝试
转载于:https://blog.51cto.com/mxyit/2346350
Azure自动化部署运维浅谈相关推荐
- 开源运维管理软件排名_云上自动化部署和运维的正确姿势
导读:今天起,"凌云时刻"特别推出"阿里云玩转 ECS"系列课程,每周二.周四固定更新,欢迎关注.本期为系列第 1 讲,由阿里云资深技术专家吴君印介绍上云最正确 ...
- 苏宁海量服务器自动化配置运维实践
运维的演进 人力运维阶段 在IT产业的早期,服务器运维是通过各种Ad Hoc命令或者Shell脚本来完成基础设施的自动化工作,这种方式对于简单,一次性的工作很方便,但是对于复杂和长期的项目,后期的脚本 ...
- 云上自动化部署和运维的正确姿势
凌云时刻 · 技术 导读:今天起,"凌云时刻"特别推出"阿里云玩转 ECS"系列课程,每周二.周四固定更新,欢迎关注.本期为系列第 1 讲,由阿里云资深技术专家 ...
- 案例:用户信息列表展示||1. 需求 2. 设计 3. 开发4. 测试 5. 部署运维
案例:用户信息列表展示 1. 需求:用户信息的增删改查操作 2. 设计: 1. 技术选型:Servlet+JSP+MySQL+JDBCTemplate+Druid+BeanUtils+tomcat ...
- CloudStack部署运维手册V2 --- 新鲜出炉
CloudStack部署手册V1版本: http://clovemfong.blog.51cto.com/blog/3297559/1198185 CloudStack部署运维手册V2 版本 1. C ...
- 美团外卖自动化业务运维系统 - Alfred
1背景 美团外卖业务在互联网行业是非常独特的,不仅流程复杂--从用户下单.商家接单到配送员接单.交付,而且压力和流量在午.晚高峰时段非常集中.同时,外卖业务的增长非常迅猛,自2013年11月上线到最近 ...
- 美团外卖:日订单量超1600万的自动化业务运维之路
背景 美团外卖业务在互联网行业是非常独特的,不仅流程复杂--从用户下单.商家接单到配送员接单.交付,而且压力和流量在午.晚高峰时段非常集中.同时,外卖业务的增长非常迅猛,自2013年11月上线到最近峰 ...
- Linux自动化运维部署+运维
自动化部署及配置(Cobbler/Kickstart) 红帽发布的网络安装服务器套件 Cobbler可以说是一大Linux装机利器,可以快速的建立网络安装环境,据说比Kickstart还要好用. 分布 ...
- 腾讯十年运维专家谈运维的自我修养
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 作者:huashionxu,腾讯 TEG 业务运维专家 技术运维作为站在研发团队背后的男人们,一直在担任着举重若轻 ...
最新文章
- hdu 2087 剪花布条
- 用Windows Storage Server 2008做iSCSI存储服务器
- 架构师速成-架构目标之可用性
- 文本相似度计算(一)
- oracle父游标和子游标,诊断Oracle high version count(高版本游标)问题
- SAP Hybris和Netweaver的集群模式以及集群模式下工作需要解决的问题
- 漫画:如何做一款比吃鸡还厉害的游戏
- Python reduce / map / filter 函数区别 - Python零基础入门教程
- java类型转换_Java类型转换
- C++中map的用法详解
- 1.1.1.1校园网_突破校园网限制,开启寝室Wifi
- Qt QLabel文本框的使用
- 谈笑间学会大数据-Hive数据定义
- 分享77个HTMLCSS源码,总有一款适合您
- CST画椭圆螺旋曲线elliptical spiral的方法
- Web地图服务发布及运维方案
- 利用MRTG进行网络流量监控
- ANSYS学习2——前处理
- 【Rust日报】2021-10-05 Mimic: 一款用Rust语言编写的命令行Gameboy模拟器
- UVM field automation
热门文章
- 通往SQL Server复制的阶梯:一级- SQL服务器复制介绍
- [算法] [常微分方程] [欧拉法 改进欧拉法 经典R-K算法]
- 数据库抽取,生成CSV文件导出,CSVUtils工具类
- vector、map删除当前记录
- jquery和css3打造超梦幻的三维动画背景
- java image filters[02]-过滤器初探
- Swift 中的内存管理详解
- windows server 2012 application control policy
- 数据处理系列(四) 安装Elasticsearch用以存储和查询数据
- 一些关于Java的句子