Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3
本页面介绍如何为您的环境定义维护窗口。
维护窗口简介
维护期是您允许 Cloud Composer 执行维护操作的时间段。例如,您可以指定 DAG 时间表之外的维护时间窗口,以确保关键任务执行不会中断。
借助维护窗口,您可以控制 您的环境可能会发生维护:
如果您为环境定义了自定义维护窗口,Cloud Composer 会在这些指定时间段内执行维护。
如果您未为环境定义自定义维护窗口或指定空值,则 Cloud Composer 会在默认维护窗口期间执行维护。
维护期内会发生什么
指定维护窗口时,至少要在 一周的维护操作时间:
您的环境在维护窗口期间仍然可用。部分组件 在维护期间,您的环境可能暂时无法使用 操作正在进行中。
您必须有 12 小时的时间,以便 Cloud Composer 有足够的时间 来安排和执行所有维护操作。这并不意味着维护操作需要整整 12 小时,甚至也不意味着维护操作会每周进行。
只要您的 DAG 允许某些任务可以中断和重试。如果您在维护期运行 DAG,请务必启用任务重试。您可以 在 Airflow 配置、DAG 或任务级别配置任务重试次数。
维护操作会对您的环境产生以下影响:
Airflow 界面可能暂时不可用。
Cloud Composer 可能会执行 基础架构自动升级操作 如果有可用的升级,则会发生此错误。
更改环境的某些参数,或者可能无法更改环境参数 临时性。
某些 Airflow 任务可能会被中断。维护操作完成后,Airflow 会为这些任务安排重试(如果未另行配置)。
默认维护窗口
Cloud Composer 3 中的默认维护窗口的定义如下:
- 所有时间均以环境所在区域的本地时区为准,但会忽略夏令时。
- 周二、周三、周四和周五维护窗口从 00:00:00 至 02:00:00。
- 周六、周日和周一的维护窗口为 00:00:00 到 04:00:00。
如何使用维护窗口
维护操作可能会影响 DAG 和 Airflow 任务的执行,因此我们建议您执行以下操作:
定义 Cloud Composer 环境的维护窗口。
使用
start_date
和schedule_interval
参数: 您的 DAG
为新环境指定维护窗口
您可以在创建环境时指定维护窗口。如需了解详情,请参阅创建环境。
为现有环境指定维护窗口
控制台
如需定义或更改现有环境的维护窗口,请更新环境:
在 Google Cloud 控制台中,前往环境页面。
选择您的环境。
转到环境配置标签页。
在维护窗口条目旁边,点击修改。
在维护窗口对话框中,选中设置维护窗口的自定义时间复选框。
设置开始时间、时区、天数和长度,以便指定 7 天的滚动期内,时间表的总时间至少 12 小时。例如,每个星期一、星期三和星期五的 4 小时提供了所需的时间。
点击保存,然后等待您的环境更新。
gcloud
更新环境时,以下参数定义了维护窗口参数:
--maintenance-window-start
设置自定义维护窗口的开始时间。--maintenance-window-end
设置维护窗口的结束时间。--maintenance-window-recurrence
设置维护窗口重复。
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--maintenance-window-start 'DATETIME_START' \
--maintenance-window-end 'DATETIME_END' \
--maintenance-window-recurrence 'MAINTENANCE_RECURRENCE'
替换:
- 将
ENVIRONMENT_NAME
替换为环境的名称。 - 将
DATETIME_START
替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。 - 将
DATETIME_END
替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。 将
MAINTENANCE_RECURRENCE
替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:FREQ=DAILY
格式指定每日重复。FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA
格式指定在一周中的选定几天重复。
以下示例将维护窗口指定为 01:00 到 6000 之间,时间为 6 小时 每周三、周六和周日 07:00(世界协调时间 [UTC])。忽略 2023 年 1 月 1 日的日期。
gcloud composer environments update example-environment \
--location us-central1 \
--maintenance-window-start '2023-01-01T01:00:00Z' \
--maintenance-window-end '2023-01-01T07:00:00Z' \
--maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SU,WE,SA'
API
构建
environments.patch
API 请求。在此请求中:
在参数
updateMask
中,指定config.maintenanceWindow
掩码。在请求正文中,指定维护窗口的参数。
{
"config": {
"maintenanceWindow": {
"startTime": "DATETIME_START",
"endTime": "DATETIME_END",
"recurrence": "MAINTENANCE_RECURRENCE"
}
}
}
替换:
- 将
DATETIME_START
替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。 - 将
DATETIME_END
替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。 将
MAINTENANCE_RECURRENCE
替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:FREQ=DAILY
格式指定每日重复。FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA
格式指定在一周中的选定几天重复。
以下示例将维护窗口指定为 01:00 到 6000 之间,时间为 6 小时 每周三、周六、周日 07:00(世界协调时间)。忽略 2023 年 1 月 1 日的日期。
// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.maintenanceWindow
{
"config": {
"maintenanceWindow": {
"startTime": "2023-01-01T01:00:00Z",
"endTime": "2023-01-01T07:00:00Z",
"recurrence": "FREQ=WEEKLY;BYDAY=SU,WE,SA"
}
}
}
Terraform
maintenance_window
块为您的环境指定维护窗口:
resource "google_composer_environment" "example" {
provider = google-beta
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
maintenance_window {
start_time = "DATETIME_START"
end_time = "DATETIME_END"
recurrence = "MAINTENANCE_RECURRENCE"
}
}
}
替换:
ENVIRONMENT_NAME
替换为环境的名称。LOCATION
替换为环境所在的区域。- 将
DATETIME_START
替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。 - 将
DATETIME_END
替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。 将
MAINTENANCE_RECURRENCE
替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:FREQ=DAILY
格式指定每日重复。FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA
格式指定在一周中的选定几天重复。
以下示例将维护窗口指定为 01:00 到 6000 之间,时间为 6 小时 每周三、周六和周日 07:00(世界协调时间 [UTC])。2023 年 1 月 1 日 日期。
resource "google_composer_environment" "example" {
provider = google-beta
name = "example-environment"
region = "us-central1"
config {
maintenance_window {
start_time = "2023-01-01T01:00:00Z"
end_time = "2023-01-01T07:00:00Z"
recurrence = "FREQ=WEEKLY;BYDAY=SU,WE,SA"
}
}
}