安排修补作业


除了按需运行修补作业之外,您可能还需要通过创建补丁程序部署,根据设置的时间安排自动运行修补作业。

您可以为每个补丁程序部署设置一次性时间安排,以在一个特定日期和时间运行修补作业,也可以设置周期性时间安排,以按指定的时间间隔运行修补作业。

您可以通过实例过滤条件同时修补多个实例。这些过滤条件会在每个修补作业运行时应用于该作业。这可确保实时捕获项目中的更改。 例如,假设您创建了补丁程序部署,以在两周后开始将补丁程序应用于 asia-souteast1-b 地区中的所有实例。在创建补丁程序时,您在该地区中部署了 20 个实例,但几天后又向该地区添加了 40 个新实例。由于过滤条件在补丁程序开始时应用,因此所有 60 个实例都会更新。这样一来,您无需更新补丁程序部署时间安排即可添加和移除实例。

准备工作

  • 查看 OS Config 配额
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

您可以使用 Google Cloud 控制台Google Cloud CLIREST 安排修补作业。

权限

项目的所有者拥有创建和管理补丁程序部署的完全访问权限。 对于所有其他用户,您需要为其授予权限。您可以授予以下其中一种精细角色:

  • roles/osconfig.patchDeploymentAdmin:包含创建、删除、获取和列出补丁程序部署的权限。
  • roles/osconfig.patchDeploymentViewer:包含获取和列出补丁程序部署的只读权限。

例如,如需向用户管理员授予对补丁程序部署的访问权限,请运行以下命令:

gcloud projects add-iam-policy-binding project-id \
    --member user:user-id@gmail.com \
    --role roles/osconfig.patchDeploymentAdmin

替换以下内容:

  • project-id:项目 ID。
  • user-id:用户的 Google Workspace 用户名。

创建补丁程序部署

创建补丁程序部署时,补丁程序部署的名称必须满足以下命名要求:

  • 每个名称在项目中必须是唯一的
  • 只能包含小写字母、数字和连字符
  • 以字母开头
  • 以数字或字母结尾
  • 长度介于 1 到 63 个字符之间

在 Google Cloud CLI 和 REST 中,补丁程序部署的名称采用 patch-deployment-id 格式。

启动补丁程序部署后,您可以使用补丁信息中心监控补丁。在修补作业开始约 30 分钟之后,数据会填充到信息中心内。

控制台

  1. 在 Google Cloud 控制台中,转到 Compute Engine > 虚拟机管理器 > 补丁页面。

    转到“补丁”页面

  2. 点击新建补丁程序部署
  3. 目标虚拟机部分,选择包含要修补的虚拟机的地区。您还可以选择所有地区。

    例如,要修补所选可用区内的特定虚拟机,请输入类似于以下内容的名称和标签过滤条件:

    • 名称前缀:test-
    • 标签:env=devapp=web
  4. 补丁程序配置部分,配置补丁程序。

    1. 为您的补丁程序指定名称
    2. 为您的操作系统选择所需的更新。如需了解详情,请参阅操作系统修补作业包含哪些内容
  5. 时间安排部分,完成以下操作:

    • 选择时间表。您可以安排一次性修补作业或周期性修补作业。
    • (可选)设置考量时长或维护期
  6. 发布选项部分中,配置补丁程序发布选项

    • 选择一次修补一个地区,还是同时修补多个地区。
    • 设置中断预算。中断预算是您希望修补过程一次中断某个地区的虚拟机数量或百分比。
  7. (可选)在高级选项部分,您可以完成以下任务:

  8. 点击部署

gcloud

使用 os-config patch-deployments create 命令创建补丁程序部署。

gcloud compute os-config patch-deployments create patch-deployment-id \
    --file patch-deployment-file

替换以下内容:

  • patch-deployment-id:补丁程序部署的名称。
  • patch-deployment-file:包含补丁程序部署配置的 YAML 或 JSON 文件的路径。

补丁程序部署 YAML 文件示例

以下示例 YAML 文件可用于为 us-west2-bus-west2-c 地区中的所有实例创建周期性时间安排。周期性时间安排具有以下规范:

  • 开始日期为 2019 年 1 月 9 日晚上 7:30
  • 结束日期为 2020 年 1 月 9 日晚上 7:30
  • 要使用的时区为“America/Los_Angeles”
  • 每个星期二运行一次
instanceFilter:
  zones:
  - us-west2-b
  - us-west2-c
recurringSchedule:
  frequency: WEEKLY
  weekly:
    dayOfWeek: TUESDAY
  timeOfDay:
    hours: 19
    minutes: 30
  timeZone:
    id: America/Los_Angeles
  startTime: '2019-09-01T12:00:00Z'
  endTime: '2020-09-01T12:00:00Z'

REST

在 API 中,创建 POST 请求以创建新的补丁程序部署。 您必须按照 patchDeployments.create API 文档中的说明明确定义所有必需的配置字段。 例如,使用最少必填字段(即仅使用实例过滤条件和时间安排)的补丁程序部署如下所示。将 project-id 替换为您的项目 ID。

POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute

{
  "instanceFilter": instance-filter

  // Add one of the following parameters:
  "recurringSchedule": schedule
  "oneTimeSchedule": schedule
}

替换以下内容:

  • project-id:您的项目 ID。
  • instance-filter:所需的过滤条件参数。如需详细了解实例过滤条件,请参阅实例过滤条件
  • schedule:提供 oneTimeSchedulerecurringSchedule 参数,这些参数详细说明了时间安排参数(如运行修补作业的日期、时间和频率)。

示例

示例 1:创建一次性时间安排,以在 2020 年 1 月 10 日凌晨 0:00(世界协调时间 (UTC))对 us-west2-bus-west2-c 地区中的所有实例运行修补作业。

{
 "instanceFilter":{
   "zones":[
     "us-west2-b",
     "us-west2-c"
   ]
 },
 "oneTimeSchedule": {
   "executeTime": "2020-01-10T00:00:00Z"
 }
}

示例 2:为 us-west2-bus-west2-c 区域中的所有实例创建周期性时间安排。周期性时间安排具有以下规范:

  • 开始日期为 2019 年 1 月 9 日晚上 7:30
  • 结束日期为 2020 年 1 月 9 日晚上 7:30
  • 要使用的时区为“America/Los_Angeles”
  • 每个星期二运行一次
POST https://osconfig.googleapis.com/v1/projects/project-id/patchDeployments
{
  "instanceFilter":{
    "zones":[
      "us-west2-b",
      "us-west2-c"
    ]
  },
  "recurringSchedule":{
    "frequency":"WEEKLY",
    "weekly":{
      "dayOfWeek":"TUESDAY"
    },
    "timeOfDay":{
      "hours":19,
      "minutes":30
    },
    "timeZone":{
      "id":"America/Los_Angeles"
    },
    "startTime":"2019-09-01T12:00:00Z",
    "endTime":"2020-09-01T12:00:00Z"
  }
}

列出补丁程序部署

控制台

  1. 在 Google Cloud 控制台中,转到 Compute Engine > 虚拟机管理器 > 补丁页面。

    转到“补丁”页面

  2. 选择计划的部署标签页。

gcloud

使用 os-config patch-deployments list 命令列出补丁程序部署。

gcloud compute os-config patch-deployments list

此命令会返回所有补丁程序部署。 输出类似以下内容:

NAME              LAST_RUN                  NEXT_RUN              FREQUENCY
first-deployment  2019-12-18T00:07:00.738Z  ---                   Once: Scheduled for 2019-12-18T00:07:00.000Z
my-deployment1    2020-01-05T14:00:00.228Z  2020-01-12T14:00:00Z  Recurring - Weekly
my-deployment2    ---                       2020-01-15T05:30:00Z  Recurring - Monthly on specific date(s)

您可以使用更多标志来限制搜索范围以及设置搜索格式。 例如,如需列出第 2 页中的前 10 个补丁程序部署,请运行以下命令。将 project-id 替换为您的项目 ID。

gcloud compute os-config patch-deployments list --limit 10 --page-size 2

REST

在 API 中,创建对 patchDeployments.list 方法的 GET 请求。将 project-id 替换为您的项目 ID。

GET https://osconfig.googleapis.com/v1/projects/project-id/patchDeployments

描述补丁程序部署

控制台

  1. 在 Google Cloud 控制台中,转到 Compute Engine > 虚拟机管理器 > 补丁页面。

    转到“补丁”页面

  2. 选择计划的部署标签页。
  3. 点击要查看的部署的名称。

gcloud

使用 os-config patch-deployments describe 命令描述补丁程序部署。将 patch-deployment-id 替换为您的补丁程序部署名称。

gcloud compute os-config patch-deployments describe patch-deployment-id

REST

在 API 中,创建对 patchDeployments.get 方法的 GET 请求。

GET https://osconfig.googleapis.com/v1/projects/project-id/patchDeployments/patch-deployment-id

替换以下内容:

  • project-id:您的项目 ID。
  • patch-deployment-id:您的补丁程序部署名称。

删除补丁程序部署

控制台

  1. 在 Google Cloud 控制台中,转到 Compute Engine > 虚拟机管理器 > 补丁页面。

    转到“补丁”页面

  2. 选择计划的部署标签页。
  3. 点击要删除的部署的名称。
  4. 点击删除此时间表

gcloud

使用 os-config patch-deployments delete 命令删除补丁程序部署。将 patch-deployment-id 替换为您的补丁程序部署名称。

gcloud compute os-config patch-deployments delete patch-deployment-id

REST

在 API 中,创建对 patchDeployments.delete 方法的 DELETE 请求。

DELETE https://osconfig.googleapis.com/v1/projects/project-id/patchDeployments/patch-deployment-id

替换以下内容:

  • project-id:您的项目 ID。
  • patch-deployment-id:您的补丁程序部署名称。

后续步骤