Share via


停用或移除 VM 與映像中的 Linux 代理程式

適用於:✔️ Linux VM ✔️ 彈性擴展集

移除 Linux 代理程式之前,您必須了解移除 Linux 代理程式後,將無法使用哪些虛擬機器。

Azure 虛擬機器 (VM) 擴充功能是小型的應用程式,擴充功能是由 Azure 控制平面安裝並管理,可在 Azure VM 上提供部署後設定及自動化工作。 Azure Linux 代理程式的目的為處理平台擴充功能命令,並確保 VM 中的擴充功能處於正常狀態。

Azure 平台裝載許多擴充功能,包括 VM 設定、監視、安全性和公用程式應用程式等等。 有多種第一方與第三方擴充功能可供選擇,使用擴充功能的主要案例包括下列範例:

  • 支援第一方 Azure 服務,例如 Azure 備份、監視、磁碟加密、安全性、網站複寫等。
  • SSH/密碼重設
  • VM 設定 - 執行自訂指令碼、安裝 Chef 或 Puppet 代理程式等。
  • 第三方產品,例如 AV 產品、VM 弱點工具、VM 與應用程式監視工具。
  • 擴充功能可以與新的 VM 部署配套。 例如,這些擴充功能可以是較大部署的一部分、可以在 VM 佈建時設定應用程式,或者可以在部署之後針對任何支援的擴充功能操作系統來執行。

停用擴充功能處理

根據您的需求,可以透過多種方式停用擴充功能處理,但在此之前,您必須移除部署至 VM 的所有擴充功能。例如,可以使用 Azure CLI 以列出刪除擴充功能:

az vm extension delete -g MyResourceGroup --vm-name MyVm -n extension_name

注意

如果沒有執行上述操作,則平台會嘗試傳送擴充功能設定,並在 40 分鐘後逾時。

在控制平面執行停用

如果不確定未來是否需要擴充功能,則可以保存 VM 上的 Linux 代理程式,然後從平台停用擴充功能處理功能。 此為 Microsoft.Compute api 版本 2018-06-01 與更新版本提供的選項,與所安裝的 Linux 代理程式版本無關。

az vm update -g <resourceGroup> -n <vmName> --set osProfile.allowExtensionOperations=false

將上述命令設定為「true」並使用,便能輕鬆從平台重新啟用擴充功能處理功能。

移除執行中虛擬機器的 Linux 代理程式

請確定已根據上述步驟,移除了 VM 中的所有現有擴充功能。

步驟 1:移除 Azure Linux 代理程式

如果僅移除 Linux 代理程式,而未移除相關聯的設定成品,則可以在稍後重新安裝。 若要移除 Linux 代理程式,請以 root 身分執行下列其中一項命令:

針對 Ubuntu 18.04+

sudo apt -y remove walinuxagent

針對 Redhat 7.X、8.X 和 9.X

sudo yum -y remove WALinuxAgent

針對 SUSE 12.X、15.X

sudo zypper --non-interactive remove python-azure-agent

步驟 2:(選擇性) 移除 Azure Linux 代理程式成品

重要

您可以移除 Linux 代理程式所有相關聯的成品,但如此一來,便無法在稍後重新安裝。 因此,強烈建議您先考慮停用 Linux 代理程式,只使用上述命令進行移除。

如果您確認永遠不會重新安裝 Linux 代理程式,則可執行下列命令:

針對 Ubuntu 18.04+

sudo pt -y purge walinuxagent
sudo cp -rp /var/lib/waagent /var/lib/waagent.bkp
sudo rm -rf /var/lib/waagent
sudo rm -f /var/log/waagent.log

針對 Redhat 7.X、8.X 和 9.X

sudo yum -y remove WALinuxAgent
sudo rm -f /etc/waagent.conf.rpmsave
sudo rm -rf /var/lib/waagent
sudo rm -f /var/log/waagent.log

針對 SUSE 12.X、15.X

sudo zypper --non-interactive remove python-azure-agent
sudo rm -f /etc/waagent.conf.rpmsave
sudo rm -rf /var/lib/waagent
sudo rm -f /var/log/waagent.log

準備不含 Linux 代理程式的映像

如果您擁有已包含 cloud-init 的映像,而且想要移除 Linux 代理程式,但未來仍會使用 cloud-init 進行佈建,請以 root 身分執行步驟 2 (並在必要時執行步驟 3) 以移除 Azure Linux 代理程式,下列命令便會移除 cloud-init 設定和快取資料,並準備 VM 以建立自訂映像。

sudo cloud-init clean --logs --seed

取消佈建並建立映像

Linux 代理程式能利用「waagent -deprovision+user」步驟清除部分現有映像中繼資料,但移除中繼資料之後,您必須執行以下動作,移除映像內的其他敏感性資料。

  • 移除所有現有的 SSH 主機金鑰

    sudo rm /etc/ssh/ssh_host_*key*
    
  • 刪除管理帳戶

    sudo touch /var/run/utmp
    sudo userdel -f -r <admin_user_account>
    
  • 刪除根密碼

    sudo passwd -d root
    

完成上述步驟後,便可以使用 Azure CLI 建立自訂映像。

建立一般受控映像

az vm deallocate -g <resource_group> -n <vm_name>
az vm generalize -g <resource_group> -n <vm_name>
az image create -g <resource_group> -n <image_name> --source <vm_name>
az sig image-version create \
    -g $sigResourceGroup
    --gallery-name $sigName
    --gallery-image-definition $imageDefName
    --gallery-image-version 1.0.0
    --managed-image /subscriptions/00000000-0000-0000-0000-00000000xxxx/resourceGroups/imageGroups/providers/images/MyManagedImage

從不含 Linux 代理程式的映像建立 VM

從不含 Linux 代理程式的映像建立 VM 時,必須確定 VM 部署設定指出此 VM 不支援擴充功能。

注意

如果沒有執行上述操作,則平台會嘗試傳送擴充功能設定,並在 40 分鐘後逾時。

若要部署已停用擴充功能的 VM,可以將 Azure CLI 搭配 --enable-agent 使用。

az vm create \
    --resource-group $resourceGroup \
    --name $prodVmName \
    --image RedHat:RHEL:8.1-ci:latest \
    --admin-username azadmin \
    --ssh-key-value "$sshPubkeyPath" \
    --enable-agent false

或者,也可以透過設定 "provisionVMAgent": false,,使用 Azure Resource Manager (ARM) 範本以執行此操作。

"osProfile": {
    "computerName": "[parameters('virtualMachineName')]",
    "adminUsername": "[parameters('adminUsername')]",
    "linuxConfiguration": {
        "disablePasswordAuthentication": "true",
        "provisionVMAgent": false,
        "ssh": {
            "publicKeys": [
                {
                    "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]",
                    "keyData": "[parameters('adminPublicKey')]"

下一步

如需詳細資訊,請參閱佈建 Linux