系统极客一直在努力
专注于操作系统及软件使用教程

如何使用Azure VM OSPatching扩展自动更新Linux VM

Microsoft Love Linux

如果你是像我一样的懒人或在 Azure 上管理了大量 Linux 虚拟机,定时为系统批量安装补丁和更新就会成一个问题。当然有很多现成的解决方案,甚至自己写脚本批量实施是一种方法。我们本文不介绍第三方解决方案,要介绍的是微软为解决这一问题而开发的 Azure VM OSPatching 扩展。

Azure VM OSPatching 扩展可以帮助 Linux 管理自定义和配置 Linux 操作系统更新,其中包括:

  • 指定时间和频率安装 Linux 系统补丁
  • 指定安装哪些补丁
  • 配置更新后的重启行为

下面我们就来详细说明。

前提条件

OSPatching扩展参数

参数名 描述 值类型 默认值
disabled 禁用扩展 必要, boolean false
stop 取消更新 必要, boolean false
rebootAfterPatch 更新后重启系统 可选, string RebootIfNeed
category 更新类型 可选, string Important
installDuration 安装总时间 可选, string 01:00
oneoff 立即修补操作系统 可选, boolean false
intervalOfWeeks 更新频率(周) 可选, string 1
dayOfWeek 补丁在一周中哪天安装(可指定多个) 可选, string Everyday
startTime 补丁开始安装时间 可选, string 03:00
distUpgradeList 从repo列表全面升级(例如Ubuntu中的dist-upgrade) 可选, string /etc/apt/sources.list.d/custom.list
vmStatusTest 包括 local, idleTestScript 和 healthyTestScript 可选, object
local 指定用户自定义脚本路径 可选, boolean false
{
  "disabled": false,
  "stop": false,
  "rebootAfterPatch": "RebootIfNeed|Required|NotRequired|Auto",
  "category": "Important|ImportantAndRecommended",
  "installDuration": "",
  "oneoff": false,
  "intervalOfWeeks": "",
  "dayOfWeek": "Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Everyday",
  "startTime": "",
  "distUpgradeList": "",
  "vmStatusTest": {
    "local": false,
  }
}

部署Azure VM OSPatching

大家可以使用 Azure CLI、Azure Powershell 和 ARM 模板来部署 Azure VM OSPatching 扩展,由于我平常主要用 PowerShell 比较,所以就介绍 PowerShell 的方法。

1. 先登录到 Azure 账户:

Add-AzureAccount

2. 再用类似如下部署文件配置 Azure VM OSPatching 部署:

$VmName = ''
$vm = Get-AzureVM -ServiceName $VmName -Name $VmName

$ExtensionName = 'OSPatchingForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = ''

$PublicConfig = ConvertTo-Json -InputObject @{
    "disabled" = $false;
    "stop" = $true|$false;
    "rebootAfterPatch" = "RebootIfNeed|Required|NotRequired|Auto";
    "category" = "Important|ImportantAndRecommended";
    "installDuration" = "";
    "oneoff" = $true|$false;
    "intervalOfWeeks" = "";
    "dayOfWeek" = "Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Everyday";
    "startTime" = "";
    "vmStatusTest" = (@{
        "local" = $false;

    })
}

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

实际事例

$VmName = 'fulinsg'
$vm = Get-AzureVM -ServiceName $VmName -Name $VmName

$ExtensionName = 'OSPatchingForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '2.0'

$PublicConfig = ConvertTo-Json -InputObject @{
    "disabled" = $false;
    "stop" = $false;
    "rebootAfterPatch" = "RebootIfNeed";
    "category" = "ImportantAndRecommended";
    "installDuration" = "00:30";
    "oneoff" = $true;
    "dayOfWeek" = "Everyday";
    "startTime" = "03:00";
    "vmStatusTest" = (@{
        "local" = $false;

    })
}

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

Azure VM OSPatching

查看状态

检查 Azure VM OSPatching 对 Linux 更新配置状态和设置:

  • PowerShell 查看 OSPatching 扩展配置:
Get-AzureDeployment -ServiceName "Your Service Name"
  • Azure Portal 查看 OSPatching 扩展配置:

Azure VM OSPatching

  • 要查看 OSPatching 扩展详细状态及操作系统更新设置,可参考 Linux VM 中的如下位置:
/var/lib/waagent/Microsoft.OSTCExtensions.OSPatchingForLinux-version/status/

Azure VM OSPatching

查看系统更新状态

Linux VM 补丁更新状态和错误记录到如下日志当中:

/var/log/azure/Microsoft.OSTCExtensions.OSPatchingForLinux//extension.log
/var/log/waagent.log

Azure VM OSPatching支持的Linux发行版

  • Ubuntu 12.04 和更高版本
  • CentOS 6.5 和更高版本
  • Oracle Linux 6.4.0.0.0 和更高版本
  • openSUSE 13.1 和更高版本
  • SUSE Linux Enterprise Server 11 SP3 和更高版本
  • FreeBSD
分享到:更多 ()