
如果你是像我一样的懒人或在 Azure 上管理了大量 Linux 虚拟机,定时为系统批量安装补丁和更新就会成一个问题。当然有很多现成的解决方案,甚至自己写脚本批量实施是一种方法。我们本文不介绍第三方解决方案,要介绍的是微软为解决这一问题而开发的 Azure VM OSPatching 扩展。
Azure VM OSPatching 扩展可以帮助 Linux 管理自定义和配置 Linux 操作系统更新,其中包括:
- 指定时间和频率安装 Linux 系统补丁
- 指定安装哪些补丁
- 配置更新后的重启行为
下面我们就来详细说明。
前提条件
- Azure Linux VM已经安装 Microsoft Azure Linux Agent (最低 2.0.6 版本)
- 管理端已安装 Cross-Platform CLI 或 Azure PowerShell
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 对 Linux 更新配置状态和设置:
- PowerShell 查看 OSPatching 扩展配置:
Get-AzureDeployment -ServiceName "Your Service Name"
- Azure Portal 查看 OSPatching 扩展配置:
- 要查看 OSPatching 扩展详细状态及操作系统更新设置,可参考 Linux VM 中的如下位置:
/var/lib/waagent/Microsoft.OSTCExtensions.OSPatchingForLinux-version/status/
查看系统更新状态
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












最新评论
不奇怪,设计师用 Mac 很正常,微软内部也有大把员工在用 Mac。
之前邮件里收到 Microsoft 50 周年的壁纸,下载下来里面有个 __MACOSX 文件夹我也是没绷住🤓
笑死我了
电脑设置完成,但电视端找不到服务器,怎么办?