当前位置:   article > 正文

[Azure]Azure虚拟机扩展的介绍和使用_walinuxagent

walinuxagent


VM Agent简介

VM Agent是部署在虚拟机内的一个进程,用于协助管理,配置和加速虚拟机。在使用官方映像创建虚拟机的最后一个步骤中有配置VM Agent的选项。

对于Windows虚拟机而言,常见的一些VM Agent的应用例如在背景中看到的虚拟机信息,就是由VM Agent安装的扩展BGInfo配置的:

还可以通过VM Agent安装扩展VMAccess来重置用户名密码,通过VM Agent进行用户自定义脚本的部署,在部署虚拟机规模集的时候批量推送预配脚本等等。除了配置扩展外,VM Agent本身还会负责一些数据采集,心跳检测,甚至在备份功能中也起到关键作用。在虚拟机的预配置阶段,VM Agent会进行一些配置,例如用户创建,SSH服务配置,主机名配置,DNS设置等等。

Linux虚拟机中的VM Agent也有类似作用。

 

可以通过Azure Powershell命令查看全部可用的扩展程序:

PS C:\Users\XXX> Get-AzureVMAvailableExtension | Select ExtensionName, Publisher

 

ExtensionName            Publisher

-------------            ---------

AsiaInfoDSA              AsiaInfo.DeepSecurity

IaaSDiagnostics          Microsoft.Azure.Diagnostics

CustomScript             Microsoft.Azure.Extensions

DockerExtension          Microsoft.Azure.Extensions

VMSnapshot               Microsoft.Azure.RecoveryServices

VMSnapshotLinux          Microsoft.Azure.RecoveryServices

IaaSAntimalware          Microsoft.Azure.Security

AzureCATExtensionHandler Microsoft.AzureCAT.AzureEnhancedMonitoring

BGInfo                   Microsoft.Compute

CustomScriptExtension    Microsoft.Compute

JsonADDomainExtension    Microsoft.Compute

VMAccessAgent            Microsoft.Compute

LinuxNodeAgent           Microsoft.HpcPack

CustomScriptForLinux     Microsoft.OSTCExtensions

DSCForLinux              Microsoft.OSTCExtensions

LinuxDiagnostic          Microsoft.OSTCExtensions

OSPatchingForLinux       Microsoft.OSTCExtensions

VMAccessForLinux         Microsoft.OSTCExtensions

DSC                      Microsoft.Powershell

DSC.Edp                  Microsoft.Powershell

DSC                      Microsoft.Powershell.Test

SqlIaaSAgent             Microsoft.SqlServer.Management

VS14CTPDebugger          Microsoft.VisualStudio.Azure.RemoteDebug

VS2012Debugger           Microsoft.VisualStudio.Azure.RemoteDebug

VS2013Debugger           Microsoft.VisualStudio.Azure.RemoteDebug

VSRemoteDebugger         Microsoft.VisualStudio.Azure.RemoteDebug

WebDeployForVSDevTest    Microsoft.VisualStudio.WindowsAzure.DevTest

DockerExtension          MSOpenTech.Extensions

 

VM Agent安装

如果使用平台映像创建虚拟机,默认在步骤四会有选项确认“安装VM代理”,默认该选项是勾选状态,勾选了该选项后,虚拟机在完成创建的时候VM Agent会自动部署在虚拟机中。

对于没有勾选该选项的虚拟机(如果是使用平台映像部署Linux虚拟机,VM Agent选项是必选的,无法取消勾选),或者是用户自定义上传的映像,要使用VM Agent的功能,就需要手动安装VM Agent

 

Windows虚拟机安装VM Agent

首先通过链接下载VM Agentmsi安装程序:http://go.microsoft.com/fwlink/?LinkID=394789&clcid=0x409

下载后,使用管理员权限安装:

 

安装完成后可以在任务管理器中看到WaAppAgent.exeWindowsAzureGuestAgent.exe两个进程:

到此还没有安装完成,虽然虚拟机内已经安装好了VM Agent,但是在Azure平台中,还没有标记这台虚拟机已经安装了VM Agent。下一步,需要通过AzurePowershell来将此虚拟机标记为已安装VM Agent的状态。

通过下面两条命令查看虚拟机的WA Agent标记状态:

PS C:\Users\XXX> $vm = Get-AzureVM -ServiceName DemoCloudService -Name DemoVM

