升级环境

Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)

本页面介绍如何将环境升级到新的 Airflow 版本。

升级操作简介

在 Managed Airflow(第 3 代)中,您无法管理环境的 Managed Airflow 版本:

  • Managed Airflow 会自动升级环境的基础设施组件。这些组件与 Managed Airflow 功能相关,不会改变 Airflow 的运作方式或 Airflow DAG 的执行方式。
  • Managed Airflow 不会自动升级 Airflow 版本和 build、Airflow 组件或与 Airflow 工作负载密切相关的组件。当基础架构组件自动升级时,这些值不会发生变化。
  • 您可以手动升级到新的 Airflow 版本或 build。

例如,您可以连续数月使用同一版本的 Airflow,而不执行任何升级,但您的环境仍会收到最新的 Managed Airflow 更新、修复和环境基础架构组件的改进。如果您日后决定改用新版本或新 build 的 Airflow,可以升级环境中的 Airflow 版本。

关于 Airflow 版本升级

您的环境会以以下方式更改 Airflow 的版本或 build:

  • 您可以控制环境的 Airflow 版本(和 build)。当您选择将环境切换到其他 Airflow 版本时,可以执行 Airflow 版本升级操作。例如,如果当前版本的 Airflow 和 build 不再受支持,则可能会发生这种情况。

  • Managed Airflow 会使用指定的 Airflow 版本和 build 重新部署您环境的 Airflow 组件。

  • 如果您的环境在升级之前有自定义 PyPI 软件包或 Airflow 配置选项替换等 Airflow 配置更改,则 Managed Airflow 会应用这些更改。

  • Managed Airflow 会更新 Airflow airflow_db 连接,使其指向新的 Cloud SQL 数据库。

更改 Airflow 版本不会改变您连接环境资源的方式,例如环境存储桶的网址或 Airflow Web 服务器。

自动基础架构升级操作简介

Managed Airflow 会定期运行自动基础设施升级操作:

  • 自动基础设施升级操作会在为环境指定的维护窗口期间定期运行。

  • 在 Managed Airflow(第 3 代)中,无法停用自动基础设施升级。您可以为环境指定自定义维护窗口,以控制自动升级可以运行的时间段。

  • 与任何其他长时间运行的操作一样,此操作会显示在 Google Cloud 控制台和环境的日志中。在操作运行期间,您无法在环境级启动其他操作(但仍可以运行 Airflow DAG)。

  • 在某些情况下,自动基础架构升级可能会重启 Airflow 组件。在此类重启期间,Airflow 工作器会在 24 小时的宽限期内正常终止。如果您有需要超过 24 小时才能完成的任务,请考虑使用可延期运算符。升级可能会导致环境的基础设施组件(例如环境监控)在短时间内无法使用。

升级操作的限制

升级操作存在以下限制:

  • Managed Airflow 版本会在几天内逐步推广到 Managed Airflow 支持的所有区域。正在进行的发布中的最新版本可能尚未在您所在的区域推出。

  • 您无法降级到早期版本的 Airflow 或 build。

  • 如果 Airflow 数据库包含的数据超过 20 GB,则无法升级环境。升级期间,如果 Airflow 数据库大小超过 20 GB,则会显示警告。在这种情况下,请执行数据库维护以减小数据库大小。

  • 如果您使用 XCom 机制来传输文件,请确保按照 Airflow 的指南使用该机制。使用 XCom 传输大型文件或大量文件会影响 Airflow 数据库的性能,并可能导致在加载快照或升级环境时出现故障。建议使用 Cloud Storage 等替代方案来传输大量数据。

准备工作

  • 我们建议您创建环境的新快照,以便在需要时重新创建环境。

  • 您的账号必须具有可以触发环境升级操作的角色。此外,环境的服务账号必须具有拥有足够权限来执行升级操作的角色。如需了解详情,请参阅访问权限控制。

检查您的环境是否为最新版本

当环境的 Airflow build 接近其支持终止日期时,Managed Airflow 会显示警告。 您可以利用这些警告使您的环境始终保持在受支持的状态。

环境详情页面上会显示弃用消息
图 1. 环境详情页面上会显示弃用消息

Managed Airflow 会跟踪您的环境所基于的 Airflow 版本和 build。当映像接近其支持终止日期时,您会在环境列表和环境详情页面上看到警告。

