升级环境

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

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

升级操作简介

您可以分别升级 Managed Airflow 版本和 Airflow 版本,也可以同时升级它们。

更改环境所用的 Airflow 或 Managed Airflow 版本时:

  • Managed Airflow 会使用新版本的 Managed Airflow 映像重新部署环境的组件。

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

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

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

升级操作的限制

升级操作存在以下限制:

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

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

  • 在 Google Cloud 控制台中,您只能升级到受支持的最新版 Managed Airflow(第 2 代)。

  • 在 Google Cloud CLI、API 或 Terraform 中,您可以将环境升级到最新支持的版本、三个之前的 Managed Airflow(第 2 代)版本、上一个次要版本的最后一个补丁版本,以及具有延长升级时间表的版本。无法升级到其他版本的 Managed Airflow (Gen 2),即使这些版本仍受支持且可用于创建新环境也是如此。

    Google Cloud CLI、API 和 Terraform 的升级选项示例:

    • 最新版本:composer-2.11.5-airflow-*
    • 之前的三个 Managed Airflow(第 2 代)版本:composer-2.11.4-airflow-*、composer-2.11.3-airflow-*、composer-2.11.2-airflow-*。
    • 上一个 Managed Airflow(第 2 代)次要版本的最后一个补丁: composer-2.10.2-airflow-*
    • 升级时间表延长的 Managed Airflow(第 2 代)版本:composer-2.10.2-airflow-*、composer-2.10.1-ariflow-*、composer-2.9.7-airflow-* 以及其他升级时间表延长的版本。
  • 升级到的版本必须支持您环境的当前 Python 版本。

  • Compute Engine API 配额限制可能会阻止升级。 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 配额和系统限制页面,并检查 Compute Engine API 的 CPU 配额是否未超出。如果配额即将达到阈值,请先申请延长配额,然后再继续执行升级操作。

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

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

准备工作

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

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

  • 您可能会注意到,项目中属于环境的 GKE 集群有 Compute Engine 元数据条目。在 GKE 集群创建和升级期间,Google Kubernetes Engine 会自动添加项目级元数据条目 (google_compute_project_metadata),以跟踪次要 IP 地址范围使用情况。请勿修改或移除这些条目。Google Kubernetes Engine 会自动管理这些节点。

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

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

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

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

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

控制台

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

    转到“环境”

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

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

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

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

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

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

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

gcloud

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

API

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

查看建议的升级

Managed Airflow 提供了一个 Managed Airflow 版本列表,您可以将环境升级到这些版本。

如需查看建议升级到的 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 软件包是否与新的 Managed Airflow 映像中预安装的软件包发生冲突。

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

控制台

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

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

    转到“环境”

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

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

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

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

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

gcloud

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

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

将

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

示例:

gcloud composer environments check-upgrade example-environment \
  --location us-central1 \
  --image-version composer-2.17.13-airflow-2.11.1

输出示例:

Waiting for [projects/example-project/locations/us-central1/environments/
example-environment] to be checked for PyPI package conflicts when upgrading
to composer-2.17.13-airflow-2.11.1. 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-a.b.c-airflow-x.y.z。

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

虽然无法将环境从 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。您可以使用所有版本别名。

升级环境

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

控制台

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

    转到“环境”

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

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

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

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

  6. 点击升级。

gcloud

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

替换:

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

例如:

gcloud composer environments update
  example-environment \
  --location us-central1 \
  --image-version composer-2.17.13-airflow-2.11.1

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-2.17.13-airflow-2.11.1"
      }
    }
  }

Terraform

config.software_config 块中的 image_version 字段可控制环境的 Managed Airflow 映像。在此字段中,指定新的 Managed Airflow 映像。

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

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

将

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

示例:

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

  config {
    software_config {
      image_version = "composer-2.17.13-airflow-2.11.1"
    }
  }
}

后续步骤