PS C:\Users\XXX> $vm.VM.ProvisionGuestAgent

False

从命令输出看到,虚拟机的ProvisionGuestAgent状态还是False,通过下面的命令将其更新为True

PS C:\Users\XXX> $vm.VM.ProvisionGuestAgent = $true

PS C:\Users\XXX> $vm | Update-AzureVM

到此,VM Agent就已经安装完成。

 

Linux虚拟机安装VM Agent

Linux上安装VM Agent,可以直接通过yum,apt-get等软件包管理工具进行安装,这里以CentOS为例,通过下面的命令安装VM Agent(注意这里需要区分WALinuxAgent的大小写):

[root@XXX ~]# yum install WALinuxAgent

安装完成后,使用下面的命令查看VM Agent是否安装成功:

[root@XXX ~]# service waagent status

waagent is stopped

可以看到,默认VM Agent没有启动,通过下面的命令启动VM Agent服务:

[root@XXX ~]# service waagent start

查看VM Agent是否开机自动启动:

[root@XXX ~]# runlevel

N 3

[root@XXX ~]# chkconfig

......

waagent            0:off    1:off    2:on    3:on    4:on    5:on    6:off

......

可以看到在当前的运行级别上,VM Agent是随开机启动的。

到这里,已经在虚拟机内完成了VM Agent的安装和配置,下一步就需要使用Azure Powershell将此虚拟机标记为已安装VM Agent的状态,具体的操作和前面对Windows虚拟机的操作相同。

 

重置密码与SSH配置

利用VM Agent在虚拟机中安装扩展,可以为虚拟机重置密码,还可以为虚拟机重置SSH配置。

 

Windows虚拟机重置密码:

针对Windows虚拟机,可以使用下面的Azure Powershell命令进行密码重置:

PS C:\Users\XXX> $extension = "VMAccessAgent"

PS C:\Users\XXX> $publisher = "Microsoft.Compute"

PS C:\Users\XXX> $ver = "2.*"

PS C:\Users\XXX> $publicConf = '{"UserName":"DemoUser"}'

PS C:\Users\XXX> $privateConf = '{"Password":"Passw0rd!"}'

PS C:\Users\XXX> $vm = Get-AzureVM -ServiceName DemoCloudService -Name DemoVM

PS C:\Users\XXX> Set-AzureVMExtension -VM $vm -ExtensionName $extension -Publisher $publisher -Version $ver -Public

Configuration $publicConf -PrivateConfiguration $privateConf | Update-AzureVM

上面的命令中版本我们指定2.*的原因是,目前扩展VMAccessAgent的大版本是2,通过制定小版本*可以让VM Agent安装最新版本的VMAcessAgent

重置成功后,可以在虚拟机的仪表板中查看扩展的安装状态:

可以看到扩展已经安装成功,版本是2.3,从消息中看到已经成功为管理员用户重置了密码的说明。

这里有两点需要说明:

1)如果用来重置的用户名与原用户名不同,重置成功后,会将原来的管理员用户替换为新的重置用户,例如上面的例子中,指定的重置用户名为DemoUser,重置成功后,原管理员用户就变成了DemoUser,密码也变为了新密码。

2)由于VM Agent需要使用管理员用户权限执行操作,所以如果管理员被禁用的情况下,或者管理员密码过期的情况下,是无法通过VM Agent重置密码的。

 

Linux虚拟机重置密码:

Linux虚拟机重置密码的命令与Windows类似,也是使用Azure Powershell调用VM Agent为虚拟机安装重置密码的扩展工具,命令如下:

$extension = "VMAccessForLinux"

$publisher = "Microsoft.OSTCExtensions"

$ver = "1.*"

$privateConf = '{"username":"DemoUser", "password":"Passw0rd!"}'

$vm = Get-AzureVM -ServiceName DemoCloudService -Name DemoLinuxVM

Set-AzureVMExtension -VM $vm -ExtensionName $extension -Publisher $publisher -Version $ver -Privat

eConfiguration $privateConf | Update-AzureVM

重置完成后,也可以在虚拟机仪表板中找到安装的扩展:

对于Linux虚拟机而言,如果指定的用户名与原用户名不同,并不会将原管理员用户清除。

 

Linux虚拟机重置SSH配置:

重置SSH配置文件也是通过VMAccessForLinux扩展,不同的是privateConfiguration参数中传入的json参数,脚本如下:

$extension = "VMAccessForLinux"