如需检查您的环境是否为最新版本,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 转到环境配置标签页。

  4. 映像版本字段中会显示以下消息之一:

    • 最新可用版本。环境映像受到完全支持。

    • 有新版本。环境映像受到完全支持,您可以将其升级到更高版本。

    • 对此映像版本的支持将于…结束 环境映像接近完全支持终止日期。

    • 从…起,此版本将不再受支持环境已超出完全支持期限。

gcloud

Google Cloud CLI 不支持此功能。您可以改为查看建议的升级,其中会显示可用的新版本。

API

此功能无法通过 API 使用。您可以改为查看建议的升级,其中会显示可用的新版本。

查看建议的升级

Managed Airflow 提供了一个 Airflow build 列表,您可以将环境升级到其中的任何 build。

如需查看建议升级到的 Managed Airflow 版本,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 前往环境配置标签页,然后点击升级映像版本。

  4. 如需查看建议的版本列表,请点击 Managed Airflow 映像版本下拉菜单。

gcloud

gcloud composer environments list-upgrades \
  ENVIRONMENT_NAME \
  --location LOCATION

替换:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。

示例:

gcloud composer environments list-upgrades example-environment \
  --location us-central1

API

您可以查看某个位置的可用版本。为此,请构建 imageVersions.list API 请求。

例如:

// GET https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/imageVersions

检查是否存在 PyPI 软件包冲突

您可以检查环境中安装的 PyPI 软件包是否与新 Airflow 版本或 build 中预安装的软件包发生冲突。

成功的检查意味着当前版本和指定版本之间没有 PyPI 软件包依赖项冲突。不过,升级操作仍然可能由于其他原因而不成功。

控制台

如需为您的环境运行升级检查,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 转到环境配置标签页,找到印象版本条目后,点击升级。

  4. 在环境版本升级对话框的新版本下拉列表中,选择您要升级到的 Airflow 版本或 build。

  5. 在 PyPI 软件包兼容性 (PyPI packages compatibility) 部分,点击检查是否存在冲突 (Check for conflicts)。

  6. 等待检查完成。如果存在 PyPI 软件包依赖项冲突,则显示的错误消息包含有关冲突软件版包和软件包版本的详细信息。

gcloud

如需为您的环境运行升级检查,请使用您要升级到的 Airflow 版本或 build 运行 environments check-upgrade 命令。

gcloud composer environments check-upgrade \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --airflow-version VERSION

将

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • VERSION 替换为您要升级到的新 Airflow 版本和 build,格式为 airflow-x.y.z-build.t。 您可以使用所有版本别名。

示例:

gcloud composer environments check-upgrade example-environment \
  --location us-central1 \
  --airflow-version airflow-2.11.1-build.20

输出示例:

Waiting for [projects/example-project/locations/us-central1/environments/
example-environment] to be checked for PyPI package conflicts when upgrading
to composer-3-airflow-2.11.1-build.20. Operation [projects/example-project/locations/
us-central1/operations/04d0e8b2-...]...done.
...

Response:
'@type': type.googleapis.com/
google.cloud.orchestration.airflow.service.v1.CheckUpgradeResponse
buildLogUri: ...
containsPypiModulesConflict: CONFLICT
pypiConflictBuildLogExtract: |-
The Cloud Build image build failed: Build failed; check build logs for
details. Full log can be found at ...
Error details: tensorboard 2.2.2 has requirement
setuptools>=41.0.0, but you have setuptools 40.3.0.

或者,您也可以异步运行升级检查。使用 --async 参数进行异步调用,然后使用 gcloud composer operations describe 命令检查结果。

API

构建 environments.checkUpgrade API 请求。

在 imageVersion 字段中指定映像版本:

{
  "imageVersion": "VERSION"
}

将 VERSION 替换为您要升级到的新版本,格式为 composer-3-airflow-x.y.z-build.t。

检查是否与托管式 Airflow(第 3 代)存在冲突

Managed Airflow(第 3 代)是 Managed Airflow 的最新主要版本。您可以通过升级检查来确定 Managed Airflow(第 2 代)环境是否可以升级到 Managed Airflow(第 3 代)。以下说明适用于托管式 Airflow(第 2 代)环境。

虽然无法将环境从 Managed Airflow(第 2 代)就地迁移到 Managed Airflow(第 3 代),但您可以使用升级检查来检查兼容性问题。建议在迁移到 Managed Airflow(第 3 代)之前执行此操作。

