Azure自動(dòng)化部署運(yùn)維淺談

    本次來談一談如何在Azure中實(shí)現(xiàn)一些簡(jiǎn)單的自動(dòng)化運(yùn)維的需求,一般來講自動(dòng)化運(yùn)維我們通過很多第三方的工具平臺(tái)實(shí)現(xiàn),比較流行的目前有很多,比如老牌的chef, puppet,新興的PowerShell DSC, ansible。這些應(yīng)該都是耳熟能詳?shù)牧恕?/p>

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了昭通免費(fèi)建站歡迎大家使用!

    

    那么在Azure平臺(tái),如何實(shí)現(xiàn)自動(dòng)化部署和運(yùn)維?

    方法其實(shí)很多,第一種方法比較傳統(tǒng),即仍然使用Chef, Ansible等工具平臺(tái)進(jìn)行自動(dòng)化運(yùn)維,仍然可以保持以往的體驗(yàn),無需學(xué)習(xí)任何新的技術(shù)

    在Azure中也對(duì)這種方式提供了很多的技術(shù)支持,在應(yīng)用市場(chǎng)中也可以找到這種鏡像

Azure自動(dòng)化部署運(yùn)維淺談

Azure自動(dòng)化部署運(yùn)維淺談

    在VM的extension里也可以找到很多相關(guān)的extension

Azure自動(dòng)化部署運(yùn)維淺談

    

    這種方式對(duì)于已經(jīng)很熟悉這些工具的人來說,應(yīng)該是最容易的方式

 

    當(dāng)然,除此之后還有一些其他的方法也可以實(shí)現(xiàn)一些簡(jiǎn)單的自動(dòng)化運(yùn)維,部署的目的,如果是一些簡(jiǎn)單的需求,也可以考慮使用這類方法,比如說多臺(tái)Windows VM想要加入同一個(gè)域里,或者是多臺(tái)web服務(wù)器想要統(tǒng)一安裝某些軟件或者角色,這類較為簡(jiǎn)單的需求,則可以使用Azure自帶的Custom Script Extension來實(shí)現(xiàn)

 

    舉例來說,想要實(shí)現(xiàn)多臺(tái)VM加域,一般來講加域可以通過批量推送腳本,或者是手動(dòng)的方式來實(shí)現(xiàn),在Azure中,實(shí)際上我們不需要登錄到任何一臺(tái)VM中,只需要在外部網(wǎng)絡(luò)即可實(shí)現(xiàn)加域的效果,只要要加域的vm到DC之間的網(wǎng)絡(luò)是聯(lián)通的,并且DNS可以正常解析到域名即可。

 

    比如,現(xiàn)在我們有一臺(tái)DC,兩位web服務(wù)器,web01及web02,現(xiàn)在有兩個(gè)需求

1.     將兩臺(tái)服務(wù)器加入到域中

2.     對(duì)兩臺(tái)服務(wù)器安裝IIS角色

    第一個(gè)需求,我們可以通過Azure自帶的JsonADDomainExtension實(shí)現(xiàn),只需要提供一個(gè)加域的cred,以及域名,即可將服務(wù)器加入到域中,命令也非常簡(jiǎn)單


    

    直接在PowerShell中運(yùn)行以下命令,將<>里的內(nèi)容替換為實(shí)際的內(nèi)容即可

Set-AzureRmVMADDomainExtension -DomainName <Domain name> -Credential <domain Cred> -Restart -ResourceGroupName <resource group name> -VMName <vm name> -Name <Extension Name> -TypeHandlerVersion "1.3" -JoinOption 3


    這里又衍生出另一個(gè)問題,credential如果寫在腳本中,很有可能是以明文的形式,這樣肯定是不行的,如何能保證credential的安全呢?一種方法是可以通過Get-Credential實(shí)現(xiàn),將賬戶密碼直接以加密形式保存在變量里。但是這樣的話加域過程中,還需要一些人為的參與。除此之外,其實(shí)還可以通過Azure的key vault服務(wù),將賬戶密碼保存在key vault中,通過powershell進(jìn)行調(diào)取

    Azure Key Vault 是一個(gè)用于安全地存儲(chǔ)和訪問機(jī)密的工具。 可以通過Azure Key Vault保存例如API 密鑰、密碼或證書等關(guān)鍵信息。舉例來說,我們可以把有權(quán)限加域的域賬戶賬戶名和密碼保存在key vault中,然后通過PowerShell獲取這些信息,作為加域的credential進(jìn)行加域操作

    

    創(chuàng)建key vault的方法很簡(jiǎn)單,首先在Azure中選擇好Key Vault服務(wù),點(diǎn)擊添加