$publisher = "Microsoft.OSTCExtensions"

$ver = "1.*"

$privateConf = '{"reset_ssh":"True"}'

$vm = Get-AzureVM -ServiceName DemoCloudService -Name DemoLinuxVM

Set-AzureVMExtension -VM $vm -ExtensionName $extension -Publisher $publisher -Version $ver -Privat

eConfiguration $privateConf | Update-AzureVM

重置成功后,会将/etc/ssh/sshd_conf文件重置为默认配置。

 

用户自定义脚本扩展

除了上面的扩展外,还可以通过用户自定义脚本扩展来在虚拟机中执行Powershell或者Shell脚本。用户自定义脚本可以实现非常多的功能,例如通过脚本进行批量部署推送等等。下面分别演示WindowsLinux虚拟机通过自定义脚本来实现一些简单的功能。

 

使用用户自定义脚本扩展为Windows虚拟机添加一个管理员用户:

首先创建一个adduser.ps1脚本,脚本内容如下:

$computer="localhost";

$objOu = [ADSI]"WinNT://$computer";

$user = "TestUser";

$password = "Passw0rd!";

$objUser = $objOU.Create("User", $user);

$objUser.setpassword($password);

$objUser.SetInfo();

$objGroup = [ADSI]"WinNT://$computer/Administrators,group";

$objUserAdded = [ADSI]"WinNT://$user";

$objGroup.Add($objUserAdded.PSBase.Path);

将脚本上传到存储账号的容器中(容器需要设置为公有容器),要保证公网可以访问到这个脚本(因为扩展实际也是通过公网去下载这个脚本的)。使用下面的Azure Powershell命令在虚拟机中执行上面的脚本:

$vm = Get-AzureVM -ServiceName DemoCloudService -Name DemoVM

Set-AzureVMCustomScriptExtension -VM $vm -Run 'adduser.ps1' -FileUri 'http://XXX.blob.core.chinacloudapi.cn/scripts/adduser.ps1'

$vm | Update-AzureVM

 

执行成功后,在虚拟机仪表板中查看扩展的安装情况以及命令的执行情况:

到虚拟机中查看,发现已经成功添加了新的用户:

 

使用用户自定义脚本扩展在Linux虚拟机中安装nginx服务:

这里仍然以CentOS系统为例,创建一个install_nginx.sh文件,写入下面的内容:

#!/bin/sh

touch /etc/yum.repos.d/nginx.repo

echo '[nginx]' >> /etc/yum.repos.d/nginx.repo

echo 'name=nginx repo' >> /etc/yum.repos.d/nginx.repo

echo 'baseurl=http://nginx.org/packages/centos/$releasever/$basearch/' >> /etc/yum.repos.d/nginx.repo

echo 'gpgcheck=0' >> /etc/yum.repos.d/nginx.repo

echo 'enabled=1' >> /etc/yum.repos.d/nginx.repo

yum -y install nginx

保存后将文件上传到存储中,同样保证此文件公网可以访问。

然后使用下面的命令在Linux虚拟机中执行上面的安装脚本:

$vm = Get-AzureVM -ServiceName DemoCloudService -Name DemoLinuxVM

$PrivateConfiguration = '{"storageAccountName": "DemoStorageAccountName","storageAccountKey":"<Storage Key>"}'

$PublicConfiguration = '{"fileUris":["http://XXX.blob.core.chinacloudapi.cn/scripts/install_nginx.sh"], "commandToExecute": "sh install_nginx.sh" }'

$ExtensionName = 'CustomScriptForLinux'

$Publisher = 'Microsoft.OSTCExtensions'

$Version = '1.*'

Set-AzureVMExtension -ExtensionName $ExtensionName -VM  $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfiguration -PublicConfiguration $PublicConfiguration  | Update-AzureVM

执行完成后,查看扩展的安装和执行状态:

登陆虚拟机查看nginx的状态,发现已经完成安装:

[root@XXX ~]# service nginx status

nginx is stopped

除了上面的例子,用户自定义脚本扩展可实现的功能非常多,对于Windows虚拟机而言,只要Powershell能够实现的功能,理论上都能够使用自定义脚本扩展调用Powershell脚本完成。同理,对于Linux虚拟机而言,只要Shell能够实现的功能,理论上也都能通过该扩展调用Shell脚本实现。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/672349
推荐阅读
相关标签
  

闽ICP备14008679号