如需检查与 Managed Airflow(第 3 代)的兼容性,请定期检查 Managed Airflow(第 2 代)环境的升级情况,并将 Managed Airflow(第 3 代)版本指定为目标版本。

每项报告的冲突可能属于以下类型:

  • BLOCKING 冲突报告会列出 Managed Airflow(第 3 代)不支持的不兼容环境配置元素。建议您先解决这些冲突,然后再开始迁移到 Managed Airflow(第 3 代)。

  • NON_BLOCKING 冲突报告 Managed Airflow(第 3 代)中不同的环境配置元素,这些元素可能会导致出现意外行为。例如,默认维护窗口等默认值的更改会报告为非阻塞冲突。建议您在开始迁移流程之前,先检查这些冲突是否会导致问题。

  • PyPI 软件包冲突也会在此检查中报告。它们与配置冲突分开报告,与常规 PyPI 软件包兼容性检查一样。

控制台

如需检查与 Managed Airflow(第 3 代)的兼容性,请使用 gcloud CLI 或 Cloud Composer API。 Google Cloud 控制台仅支持检查 PyPI 软件包兼容性。

gcloud

如需检查与 Managed Airflow(第 3 代)的兼容性,请运行 environments check-upgrade 命令,并指定 Managed Airflow(第 3 代)版本作为目标。

gcloud composer environments check-upgrade \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version COMPOSER_3_VERSION

将

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • COMPOSER_3_VERSION,其中包含您要升级到的 Airflow 版本和 build,格式为 airflow-x.y.z-build.t。您可以使用所有版本别名。

示例:

gcloud composer environments check-upgrade example-environment \
  --location us-central1 \
  --image-version composer-3-airflow-2

冲突消息示例:

...
- message: Error validating property [core]unit_test_mode. Overriding [core]
unit_test_mode is not permitted.
type: BLOCKING
- message: Environment variables [GOOGLE_CLOUD_PROJECT] may not be overridden.
type: BLOCKING
- message: You have to specify Worker CPUs to be 0.5, 1.0 or multiples of 2.0.
type: BLOCKING
- message: The environment uses a default maintenance window, which is
different in Composer 2 and Composer 3. Unless set to a custom value, the
maintenance window will be changed to a new default after the upgrade.
type: NON_BLOCKING
...

或者,您也可以异步运行此检查。使用 --async 参数进行异步调用,然后使用 gcloud composer operations describe 命令检查结果。

API

构建 environments.checkUpgrade API 请求。

在 imageVersion 字段中指定映像版本:

{
  "imageVersion": "COMPOSER_3_VERSION"
}

将 COMPOSER_3_VERSION 替换为您要升级到的 Airflow 版本和 build,格式为 airflow-x.y.z-build.t。您可以使用所有版本别名。

升级环境

如需将环境升级到新版本或新 build 的 Airflow,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 转到环境配置标签页。

  4. 找到映像版本项,然后点击升级。

  5. 从映像版本下拉菜单中,选择要升级到的 Airflow 版本或 build。

  6. 点击升级。

gcloud

gcloud composer environments update \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --airflow-version VERSION

替换:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • VERSION 替换为您要升级到的新 Airflow 版本和 build,格式为 airflow-x.y.z-build.t。 您还可以使用所有版本别名。

例如:

gcloud composer environments update
  example-environment \
  --location us-central1 \
  --airflow-version airflow-2.11.1-build.20

API

  1. 构建 environments.patch API 请求。

  2. 在此请求中:

    1. 在 updateMask 参数中,指定 config.softwareConfig.imageVersion 掩码。

    2. 在请求正文的 imageVersion 字段中,指定要升级到的新版本。

例如:

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.imageVersion

  {
    "config": {
      "softwareConfig": {
        "imageVersion": "composer-3-airflow-2.11.1-build.20"
      }
    }
  }

Terraform

config.software_config 块中的 image_version 字段可控制环境的 Airflow 版本和 build。在此字段中,指定新的 Airflow 版本和 build。

  resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    software_config {
      image_version = "VERSION"
    }
  }
}

将

  • ENVIRONMENT_NAME 替换为环境的名称。
  • 将 LOCATION 替换为环境所在的区域。 您要升级到的新 Airflow 版本和 build,格式为 airflow-x.y.z-build.t。 您还可以使用所有版本别名。

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    software_config {
      image_version = "airflow-2.11.1-build.20"
    }
  }
}

后续步骤