Azure自動(dòng)化部署運(yùn)維淺談

    這里輸入一些基本信息,比如location, vault的名字等

Azure自動(dòng)化部署運(yùn)維淺談

    創(chuàng)建完成后,因?yàn)槲覀兪且Wo(hù)一些明文信息,所以只需要選擇secrets即可,如果是要保存證書,也可以選擇certificates,選擇generate secret

Azure自動(dòng)化部署運(yùn)維淺談

    

    之后分別錄入domain username以及domain password

Azure自動(dòng)化部署運(yùn)維淺談

    Azure自動(dòng)化部署運(yùn)維淺談

    可以看到這些信息在key vault里是以加密的形式存在的,之后可以通過PowerShell命令Get-AzureKeyVaultSecret獲取這些值

    運(yùn)行Get-AzureKeyVaultSecret -VaultName mxytestvault -Name domainuser可以看到這個(gè)secret的相關(guān)信息

Azure自動(dòng)化部署運(yùn)維淺談

    如果獲取這個(gè)secret的secretvalue,會(huì)看到這是一個(gè)加密的字符串

Azure自動(dòng)化部署運(yùn)維淺談

    

    如果想獲取明文信息,可以獲取SecretValueText屬性

Azure自動(dòng)化部署運(yùn)維淺談

    通過這種方式,即可實(shí)現(xiàn)無人參與的部署,同時(shí)又能保證信息的安全

    下邊來看下具體如何將key vault與vm extension結(jié)合在一起,實(shí)現(xiàn)自動(dòng)化的部署操作

    假設(shè)要加域的VM都在一個(gè)資源組中,則可以通過以下腳本,直接將資源組中的VM添加到域中

    腳本內(nèi)容如下:

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 SilentlyContinue
        if ($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 $RGName

foreach ($VM in $VMS) {
    Join-Domain -RGName $RGName -VMName $VM.Name -Cred $DomainCred
}

    

腳本運(yùn)行時(shí),只需要指定資源組名,vault名稱,要加入的域名即可

.\RGJoinDomain.ps1 -RGNAME test -vaultname mxytestvault -Domain mxyo365.com

通過提示可以看到,Web01和web02已經(jīng)成功安裝extension

Azure自動(dòng)化部署運(yùn)維淺談

登錄到VM后,可以看到WEB01和WEB02都已經(jīng)加入到域中了

Azure自動(dòng)化部署運(yùn)維淺談

Azure自動(dòng)化部署運(yùn)維淺談

  加域完成后,如果希望能安裝一些IIS等功能角色,或者是軟件,可通過Azure VM extension實(shí)現(xiàn),方法很簡(jiǎn)單,以下是通過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 Stop
        Set-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 { }

    這個(gè)腳本是支持管道操作的,運(yùn)行起來非常方便,比如想給包含web名稱的服務(wù)器安裝IIS,可以首先篩選出來這些服務(wù)器,然后通過管道將值傳給install-iis腳本,即可通過extension進(jìn)行安裝

    Get-AzureRMVM -ResourceGroupName test|?{$_.name -like *web*}|install-iis.ps1Azure自動(dòng)化部署運(yùn)維淺談

    安裝完成IIS后,腳本會(huì)在default頁添加計(jì)算機(jī)名,訪問計(jì)算機(jī)公網(wǎng)IP時(shí),可以看到已經(jīng)可以顯示計(jì)算機(jī)的名稱

    Azure自動(dòng)化部署運(yùn)維淺談

    

    

Azure自動(dòng)化部署運(yùn)維淺談

    實(shí)際上VM extension在運(yùn)行時(shí),會(huì)將命令的內(nèi)容下載到VM內(nèi)部運(yùn)行,可以在C:\Package\Plugins里看到這些extension的目錄

Azure自動(dòng)化部署運(yùn)維淺談

    可以直接在文件夾里看到extension運(yùn)行的狀態(tài)

Azure自動(dòng)化部署運(yùn)維淺談

    也可以在C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.9.3找到對(duì)應(yīng)的log等信息

    Azure自動(dòng)化部署運(yùn)維淺談

    基本上就是這樣,當(dāng)然這只是拋磚引玉,Azure VM的extension還是很好用的,可以做多一些嘗試

文章標(biāo)題:Azure自動(dòng)化部署運(yùn)維淺談
分享地址:http://muchs.cn/article16/jcjdgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、域名注冊(cè)營(yíng)銷型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)