管理集群

Red Hat Advanced Cluster Management for Kubernetes 2.2

阅读更多以了解如何跨云供应商创建、导入和管理集群。

摘要

阅读更多以了解如何跨云供应商创建、导入和管理集群。

第 1 章 管理集群

了解如何通过使用 Red Hat Advanced Cluster Management for Kubernetes 控制台来跨云供应商环境中创建、导入和管理集群。

通过以下主题了解如何在跨云供应商环境中管理集群:

第 2 章 支持的云

了解 Red Hat Advanced Cluster Management for Kubernetes 支持的云供应商。此外,查找记录在案的可用受管供应商。

最佳实践:对于受管集群供应商,请使用 Kubernetes 的最新版本。

2.1. 支持的 hub 集群供应商

Red Hat OpenShift Container Platform 4.5.2 或更高版本、4.6.1 或更高版本、4.7.0 或更高版本都支持 hub 集群。

2.2. 支持的受管集群供应商

Red Hat OpenShift Container Platform 3.11.200 或更高版本、4.4.3 或更高版本、4.5.2 或更高版本、4.6.1 或更高版本、4.7.0 或更高版本都支持受管集群。

请参阅可用的受管集群选项和文档:

2.3. 配置 kubectl

对于以上列出的厂商文档,您可能需要了解如何配置 kubectl。当将受管集群导入到 hub 集群时,您必须已安装 kubectl。详情请参阅把目标受管集群导入到 hub 集群

第 3 章 调整集群大小

您可以使用扩展过程(如虚拟机大小和节点数)自定义 Red Hat OpenShift Container Platform 受管集群规格。如需了解有关重新定义集群大小的信息,请参阅集群的 OpenShift Container Platform 版本 推荐的集群扩展实践

提示:如果使用 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群,则它是一个 OpenShift Container Platform 集群。

第 4 章 发行镜像

当使用 Red Hat Advanced Cluster Management for Kubernetes 在供应商处创建集群时,您必须指定用于新集群的发行镜像。发行镜像指定使用哪个版本的 Red Hat OpenShift Container Platform 来构建集群。

引用发行镜像的文件是在 acm-hive-openshift-releases GitHub 仓库中维护的 yaml 文件。Red Hat Advanced Cluster Management 使用这些文件在控制台中创建可用发行镜像的列表。这包括 OpenShift Container Platform 的最新快速频道镜像。控制台仅显示三个 OpenShift Container Platform 最新版本的最新发行镜像。例如,您可能在控制台选项中看到以下发行镜像:

  • quay.io/openshift-release-dev/ocp-release:4.5.36-x86_64
  • quay.io/openshift-release-dev/ocp-release:4.6.23-x86_64
  • quay.io/openshift-release-dev/ocp-release:4.7.4-x86_64

存储了额外的发行镜像,但无法在控制台中看到。要查看所有可用发行镜像,请在 CLI 中运行 kubectl get clusterimageset。控制台中只有最新版本可促进创建带有最新发行镜像的集群。在某些情况下,您可能需要创建特定版本的集群,因此还会继续提供老版本。

仓库中包含 clusterImageSets 目录和 subscription 目录,它们是您使用发行镜像时使用的目录。

clusterImageSets 目录包含以下目录:

  • Fast - 包含引用每个受支持 OpenShift Container Platform 版本的最新发行镜像版本的文件此目录中的发行镜像经过测试、验证和支持。
  • Releases - 包含引用每个 OpenShift Container Platform 版本(table、fast 和 candidate 频道)的所有发行镜像的文件 注意:这些版本尚未全部经过测试并确定是稳定的。
  • Stable - 包含引用每个受支持 OpenShift Container Platform 版本的最新两个稳定发行镜像版本的文件此目录中的发行镜像经过测试、验证和支持。

您可以通过三种方式对自己的 ClusterImageSet 进行策展:

这三种方法中的第一个步骤都是禁用包含执行最新快速频道镜像的自动更新的订阅。使用 multiclusterhub 资源中的安装程序参数可以禁用对最新的 fast ClusterImageSet 的自动策展。通过切换 spec.disableUpdateClusterImageSets 参数为 truefalse,Red Hat Advanced Cluster Management 安装的订阅会相应地被启用和禁用。如果要策展自己的镜像,请将 spec.disableUpdateClusterImageSets 设置为 true,以禁用订阅。

选项 1:指定您要在控制台创建集群时使用的特定 ClusterImageSet 的镜像引用。您指定的每个新条目都会保留,并可用于将来的所有集群置备。一个示例为:quay.io/openshift-release-dev/ocp-release:4.6.8-x86_64.

选项 2:从 acm-hive-openshift-release s GitHub 仓库手动创建并应用 ClusterImageSet s YAML 文件。

选项 3:按照 acm-hive-openshift-releases GitHub 仓库中的 README.md 来启用对分叉 GitHub 仓库中的 ClusterImageSets 的自动更新。

subscription 目录包含指定从哪里拉取发行镜像列表的文件。Red Hat Advanced Cluster Management 的默认发行镜像位于 Quay.io 目录中。镜像被 acm-hive-openshift-releases GitHub 仓库中的文件引用。

4.1. 同步可用发行镜像

版本镜像会频繁更新,因此可能需要同步发行镜像列表,以确保可以选择最新的可用版本。发行镜像可在 acm-hive-openshift-releases GitHub 仓库中找到。

发行镜像有三个级别的稳定性:

表 4.1. 发行镜像的稳定性级别

类别

描述

stable

已确认用于正确安装和构建集群的完整测试镜像。

fast

部分进行了测试,但稳定性可能低于稳定版本。

candidate

最新镜像,但未经测试。可能会有一些程序错误。

完成以下步骤以刷新列表:

  1. 如果启用了安装程序管理的 acm-hive-openshift-releases 订阅,请通过将 disableUpdateClusterImageSets 设置为 true 来禁用订阅。您可以输入以下命令删除订阅:

    oc delete -f subscription/subscription-stable
  2. 克隆 acm-hive-openshift-releases GitHub 仓库。
  3. 输入以下命令连接到稳定版本镜像并同步您的 Red Hat Advanced Cluster Management for Kubernetes hub 集群:

    make subscribe-stable

    备注:您只能在使用 Linux 或者 MacOS 操作系统时运行这个 make 命令。

    大约一分钟后,最新的 stable 镜像列表将可用。

    • 要同步并显示快速发行镜像,请输入以下命令:

      make subscribe-fast

      备注:您只能在使用 Linux 或者 MacOS 操作系统时运行这个 make 命令。

      运行此命令后,当前可用的镜像会在约一分钟内在可用的 stablefast 发行镜像列表中出现。

    • 要同步并显示 candidate 发行镜像,请输入以下命令:

      make subscribe-candidate

      备注:您只能在使用 Linux 或者 MacOS 操作系统时运行这个 make 命令。

      运行该命令后,当前可用的镜像会更新可用的 stablefastcandidate 发行镜像列表。

  4. 在创建集群时,查看 Red Hat Advanced Cluster Management 控制台中当前可用发行镜像的列表。
  5. 使用以下格式输入命令来从这些频道中取消订阅以停止查看更新:

    oc delete -f subscription/subscription-stable

4.1.1. 连接时维护自定义的发行镜像列表

您可能希望确保所有集群都使用同一发行镜像。为简化操作,您可以创建自己的自定义列表,在其中包含创建集群时可用的发行镜像。完成以下步骤以管理可用发行镜像:

  1. 如果启用了安装程序管理的 acm-hive-openshift-releases 订阅,请通过将 disableUpdateClusterImageSets 设置为 true 来禁用它。
  2. acm-hive-openshift-releases GitHub 仓库进行分叉(fork)。
  3. spec: pathname 更改为访问分叉仓库的 GitHub 名称,而不是 stolostron,以更新 ./subscription/channel.yaml 文件。此步骤指定 hub 集群在哪里检索发行镜像。您更新的内容应类似以下示例:

    spec:
      type: GitHub
      pathname: https://github.com/<forked_content>/acm-hive-openshift-releases.git

    forked_content 替换为已分叉仓库的路径。

  4. 使用 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群时,为镜像添加 YAML 文件到 ./clusterImageSets/stable/ or./ clusterImageSets/fast/* 目录中。*Tip:您可以通过将更改合并到已分叉的存储库,从主存储库中检索可用的 YAML 文件。
  5. 将更改提交并合并到您的已分叉仓库。
  6. 在克隆了 acm-hive-openshift-releases 仓库后,使用以下命令来更新 stable 镜像以同步 stable 发行镜像列表:

    make subscribe-stable

    备注:您只能在使用 Linux 或者 MacOS 操作系统时运行这个 make 命令。

    运行此命令后,可用稳定镜像列表会在约一分钟内更新为当前可用镜像。

  7. 默认情况下,仅会列出稳定镜像。要同步并显示快速发行镜像,请输入以下命令:

    make subscribe-fast

    备注:您只能在使用 Linux 或者 MacOS 操作系统时运行这个 make 命令。

    运行此命令后,可用快速镜像列表会在约 1 分钟内更新为当前可用镜像。

  8. 默认情况下,Red Hat Advanced Cluster Management 会预加载几个 ClusterImageSets。您可以使用以下命令列出可用内容并删除默认值。

    oc get clusterImageSets
    oc delete clusterImageSet <clusterImageSet_NAME>

    备注:如果您还没有通过将 disableUpdate ClusterImageSets 的值设置为 true 来禁用安装程序管理的 Cluster ImageSet 的自动更新,则您删除的任何镜像都会被自动重新创建。

  9. 在创建集群时,查看 Red Hat Advanced Cluster Management 控制台中当前可用发行镜像的列表。

4.1.2. 断开连接时维护自定义的发行镜像列表

在某些情况下,当节点集群没有互联网连接时,您需要维护一个自定义的发行镜像列表。您可以创建自己的自定义列表,在其中包含创建集群时可用的发行镜像。完成以下步骤以在断开连接的情况下管理可用发行镜像:

  1. 在连接的系统上,导航到 acm-hive-openshift-releases GitHub 仓库
  2. clusterImageSets 目录复制到可以访问断开连接的 Red Hat Advanced Cluster Management for Kubernetes hub 集群的系统中。
  3. 使用 Red Hat Advanced Cluster Management 控制台手动添加 clusterImageSet YAML 内容,为在创建集群时可用的镜像添加 YAML 文件。
  4. 创建 clusterImageSets 命令:

    oc create -f <clusterImageSet_FILE>

    在为您要添加的每个资源运行此命令后,可用发行镜像列表将变为可用。

  5. 另外,您还可以将镜像 URL 直接粘贴到 Red Hat Advanced Cluster Management 的创建集群控制台中。这将创建新的 clusterImageSets(如果此前不存在)。
  6. 在创建集群时,查看 Red Hat Advanced Cluster Management 控制台中当前可用发行镜像的列表。

第 5 章 创建和修改裸机资产

裸机资产是指被配置为运行您的云操作的虚拟服务器或物理服务器。Red Hat Advanced Cluster Management for Kubernetes 将连接到您的管理员创建的裸机资产,并可在其上创建集群。

您必须在 Red Hat Advanced Cluster Management for Kubernetes 中创建裸机资产,以便在其上创建集群。使用以下步骤创建运行由 Red Hat Advanced Cluster Management for Kubernetes 管理的集群的裸机资产。

5.1. 先决条件

创建裸机资产前需要满足以下先决条件:

  • 在 OpenShift Container Platform 版本 4.5 或更高版本上部署了 Red Hat Advanced Cluster Management for Kubernetes hub 集群。
  • 可访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群以连接到裸机资产。
  • 配置了裸机资产,以及登录凭证(包含登录和管理该资产所需的权限)。备注:裸机资产的登录凭证包括您的管理员为资产提供的以下项:

    • 用户名
    • 密码
    • 基板管理控制器地址
    • 引导 NIC MAC 地址

5.2. 使用控制台创建裸机资产

要使用 Red Hat Advanced Cluster Management for Kubernetes 控制台创建裸机资产,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Bare metal assets
  2. Bare metal assets 页面上,点击 Create bare metal resources
  3. 为资产输入一个名称,用于在创建集群时标识它。
  4. 输入要用来创建裸机资源的命名空间。

    备注:裸机资产、受管裸机集群及其相关 secret 必须位于同一命名空间中。

    有权访问此命名空间的用户可以在创建集群时将此资产与集群相关联。

  5. 输入基板管理控制器地址。这是实现与主机通信的控制器。支持以下协议:

  6. 为裸机资产输入用户名和密码。
  7. 为裸机资产添加引导 NIC MAC 地址。这是主机的联网 NIC 的 MAC 地址,用于在裸机资产上置备主机。

您可以继续在裸机上创建集群

5.3. 修改裸机资产

如果您需要修改裸机资产的设置,请完成以下步骤:

  1. 在 Red Hat Advanced Cluster Management for Kubernetes 控制台导航中选择:Automate infrastructure > Bare metal asset.
  2. 选择表中您要修改的资产的选项菜单。
  3. 选择 Edit asset

5.4. 删除裸机资产

当裸机资产不再用于任何集群时,您可以将其从可用的裸机资产列表中删除。删除未使用的资产既可以简化您的可用资产列表,又可以防止意外选择该资产。

要删除裸机资产,请完成以下步骤:

  1. 在 Red Hat Advanced Cluster Management for Kubernetes 控制台导航中选择:Automate infrastructure > Bare metal asset.
  2. 选择表中要删除的资产的选项菜单。
  3. 选择 Delete asset

第 6 章 创建供应商连接

要使用 Red Hat Advanced Cluster Management for Kubernetes 在云服务供应商处创建 Red Hat OpenShift Container Platform 集群,需要具有供应商连接

供应商连接存储供应商的访问凭证和配置信息。每个供应商帐户都需要其自身的供应商连接,就像单个供应商的每个域一样。

以下文件详细介绍了为每个受支持供应商创建连接文档所需的信息:

6.1. 为 Amazon Web Services 创建供应商连接

您需要具有供应商连接才能使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 Amazon Web Services (AWS) 上部署和管理 OpenShift 集群。

备注:这个过程必须在使用 Red Hat Advanced Cluster Management for Kubernetes 创建集群之前完成。

6.1.1. 先决条件

创建供应商连接前必须满足以下先决条件:

  • 已部署 Red Hat Advanced Cluster Management for Kubernetes hub 集群
  • 可通过互联网访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群,以便它在 Amazon Web Services 上创建 Kubernetes 集群
  • Amazon Web Services (AWS) 登录凭证,其中包括访问密钥 ID 和 secret 访问密钥。请参阅了解和获取您的安全凭证
  • 允许在 AWS 上安装集群的帐户权限。有关如何配置的说明,请参阅配置 AWS 帐户

6.1.2. 使用控制台创建供应商连接

要从 Red Hat Advanced Cluster Management for Kubernetes 控制台创建供应商连接,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页面上,选择 Provider connections 选项卡。

    此时会显示现有供应商连接。

  3. 选择 Add a connection
  4. 选择 Amazon Web Services 作为您的供应商。
  5. 为供应商连接添加名称。
  6. 从列表中为您的供应商连接选择一个命名空间。

    提示:为方便起见,同时为了提高安全性,创建一个命名空间,专门用于托管您的供应商连接。

  7. 另外,您还可以为您的供应商连接添加基本 DNS 域。如果您将基本 DNS 域添加到供应商连接中,则当使用这个供应商连接创建集群时,会自动填充到正确的字段中。
  8. 为您的 Amazon Web Services 帐户添加 AWS 访问密钥 ID。登录 AWS 以查找该 ID。
  9. 添加 AWS Secret 访问密钥
  10. 输入您的 Red Hat OpenShift pull secret。您可以从 Pull secret 下载 pull secret。
  11. 添加可让您连接到集群的 SSH 私钥SSH 公钥。您可以使用现有密钥对,或使用密钥生成程序创建新密钥对。请参阅生成 SSH 私钥并将其添加到代理中,以了解有关如何生成密钥的更多信息。
  12. 点击 Create。当您创建供应商连接时,会将其添加到供应商连接列表中。

要创建使用此供应商连接的集群,您可以完成在 Amazon Web Services 上创建集群中的步骤。

6.1.3. 删除您的供应商连接

当您不再管理使用某个供应商连接的集群时,请删除供应商连接以保护供应商连接中的信息。

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择 Provider connections
  3. 选择您要删除的供应商连接旁的选项菜单。
  4. 选择 Delete connection

6.2. 为 Microsoft Azure 创建供应商连接

您需要具有供应商连接才能使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 Microsoft Azure 上创建和管理 Red Hat OpenShift Container Platform 集群。

备注:这个过程是使用 Red Hat Advanced Cluster Management for Kubernetes 创建集群的先决条件。

6.2.1. 先决条件

创建供应商连接前必须满足以下先决条件:

  • 已部署 Red Hat Advanced Cluster Management for Kubernetes hub 集群。
  • 可通过互联网访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群,以便它在 Azure 上创建 Kubernetes 集群
  • Azure 登录凭证,其中包括您的基域资源组和 Azure Service Principal JSON。请参阅 azure.microsoft.com
  • 允许在 Azure 上安装集群的帐户权限。如需更多信息,请参阅如何配置 Cloud Services配置 Azure 帐户

6.2.2. 使用控制台创建供应商连接

要从 Red Hat Advanced Cluster Management for Kubernetes 控制台创建供应商连接,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页面上,选择 Provider connections 选项卡。

    此时会显示现有供应商连接。

  3. 选择 Add a connection
  4. 选择 Microsoft Azure 作为您的供应商。
  5. 为供应商连接添加名称。
  6. 从列表中为您的供应商连接选择一个命名空间。

    提示:为方便起见,同时为了提高安全性,您可以创建一个命名空间,专门用于托管您的供应商连接。

  7. 另外,您还可以为您的供应商连接添加基本 DNS 域。如果您将基本 DNS 域添加到供应商连接中,则当使用这个供应商连接创建集群时,会自动填充到正确的字段中。
  8. 为您的 Azure 帐户添加 基本域资源组名称。此条目是您使用 Azure 帐户创建的资源名称。您可以在 Azure 界面中选择 Home > DNS Zones 来查找您的基域资源组名称。您的基本域资源组名称位于条目的 Resource Group 列中,其中包含应用到您的帐户的基本 DNS 域。
  9. 添加您的客户端 ID。当您使用以下命令创建服务主体时,这个值作为 appId 属性被生成:

    az ad sp create-for-rbac --role Contributor --name <service_principal>

    service_principal 替换为您的服务主体名。

  10. 添加您的 客户端 Secret。当您使用以下命令创建服务主体时,这个值作为 password 属性被生成:

    az ad sp create-for-rbac --role Contributor --name <service_principal>

    service_principal 替换为您的服务主体名。

  11. 添加您的 订阅 ID。这个值是以下命令输出中的 id 属性:

    az account show
  12. 添加您的租户 ID。这个值是以下命令输出中的 tenantId 属性:

    az account show
  13. 输入您的 Red Hat OpenShift pull secret。您可以从 Pull secret 下载 pull secret。
  14. 添加用于连接到集群的 SSH 私钥SSH 公钥。您可以使用现有密钥对,或使用密钥生成程序创建新密钥对。请参阅生成 SSH 私钥并将其添加到代理中,以了解有关如何生成密钥的更多信息。
  15. 点击 Create。当您创建供应商连接时,会将其添加到供应商连接列表中。

要创建使用此供应商连接的集群,您可以完成在 Microsoft Azure 上创建集群中的步骤。

6.2.3. 删除您的供应商连接

当您不再管理使用某个供应商连接的集群时,请删除供应商连接以保护供应商连接中的信息。

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择 Provider connections
  3. 选择您要删除的供应商连接的选项菜单。
  4. 选择 Delete connection

6.3. 为 Google Cloud Platform 创建供应商连接

您需要具有供应商连接才能使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 Google Cloud Platform (GCP) 上创建和管理 Red Hat OpenShift Container Platform 集群。

备注:这个过程是使用 Red Hat Advanced Cluster Management for Kubernetes 创建集群的先决条件。

6.3.1. 先决条件

创建供应商连接前必须满足以下先决条件:

  • 已部署 Red Hat Advanced Cluster Management for Kubernetes hub 集群
  • 可通过互联网访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群,以便它在 GCP 上创建 Kubernetes 集群
  • GCP 登录凭证,其中包括用户 Google Cloud Platform 项目 ID 和 Google Cloud Platform 服务帐户 JSON 密钥。请参阅创建和管理项目
  • 允许在 GCP 上安装集群的帐户权限。有关如何配置帐户的说明,请参阅配置 GCP 项目

6.3.2. 使用控制台创建供应商连接

要从 Red Hat Advanced Cluster Management for Kubernetes 控制台创建供应商连接,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 在 Clusters 页面上,选择 Provider connections 选项卡。

    此时会显示现有供应商连接。

  3. 选择 Add a connection
  4. 选择 Google Cloud Platform 作为您的供应商。
  5. 为供应商连接添加名称。
  6. 从列表中为您的供应商连接选择一个命名空间。

    提示

    为方便和安全起见,创建一个命名空间,专门用于托管您的供应商连接。

  7. 另外,您还可以为您的供应商连接添加基本 DNS 域。如果您将基本 DNS 域添加到供应商连接中,则当使用这个供应商连接创建集群时,会自动填充到正确的字段中。
  8. 为您的 GCP 帐户添加 Google Cloud Platform 项目 ID。登录到 GCP 以检索您的设置。
  9. 添加 Google Cloud Platform 服务帐户 JSON 密钥。完成以下步骤创建带有正确权限的服务帐户:

    1. 在 GCP 主菜单中,选择 IAM & Admin 并启动 Service Accounts applet
    2. 选择 Create Service Account
    3. 提供服务帐户的 NameService account IDDescription
    4. 选择 Create 来创建服务帐户。
    5. 选择 Owner 角色,然后点 Continue
    6. Create Key
    7. 选择 JSON 并点 Create
    8. 将生成的文件保存到您的计算机中。
    9. 提供 Google Cloud Platform 服务帐户 JSON 密钥 的内容。
  10. 输入您的 Red Hat OpenShift pull secret。您可以从 Pull secret 下载 pull secret。
  11. 添加 SSH 私钥SSH 公钥以便您访问集群。您可以使用现有密钥对,或使用密钥生成程序创建新密钥对。请参阅生成 SSH 私钥并将其添加到代理中,以了解有关如何生成密钥的更多信息。
  12. 点击 Create。当您创建供应商连接时,会将其添加到供应商连接列表中。

要在创建集群时使用此连接,您可以完成在 Google Cloud Platform 上创建集群中的步骤。

6.3.3. 删除您的供应商连接

当您不再管理使用某个供应商连接的集群时,请删除供应商连接以保护供应商连接中的信息。

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择 Provider connections
  3. 选择您要删除的供应商连接旁的选项菜单。
  4. 选择 Delete connection

6.4. 为 VMware vSphere 创建供应商连接

您需要具有供应商连接才能使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 VMware vSphere 上部署和管理 Red Hat OpenShift Container Platform 集群。备注:仅支持 OpenShift Container Platform 版本 4.5.x 及更新的版本。

备注:此流程必须在使用 Red Hat Advanced Cluster Management 创建集群前完成。

6.4.1. 先决条件

创建供应商连接前必须满足以下先决条件:

  • 在 OpenShift Container Platform 版本 4.5 或更高版本上部署了 Red Hat Advanced Cluster Management hub 集群。
  • 可通过互联网访问 Red Hat Advanced Cluster Management hub 集群,以便它在 VMware vSphere 上创建 Kubernetes 集群。
  • 使用安装程序置备的基础架构时为 OpenShift Container Platform 配置了 VMware vSphere 登录凭证和 vCenter 要求。请参阅在 vSphere 上安装集群。这些凭证包括以下信息:

    • vCenter 帐户权限。
    • 集群资源。
    • DHCP 可用。
    • ESXi 主机的时间已同步(例如: NTP)。

6.4.2. 使用控制台创建供应商连接

要从 Red Hat Advanced Cluster Management 控制台创建供应商连接,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页面上,选择 Provider connections 选项卡。

    此时会显示现有供应商连接。

  3. 选择 Add a connection
  4. 选择 VMware vSphere 作为您的供应商。
  5. 为供应商连接添加名称。
  6. 从列表中为您的供应商连接选择一个命名空间。

    提示:为方便起见,同时为了提高安全性,创建一个命名空间,专门用于托管您的供应商连接。

  7. 您可以选择为您的供应商连接添加基本 DNS 域。如果您将基本 DNS 域添加到供应商连接中,则当使用这个供应商连接创建集群时,会自动填充到正确的字段中。
  8. 添加 VMware vCenter 服务器完全限定主机名或 IP 地址。该值必须在 vCenter 服务器 root CA 证书中定义。如果可能,请使用完全限定主机名。
  9. 添加 VMware vCenter 用户名。
  10. 添加 VMware vCenter 密码。
  11. 添加 VMware vCenter root CA 证书。

    1. 您可以使用 VMware vCenter 服务器的证书在 download.zip 软件包中下载证书,地址为 https://<vCenter_address>/certs/download.zip。将 vCenter_address 替换为 vCenter 服务器的地址。
    2. 解压缩 download.zip 文件。
    3. 使用 certs/<platform> 目录中包含 .0 扩展名的证书。提示:您可以使用 ls certs/<platform> 命令列出 平台的所有可用证书。

      使用平台的缩写替换 platformlinmacwin

      例如: certs/lin/3a343545.0

  12. 添加 VMware vSphere 集群名称。
  13. 添加 VMware vSphere 数据中心。
  14. 添加 VMware vSphere 默认数据存储。
  15. 输入 OpenShift Container Platform pull secret。您可以从 Pull secret 下载 pull secret。
  16. 添加可让您连接到集群的 SSH 私钥和 SSH 公钥。您可以使用现有密钥对,或使用密钥生成程序创建新密钥对。如需更多信息,请参阅生成 SSH 私钥并将其添加到代理中
  17. 点击 Create。当您创建供应商连接时,会将其添加到供应商连接列表中。

要创建使用此供应商连接的集群,完成在 VMware vSphere 上创建集群中的步骤。

6.4.3. 删除您的供应商连接

当您不再管理使用某个供应商连接的集群时,请删除供应商连接以保护供应商连接中的信息。

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择 Provider connections
  3. 选择您要删除的供应商连接的选项菜单。
  4. 选择 Delete connection

6.5. 为裸机创建供应商连接

您需要具有供应商连接才能使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在裸机环境中部署和管理 Red Hat OpenShift Container Platform 集群。

6.5.1. 先决条件

创建供应商连接前需要以下先决条件:

  • 已部署 Red Hat Advanced Cluster Management for Kubernetes hub 集群。在管理裸机集群时,必须在 Red Hat OpenShift Container Platform 版本 4.5 或更高版本上安装了 hub 集群。
  • 可通过互联网访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群,以便它在裸机服务器上创建 Kubernetes 集群
  • 您的裸机服务器登录凭证,其中包括 libvirt URI、SSH 私钥和 SSH 已知主机列表;请参阅生成 SSH 私钥并将其添加到代理中
  • 对于断开连接的环境,您必须配置了一个镜像 registry,您可以在其中复制发行镜像以进行集群创建。如需更多信息,请参阅 OpenShift Container Platform 文档中的用于断开连接的安装的镜像
  • 允许在裸机基础架构上安装集群的帐户权限

6.5.2. 准备置备主机

在创建裸机凭证和集群时,您必须有一个置备主机。置备主机是可用于安装的 bootstrap 主机虚拟机。它可以是虚拟机,也可以是运行基于内核的虚拟机 (KVM) 的服务。创建凭证和集群时,您需要此主机的详细信息。完成以下步骤以配置置备(provisioner)主机:

  1. 使用 SSH 登录 provisioner 节点。
  2. 运行以下命令,创建非 root 用户 (user-name) 并为该用户提供 sudo 权限:

    useradd <user-name>
    passwd <password>
    echo "<user-name> ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/<user-name>
    chmod 0440 /etc/sudoers.d/<user-name>
  3. 输入以下命令为新用户创建 SSH 密钥:

    su - <user-name> -c "ssh-keygen -t rsa -f /home/<user-name>/.ssh/id_rsa -N ''"
  4. 使用新创建的用户登陆到 provisioner 节点。

    su - <user-name>
    [user-name@provisioner ~]$
  5. 输入以下命令使用 Red Hat Subscription Manager 来注册 provisioner 节点:

    sudo subscription-manager register --username=<user-name> --password=<password> --auto-attach
    sudo subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms --enable=rhel-8-for-x86_64-baseos-rpms

    如需有关 Red Hat Subscription Manager 的更多信息,请参阅 Red Hat OpenShift Container Platform 文档中的使用和配置 Red Hat Subscription Manager

  6. 运行以下命令来安装所需的软件包:

    sudo dnf install -y libvirt qemu-kvm mkisofs python3-devel jq ipmitool
  7. 修改用户以便为新创建的用户中添加 libvirt 组。

    sudo usermod --append --groups libvirt <user-name>
  8. 输入以下命令重启 firewalld 并启用 http 服务:

    sudo systemctl start firewalld
    sudo firewall-cmd --zone=public --add-service=http --permanent
    sudo firewall-cmd --add-port=5000/tcp --zone=libvirt  --permanent
    sudo firewall-cmd --add-port=5000/tcp --zone=public   --permanent
    sudo firewall-cmd --reload
  9. 输入以下命令启动并启用 libvirtd 服务:

    sudo systemctl start libvirtd
    sudo systemctl enable libvirtd --now
  10. 输入以下命令创建默认存储池并启动它:

    sudo virsh pool-define-as --name default --type dir --target /var/lib/libvirt/images
    sudo virsh pool-start default
    sudo virsh pool-autostart default
  11. 查看以下示例来配置网络:

    • 置备网络(IPv4 地址)

      sudo nohup bash -c """
          nmcli con down "$PROV_CONN"
          nmcli con delete "$PROV_CONN"
          # RHEL 8.1 appends the word "System" in front of the connection, delete in case it exists
          nmcli con down "System $PROV_CONN"
          nmcli con delete "System $PROV_CONN"
          nmcli connection add ifname provisioning type bridge con-name provisioning
          nmcli con add type bridge-worker ifname "$PROV_CONN" master provisioning
          nmcli connection modify provisioning ipv4.addresses 172.22.0.1/24 ipv4.method manual
          nmcli con down provisioning
          nmcli con up provisioning"""

      完成此步骤后,SSH 连接可能会断开。

      IPv4 地址可以是任何无法使用 baremetal 网络路由的地址。

    • 置备网络(IPv6 地址)

      sudo nohup bash -c """
          nmcli con down "$PROV_CONN"
          nmcli con delete "$PROV_CONN"
          # RHEL 8.1 appends the word "System" in front of the connection, delete in case it exists
          nmcli con down "System $PROV_CONN"
          nmcli con delete "System $PROV_CONN"
          nmcli connection add ifname provisioning type bridge con-name provisioning
          nmcli con add type bridge-worker ifname "$PROV_CONN" master provisioning
          nmcli connection modify provisioning ipv6.addresses fd00:1101::1/64 ipv6.method manual
          nmcli con down provisioning
          nmcli con up provisioning"""

      完成此步骤后,SSH 连接可能会断开。

      IPv6 地址可以是任何无法使用 baremetal 网络路由的地址。

      在使用 IPv6 地址时,请确保启用了 UEFI,并且将 UEFI PXE 设置设为 IPv6 协议。

  12. 使用 ssh 重新连接到 provisioner 节点(如果需要)。

    # ssh <user-name>@provisioner.<cluster-name>.<domain>
  13. 运行以下命令验证连接网桥是否已正确创建:

    nmcli con show

    您返回的结果类似以下内容:

    NAME

    UUID

    TYPE

    DEVICE

    baremetal

    4d5133a5-8351-4bb9-bfd4-3af264801530

    bridge

    baremetal

    provisioning

    43942805-017f-4d7d-a2c2-7cb3324482ed

    bridge

    provisioning

    virbr0

    d9bca40f-eee1-410b-8879-a2d4bb0465e7

    bridge

    virbr0

    bridge-worker-eno1

    76a8ed50-c7e5-4999-b4f6-6d9014dd0812

    Ethernet

    eno1

    bridge-worker-eno2

    f31c3353-54b7-48de-893a-02d2b34c4736

    Ethernet

    eno2

  14. 通过以下步骤创建 pull-secret.txt 文件:

    vim pull-secret.txt
    1. 在 Web 浏览器中,导航到 Install OpenShift on Bare Metal with user-provisioned infrastructure,再向下滚动到 Downloads 部分。
    2. Copy pull secret
    3. 将内容粘贴到 pull-secret.txt 文件中,并将内容保存到 user-name 用户的主目录中。

您已准备好创建裸机凭证。

6.5.3. 使用控制台创建供应商连接

要从 Red Hat Advanced Cluster Management for Kubernetes 控制台创建供应商连接,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页面上,选择 Provider connections 选项卡。

    此时会显示现有供应商连接。

  3. 选择 Add connection
  4. 选择 Bare metal 作为您的供应商。
  5. 为供应商连接添加名称。
  6. 从列表中为您的供应商连接选择一个命名空间。

    提示:为方便起见,同时为了提高安全性,创建一个命名空间,专门用于托管您的供应商连接。

  7. 另外,您还可以为您的供应商连接添加基本 DNS 域。如果您将基本 DNS 域添加到供应商连接中,则当使用这个供应商连接创建集群时,会自动填充到正确的字段中。
  8. 添加 libvirt URI。libvirt URI 适用于您为 bootstrap 节点创建的置备节点。libvirt URI 应该类似以下示例:

    <qemu+ssh>:://<user-name>@<provision-host.com>/system
    • 使用您连接到调配主机上的 libvirt 守护进程的方法替换 qemu+ssh
    • 使用有权在置备主机上创建 bootstrap 节点的用户名替换 user-name
    • provision-host.com 替换为您的调配主机的链接。这可以是 IP 地址或完全限定域名地址。

      如需更多信息,请参阅连接 URI

  9. 为调配主机添加 SSH 已知主机的列表。这个值可以是 IP 地址或完全限定域名地址,但最好使用您在 libvirt URI 值中使用的相同格式。
  10. 输入您的 Red Hat OpenShift pull secret。您可以从 Pull secret 下载 pull secret。
  11. 添加 SSH 私钥SSH 公钥 以便您可以访问集群。您可以使用现有密钥,或使用密钥生成程序创建新密钥。请参阅生成 SSH 私钥并将其添加到代理中,以了解有关如何生成密钥的更多信息。
  12. 只适用于断开连接的安装:使用所需信息,为断开连接的安装完成配置 部分中的字段:

    • 镜像 registry 镜像 :这个值包含断开连接的 registry 路径。该路径包含所有用于断开连接的安装镜像的主机名、端口和库路径。示例: repository.com:5000/openshift/ocp-release

      该路径会在 install-config.yaml 中创建一个到 Red Hat OpenShift Container Platform 发行镜像的镜像内容源策略映射。例如,repository.com:5000 生成此 imageContentSource 内容:

      imageContentSources:
      - mirrors:
        - registry.example.com:5000/ocp4
        source: quay.io/openshift-release-dev/ocp-release-nightly
      - mirrors:
        - registry.example.com:5000/ocp4
        source: quay.io/openshift-release-dev/ocp-release
      - mirrors:
        - registry.example.com:5000/ocp4
        source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
    • Bootstrap OS 镜像 :此值包含用于 bootstrap 机器的镜像的 URL。
    • 集群操作系统镜像 :此值包含用于 Red Hat OpenShift Container Platform 集群机器的镜像的 URL。
    • 其他信任捆绑包 :此值提供访问镜像 registry 所需的证书文件内容。

      备注:如果您要从断开连接的环境中的 hub 部署受管集群,并希望在安装后自动导入它们,请使用 YAML 编辑器将 Image Content Source Policy 添加到 install-config.yaml 文件中。以下示例中显示了一个示例:

      imageContentSources:
      - mirrors:
        - registry.example.com:5000/rhacm2
        source: registry.redhat.io/rhacm2
  13. Create。当您创建供应商连接时,会将其添加到供应商连接列表中。

要创建使用此供应商连接的集群,您可以完成在裸机上创建集群中的步骤。

6.5.4. 删除您的供应商连接

当您不再管理使用某个供应商连接的集群时,请删除供应商连接以保护供应商连接中的信息。

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择 Provider connections
  3. 选择您要删除的供应商连接旁的选项菜单。
  4. 选择 Delete connection

第 7 章 创建集群

了解如何使用 Red Hat Advanced Cluster Management for Kubernetes 跨云供应商创建 Red Hat OpenShift Container Platform 集群。

7.1. 在 Amazon Web Services 上创建集群

您可以使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 Amazon Web Services (AWS) 上创建一个 Red Hat OpenShift Container Platform 集群。

7.1.1. 先决条件

在 AWS 上创建集群前必须满足以下先决条件:

  • 已部署 Red Hat Advanced Cluster Management for Kubernetes hub 集群
  • 可通过互联网访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群,以便它在 Amazon Web Services 上创建 Kubernetes 集群
  • AWS 供应商连接。如需更多信息,请参阅为 Amazon Web Services 创建供应商连接
  • 在 AWS 中配置了域。有关如何配置域的说明,请参阅配置 AWS 帐户
  • Amazon Web Services (AWS) 登录凭证,其中包括用户名、密码、访问密钥 ID 和 secret 访问密钥。请参阅了解和获取您的安全凭证
  • OpenShift Container Platform 镜像 pull secret。请参阅使用镜像 pull secret

备注:如果更改了云供应商访问密钥,则必须手动更新置备的集群访问密钥。如需更多信息,请参阅已知问题, 不支持置备的集群的自动 secret 更新

7.1.2. 使用 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群

要从 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 在 Clusters 页面上,点击 Add Cluster
  3. 选择 Create a cluster

    备注:此过程用于创建集群。如果您有一个要导入的现有集群,请参阅将目标受管集群导入到 hub 集群以了解这些步骤。

  4. 为集群输入一个名称。此名称用于集群的主机名。

    提示:要在您在控制台中输入信息时查看 yaml 内容更新,可将 YAML 开关设置为 ON

  5. 为基础架构供应商选择 Amazon Web Services
  6. 指定您要用于集群的发行镜像。这将标识用于创建集群的 OpenShift Container Platform 镜像的版本。如果要使用的版本可用,您可以从镜像列表中选择镜像。如果您要使用的镜像不是标准镜像,您可以输入您要使用的镜像的 url。有关发行镜像的更多信息,请参阅发行镜像
  7. 从列表上的可用连接中选择您的供应商连接。如果您没有配置供应商连接,或想要配置一个新供应商连接,请参阅添加连接。如需了解更多与创建供应商相关的信息,请参阅为 Amazon Web Services 创建供应商连接
  8. 添加您要与集群关联的附加标签。这些标签有助于识别集群并限制搜索结果。
  9. 为集群配置节点池

    节点池定义用于集群的节点的位置和大小。

    区域指定节点所处的地理位置。距离更近的区域可能会提供更快的性能,但距离更远的区域可能更为分散。

    • Master 池:master 池中为您的集群创建三个 Master 节点。Master 节点共享集群活动的管理。您可以选择区域中的多个区以实现更为分散的 master 节点组。您可在创建实例后更改实例的类型和大小,但也可以在此部分中指定。默认值为 mx5.xlarge - 4 vCPU, 16 GiB RAM - General Purpose,root 存储为 100 GiB。
    • Worker 池:您可以在 worker 池中创建零个或多个 worker 节点,以运行集群的容器工作负载。它们可以位于单个 worker 池中,也可以分布在多个 worker 池中。如果指定了零个 worker 节点,master 节点也会作为 worker 节点工作。
  10. 配置必要的集群网络选项。输入您为 AWS 帐户配置的基本 DNS 信息。如果已有与所选供应商连接关联的基域,则该值会在那个字段中填充。您可以修改它的值来覆盖它。如需更多信息,请参阅配置 AWS 帐户。此名称用于集群的主机名。
  11. 可选:为集群配置标签。
  12. Create。在创建和导入过程完成后,您可以查看您的集群详情。

    备注:您不必运行 kubectl 命令,它为导入集群提供集群的详情。当您创建集群时,它由 Red Hat Advanced Cluster Management 管理自动配置。

7.1.3. 访问集群

要访问由 Red Hat Advanced Cluster Management for Kubernetes 管理的集群,请完成以下步骤:

  1. 在 Red Hat Advanced Cluster Management 导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择您创建的或想要访问的集群的名称。此时会显示集群详情。
  3. 选择 Reveal credentials 来查看集群的用户名和密码。记下这些值以便在登录到集群时使用。
  4. 选择 Console URL 以链接到集群。
  5. 使用在第 3 步中找到的用户 ID 和密码登录集群。
  6. 为您要访问的集群选择 Actions > Launch to cluster

    提示:如果知道登录凭证,可以通过为您要访问的集群选择 Actions > Launch to cluster 来访问集群。

7.2. 在 Microsoft Azure 上创建集群

您可以使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 Microsoft Azure 上部署一个 Red Hat OpenShift Container Platform 集群。

7.2.1. 先决条件

在 Azure 上创建集群前必须满足以下先决条件:

备注:如果更改了云供应商访问密钥,则必须手动更新置备的集群访问密钥。如需更多信息,请参阅已知问题, 不支持置备的集群的自动 secret 更新

7.2.2. 使用 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群

要从 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页面上,点击 Add Cluster
  3. 选择 Create a cluster

    备注:此过程用于创建集群。如果您有一个要导入的现有集群,请参阅将目标受管集群导入到 hub 集群以了解这些步骤。

  4. 为集群输入一个名称。此名称用于集群的主机名。

    提示:要在您在控制台中输入信息时查看 yaml 内容更新,可将 YAML 开关设置为 ON

  5. 为基础架构供应商选择 Microsoft Azure
  6. 指定您要用于集群的发行镜像。这将标识用于创建集群的 OpenShift Container Platform 镜像的版本。如果要使用的版本可用,您可以从镜像列表中选择镜像。如果您要使用的镜像不是标准镜像,您可以输入您要使用的镜像的 URL。有关发行镜像的更多信息,请参阅发行镜像
  7. 从列表上的可用连接中选择您的供应商连接。如果您没有配置供应商连接,或想要配置一个新供应商连接,请参阅添加连接。如需了解更多与创建供应商相关的信息,请参阅为 Microsoft Azure 创建供应商连接。
  8. 添加您要与集群关联的附加标签。这些标签有助于识别集群并限制搜索结果。
  9. 为集群配置节点池

    节点池定义用于集群的节点的位置和大小。

    区域指定节点所处的地理位置。距离更近的区域可能会提供更快的性能,但距离更远的区域可能更为分散。

    • Master 池:master 池中为您的集群创建三个 Master 节点。Master 节点共享集群活动的管理。您可以选择区域中的多个区以实现更为分散的 master 节点组。您可在创建实例后更改实例的类型和大小,但也可以在此部分中指定。默认值为 Standard_D4s_v3 - 4 vCPU, 16 GiB RAM - General Purpose,root 存储为 128 GiB。
    • Worker 池:您可以在 worker 池中创建零个或多个 worker 节点,以运行集群的容器工作负载。它们可以位于单个 worker 池中,也可以分布在多个 worker 池中。如果指定了零个 worker 节点,master 节点也会作为 worker 节点工作。
  10. 配置必要的集群网络选项。

    输入您为 Azure 帐户配置的基本 DNS 信息。如果已有与所选供应商连接关联的基本 DNS,则该值会在那个字段中填充。您可以修改它的值来覆盖它。如需更多信息,请参阅为 Azure 云服务配置自定义域名。此名称用于集群的主机名。

  11. 可选:为集群配置标签。
  12. Create。在创建和导入过程完成后,您可以查看您的集群详情。

    备注:您不必运行 kubectl 命令,它为导入集群提供集群的详情。当创建集群时,它由 Red Hat Advanced Cluster Management for Kubernetes 管理自动配置。

7.2.3. 访问集群

要访问由 Red Hat Advanced Cluster Management for Kubernetes 管理的集群,请完成以下步骤:

  1. 从 Red Hat Advanced Cluster Management for Kubernetes 导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择您创建的或想要访问的集群的名称。此时会显示集群详情。
  3. 选择 Reveal credentials 来查看集群的用户名和密码。记下这些值以便在登录到集群时使用。
  4. 选择 Console URL 以链接到集群。
  5. 使用在第 3 步中找到的用户 ID 和密码登录集群。
  6. 为您要访问的集群选择 Actions > Launch to cluster

    提示:如果知道登录凭证,可以通过为您要访问的集群选择 Actions > Launch to cluster 来访问集群。

7.3. 在 Google Cloud Platform 上创建集群

按照步骤在 Google Cloud Platform (GCP) 上创建 Red Hat OpenShift Container Platform 集群有关 Google Cloud Platform 的更多信息,请参阅 Google Cloud Platform

7.3.1. 先决条件

在 GCP 上创建集群前必须满足以下先决条件:

  • 已部署 Red Hat Advanced Cluster Management for Kubernetes hub 集群
  • 可通过互联网访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群,以便它在 GCP 上创建 Kubernetes 集群
  • GCP 供应商连接。如需更多信息,请参阅为 Google Cloud Platform 设置供应商连接
  • 在 GCP 中配置了域。有关如何配置域的说明,请参阅设置自定义域
  • GCP 登录凭证,其中包括用户名和密码。
  • OpenShift Container Platform 镜像 pull secret。请参阅使用镜像 pull secret

备注:如果更改了云供应商访问密钥,则必须手动更新置备的集群访问密钥。如需更多信息,请参阅已知问题, 不支持置备的集群的自动 secret 更新

7.3.2. 使用 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群

要从 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页面上,点击 Add Cluster
  3. 选择 Create a cluster

    备注:此过程用于创建集群。如果您有一个要导入的现有集群,请参阅将目标受管集群导入到 hub 集群以了解这些步骤。

  4. 为集群输入一个名称。此名称用于集群的主机名。在命名 GCP 集群时有一些限制。这些限制包括,名称不要以 goog 开始;名称的任何部分都不要包含与 google 类似的内容。如需了解完整的限制列表,请参阅 Bucket 命名指南

    提示:要在您在控制台中输入信息时查看 yaml 内容更新,可将 YAML 开关设置为 ON

  5. 为基础架构供应商选择 Google Cloud
  6. 指定您要用于集群的发行镜像。这将标识用于创建集群的 OpenShift Container Platform 镜像的版本。如果要使用的版本可用,您可以从镜像列表中选择镜像。如果您要使用的镜像不是标准镜像,您可以输入您要使用的镜像的 URL。有关发行镜像的更多信息,请参阅发行镜像
  7. 从列表上的可用连接中选择您的供应商连接。如果您没有配置供应商连接,或想要配置一个新供应商连接,请参阅添加连接。如需了解更多与创建供应商相关的信息,请参阅为 Google Cloud Platform 创建供应商连接
  8. 添加您要与集群关联的附加标签。这些标签有助于识别集群并限制搜索结果。
  9. 为集群配置节点池

    节点池定义用于集群的节点的位置和大小。

    区域指定节点所处的地理位置。距离更近的区域可能会提供更快的性能,但距离更远的区域可能更为分散。

    • Master 池:master 池中为您的集群创建三个 Master 节点。Master 节点共享集群活动的管理。您可以选择区域中的多个区以实现更为分散的 master 节点组。您可在创建实例后更改实例的类型和大小,但也可以在此部分中指定。默认值为 n1-standard-1 - n1-standard-1 1 vCPU - 通用目的,根存储为 500 GiB。
    • Worker 池:您可以在 worker 池中创建零个或多个 worker 节点,以运行集群的容器工作负载。它们可以位于单个 worker 池中,也可以分布在多个 worker 池中。如果指定了零个 worker 节点,master 节点也会作为 worker 节点工作。
  10. 配置必要的集群网络选项。

    输入您为 Google Cloud Platform 帐户配置的基本 DNS 信息。如果已有与所选供应商连接关联的基本 DNS,则该值会在那个字段中填充。您可以修改它的值来覆盖它。如需更多信息,请参阅设置自定义域。此名称用于集群的主机名。

  11. 可选:为集群配置标签。
  12. Create

在创建和导入过程完成后,您可以查看您的集群详情。

+ 备注:您不必运行 kubectl 命令,它为导入集群提供集群的详情。当创建集群时,它由 Red Hat Advanced Cluster Management for Kubernetes 管理自动配置。

7.3.3. 访问集群

要访问由 Red Hat Advanced Cluster Management for Kubernetes 管理的集群,请完成以下步骤:

  1. 从 Red Hat Advanced Cluster Management for Kubernetes 导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择您创建的或想要访问的集群的名称。此时会显示集群详情。
  3. 选择 Reveal credentials 来查看集群的用户名和密码。记下这些值以便在登录到集群时使用。
  4. 选择 Console URL 以链接到集群。
  5. 使用在第 3 步中找到的用户 ID 和密码登录集群。
  6. 为您要访问的集群选择 Actions > Launch to cluster

    提示:如果知道登录凭证,可以通过为您要访问的集群选择 Actions > Launch to cluster 来访问集群。

7.4. 在 VMware vSphere 上创建集群

您可以使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 VMware vSphere 上部署 Red Hat OpenShift Container Platform 集群。

7.4.1. 先决条件

在 vSphere 上创建集群前必须满足以下先决条件:

  • 在 OpenShift Container Platform 版本 4.5 或更高版本上部署的 Red Hat Advanced Cluster Management hub 集群。
  • 可通过互联网访问 Red Hat Advanced Cluster Management hub 集群,以便它在 vSphere 上创建 Kubernetes 集群。
  • vSphere 供应商连接。如需更多信息,请参阅为 VMware vSphere 创建供应商连接
  • Red Hat OpenShift 镜像 pull secret。请参阅使用镜像 pull secret
  • 用于部署的 VMware 实例的以下信息:

    • API 和 Ingress 实例所需的静态 IP 地址。
    • 以下的 DNS 记录:

      • api.<cluster_name>.<base_domain>,它必须指向静态 API VIP。
      • *.apps.<cluster_name>.<base_domain>,它必须指向 Ingress VIP 的静态 IP 地址。

7.4.2. 使用 Red Hat Advanced Cluster Management for Kubernetes 控制台创建集群

要从 Red Hat Advanced Cluster Management 控制台创建集群,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页中,点 Add Cluster
  3. 选择 Create a cluster

    备注:此过程用于创建集群。如果您有一个要导入的现有集群,请参阅将目标受管集群导入到 hub 集群以了解这些步骤。

  4. 为集群输入一个名称。此名称用于集群的主机名。

    备注:这个值必须与创建供应商连接先决条件中列出的 DNS 记录的名称匹配。

    提示:要在您在控制台中输入信息时查看 yaml 内容更新,可将 YAML 开关设置为 ON

  5. 为基础架构供应商选择 VMware vSphere
  6. 指定您要用于集群的发行镜像。这将标识用于创建集群的 OpenShift Container Platform 镜像的版本。如果要使用的版本可用,您可以从镜像列表中选择镜像。如果要使用的镜像不是标准镜像,您可以输入要使用的镜像的 URL。如需更多信息,请参阅发行镜像备注:仅支持 OpenShift Container Platform 版本 4.5.x 或更高版本的发行镜像。
  7. 从列表上的可用连接中选择您的供应商连接。如果您没有配置供应商连接,或想要配置一个新供应商连接,请参阅添加连接。如需了解更多与创建供应商相关的信息,请参阅创建供应商连接
  8. 输入您为 vSphere 帐户配置的基域信息。如果已有与所选供应商连接关联的基域,则该值会在那个字段中填充。您可以修改它的值来覆盖它。备注:这个值必须与创建 prerequisites 部分中列出的 DNS 记录的名称匹配。此名称用于集群的主机名。
  9. 添加您要与集群关联的附加标签。这些标签有助于识别集群并限制搜索结果。
  10. 为集群配置节点池

    节点池定义用于集群的节点的位置和大小。

    您可以在 worker 池中创建一个或多个 worker 节点,以运行集群的容器工作负载。它们可以位于单个 worker 池中,也可以分布在多个 worker 池中。

  11. 配置集群网络选项,如下所示:

    1. vSphere 网络名称 - VMware vSphere 网络名称。
    2. API VIP - 用于内部 API 通信的 IP 地址。备注:这个值必须与创建 prerequisites 部分中列出的 DNS 记录的名称匹配。如果没有提供,DNS 必须预先配置,以便 api. 可以正确解析。
    3. Ingress VIP - 用于入口流量的 IP 地址。备注:这个值必须与创建 prerequisites 部分中列出的 DNS 记录的名称匹配。如果没有提供,则必须预先配置 DNS,以便 test.apps 可以被正确解析。
  12. 可选:为集群配置标签。
  13. Create。在创建和导入过程完成后,您可以查看您的集群详情。

    备注:当您创建集群时,它由 Red Hat Advanced Cluster Management 管理自动配置。您不必运行 kubectl 命令,它为导入集群提供集群的详情。

7.4.3. 访问集群

要访问由 Red Hat Advanced Cluster Management 管理的集群,请完成以下步骤:

  1. 如果知道登录凭证,您可以通过选择集群的 Options 菜单并选择 Launch to cluster 来访问集群。
  2. 如果您不知道登录凭证

    1. 在 Red Hat Advanced Cluster Management 导航菜单中导航到 Automate infrastructure > Clusters
    2. 选择您创建的或想要访问的集群的名称。此时会显示集群详情。
    3. 选择 Reveal credentials 来查看集群的用户名和密码。使用登录到集群时的这些值。
  3. 选择 Console URL 以链接到集群。
  4. 使用在第 3 步中找到的用户 ID 和密码登录集群。
  5. 为您要访问的集群选择 Actions > Launch to cluster

    提示:如果知道登录凭证,可以通过为您要访问的集群选择 Actions > Launch to cluster 来访问集群。

7.5. 在裸机上创建集群

您可以使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在裸机环境中创建一个 Red Hat OpenShift Container Platform 集群。

7.5.1. 先决条件

在裸机环境中创建集群前需要满足以下先决条件:

  • 在 OpenShift Container Platform 版本 4.5 或更高版本上部署了 Red Hat Advanced Cluster Management for Kubernetes hub 集群。
  • 可通过互联网访问 Red Hat Advanced Cluster Management for Kubernetes hub 集群(连接),或连接到连接到互联网(断开连接)的内部或镜像 registry,以检索用于创建集群所需的镜像。
  • 运行 bootstrap 虚拟机的临时外部 KVM 主机,用于创建 Hive 集群。如需更多信息 ,请参阅准备置备主机
  • 您的裸机服务器登录凭证,其中包括上一项目中来自 bootstrap 虚拟机的 libvirt URI、SSH 私钥,以及 SSH 已知主机列表。如需更多信息,请参阅为 OpenShift 安装设置环境
  • 裸机供应商连接 ; 如需更多信息,请参阅为裸机创建供应商连接
  • 裸机环境的登录凭证,其中包括用户名、密码和基板管理控制器地址。
  • 配置了裸机资产,如果您要启用证书验证。如需更多信息,请参阅创建和修改裸机资产
  • OpenShift Container Platform 镜像 pull secret;请参阅使用镜像 pull secret

    备注:

    • 裸机资产、受管裸机集群及其相关 secret 必须位于同一命名空间中。
    • 如果更改了云供应商访问密钥,则必须手动更新置备的集群访问密钥。如需更多信息,请参阅已知问题, 不支持置备的集群的自动 secret 更新

7.5.2. 使用 Red Hat Advanced Cluster Management 控制台创建集群

要从 Red Hat Advanced Cluster Management 控制台创建集群,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. Clusters 页面上,点击 Add Cluster
  3. 选择 Create a cluster

    备注:此过程用于创建集群。如果您有一个要导入的现有集群,请参阅将目标受管集群导入到 hub 集群以了解这些步骤。

  4. 为集群输入一个名称。对于裸机集群,此名称不能是一个任意名称。它与集群 URL 相关联。确保使用的集群名称与您的 DNS 和网络设置一致。

    提示:要在您在控制台中输入信息时查看 yaml 内容更新,可将 YAML 开关设置为 ON

  5. 为基础架构供应商选择 Bare Metal
  6. 指定您要用于集群的发行镜像。这可标识用于创建集群的 Red Hat OpenShift Container Platform 镜像的版本。如果要使用的版本可用,您可以从镜像列表中选择镜像。如果您要使用的镜像不是标准镜像,您可以输入您要使用的镜像的 URL。有关发行镜像的更多信息,请参阅发行镜像
  7. 从列表上的可用连接中选择您的供应商连接。如果您没有配置供应商连接,或想要配置一个新供应商连接,请参阅添加连接。如需了解更多与创建供应商相关的信息,请参阅为裸机创建供应商连接
  8. 可选:为集群配置附加标签。
  9. 从与供应商连接关联的主机列表中选择您的主机。最少选择三个与虚拟机监控程序在同一网桥网络上的资产。

    主机列表从现有 Bare Metal Assets 编译。如果您没有创建任何裸机资产,可以在继续进行创建过程前创建或导入它们。或者,您可以选择 Disable certificate verify 来忽略要求。

  10. 配置集群网络选项。

    参数描述必需/可选

    Base DNS domain

    此基础域用于创建到 OpenShift Container Platform 集群组件的路由。它在集群供应商的 DNS 中被配置为授权启动(SOA)记录。在集群创建后无法更改此设置。

    必需

    Network type

    要部署的 Pod 网络供应商插件。OpenShiftSDN 插件是 OpenShift Container Platform 4.3 中唯一支持的插件。OVNKubernetes 插件在 OpenShift Container Platform 版本 4.3、4.4 和 4.5 中仅以技术预览提供。它通常包括在 OpenShift Container Platform 版本 4.6 及更高版本中。OVNKubernetes 必须和 IPv6 一起使用。默认值为 OpenShiftSDN

    必需

    Cluster network CIDR

    从其中分配 Pod IP 地址的 IP 地址块。OpenShiftSDN 网络插件支持多个集群网络。多个集群网络的地址块不得互相重叠。请选择足够大的地址池,以适配预期的工作负载。默认值为 10.128.0.0/14。

    必需

    Network host prefix

    分配给每个单独节点的子网前缀长度。例如,如果 hostPrefix 设为 23,则每个节点从给定的 CIDR 中分配一个 /23 子网,允许 510(2^(32-23)-2)个 pod IP 地址。默认值为 23。

    必需

    Service network CIDR

    服务的 IP 地址块。OpenShiftSDN 只允许一个 serviceNetwork 块。该地址不能与任何其他网络块相重叠。默认值为 172.30.0.0/16。

    必需

    Machine CIDR

    OpenShift Container Platform 主机使用的 IP 地址块。该地址块不得与任何其他网络块重叠。默认值为 10.0.0.0/16。

    必需

    置备网络 CIDR

    用于置备的网络的 CIDR。示例格式为:172.30.0.0/16.

    必需

    置备网络接口

    连接到置备网络的 control plane 节点上的网络接口名称。

    必需

    置备网络桥接

    附加到置备网络中的桥接名称。

    必需

    外部网络桥接

    附加到外部网络的管理程序桥接名称。

    必需

    DNS VIP

    用于内部 DNS 通信的虚拟 IP。此参数只适用于 OpenShift Container Platform 版本 4.4 及更早版本。

    OpenShift Container Platform 版本 4.4 及更早版本需要。

    API VIP

    用于内部 API 通信的虚拟 IP。DNS 必须预先配置为有 A/AAAA 或 CNAME 记录,以便 api.<cluster_name>.<Base DNS domain> 路径可以正确解析。

    必需

    Ingress VIP

    用于入口流量的虚拟 IP。DNS 必须预先配置为有 A/AAAA 或 CNAME 记录,以便 *.apps.<cluster_name>.<Base DNS domain> 路径可以正确解析。

    选填

  11. 可选:如果要更改设置以包含 configmap,请更新高级设置。
  12. Create。在创建和导入过程完成后,您可以查看您的集群详情。

    备注:您不必运行 kubectl 命令,它为导入集群提供集群的详情。当创建集群时,它由 Red Hat Advanced Cluster Management for Kubernetes 管理自动配置。

7.5.3. 访问集群

要访问由 Red Hat Advanced Cluster Management for Kubernetes 管理的集群,请完成以下步骤:

  1. 从 Red Hat Advanced Cluster Management for Kubernetes 导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择您创建的或想要访问的集群的名称。此时会显示集群详情。
  3. 选择 Reveal credentials 来查看集群的用户名和密码。记下这些值以便在登录到集群时使用。
  4. 选择 Console URL 以链接到集群。
  5. 使用在第 3 步中找到的用户 ID 和密码登录集群。
  6. 为您要访问的集群选择 Actions > Launch to cluster

    提示:如果知道登录凭证,可以通过为您要访问的集群选择 Actions > Launch to cluster 来访问集群。

第 8 章 将目标受管集群导入到 hub 集群

您可以从不同的 Kubernetes 云供应商导入集群。导入后,目标集群就成为 Red Hat Advanced Cluster Management for Kubernetes hub 集群的受管集群。除非另有指定,否则在可以访问 hub 集群和目标受管集群的任意位置完成导入任务。

hub 集群无法管理任何其他 hub 集群,但可以管理自己。hub 集群被配置为自动导入和自助管理。您不需要手动导入 hub 集群。

但是,如果您删除 hub 集群并尝试再次导入它,则需要添加 local-cluster:true 标签。

从以下说明中进行选择以通过控制台或 CLI 设置受管集群:

所需的用户类型或访问级别 :集群管理员

8.1. 使用控制台导入现有集群

安装 Red Hat Advanced Cluster Management for Kubernetes 后,就可以导入集群来进行管理。您可以从控制台和 CLI 导入。按照以下步骤从控制台导入。在此过程中,您需要通过终端来进行身份验证。

8.1.1. 先决条件

  • 您需要一个已部署的 Red Hat Advanced Cluster Management for Kubernetes hub 集群。如果要导入裸机集群,则必须在 Red Hat OpenShift Container Platform 版本 4.5 或更高版本上安装了 hub 集群。
  • 您需要一个要管理的集群,以及互联网连接。
  • 安装 kubectl。要安装 kubectl,请参阅 Kubernetes 文档中的安装和设置 kubectl
  • 您需要 base64 命令行工具。
  • 对于在 Red Hat OpenShift Dedicated 环境中导入:

    • 您必须在 Red Hat OpenShift Dedicated 环境中部署了 hub 集群。
    • Red Hat OpenShift Dedicated 的默认权限是 dedicated-admin,但不包含创建命名空间的所有权限。您必须具有 cluster-admin 权限才能使用 Red Hat Advanced Cluster Management for Kubernetes 导入和管理集群。

所需的用户类型或访问级别 :集群管理员

8.1.2. 导入集群

您可以从 Red Hat Advanced Cluster Management for Kubernetes 控制台中为每个可用的云供应商导入现有集群。

备注:hub 集群无法管理不同的 hub 集群。hub 集群被设置为自动导入和管理自身,因此您不必手动导入 hub 集群来管理自己。

  1. 从导航菜单中,将鼠标悬停在 Automate infrastructure 上,然后点击 Clusters
  2. Add a cluster
  3. 点击 Import an existing cluster
  4. 为集群提供名称。默认情况下,命名空间用于集群名称和命名空间。
  5. 可选:添加任何 附加标签

    备注:如果您导入 Red Hat OpenShift Dedicated 集群,且没有添加 vendor=OpenShiftDedicated 标签指定厂商,或者添加了 vendor=auto-detect 标签,则 managed-by=platform 标签会自动添加到集群中。您可以使用此添加标签将集群标识为一个 Red Hat OpenShift Dedicated 集群,并作为一个组来获取 Red Hat OpenShift Dedicated 集群。

  6. Save import and generate code 生成用于部署 open-cluster-management-agent-addon 的命令。此时会显示确认信息。
  7. 可选:通过配置运行 oc get managedcluster 命令时在表中显示的 URL,在集群详情页面中配置 Cluster API 地址

    1. 使用具有 cluster-admin 权限的 ID 登录到 hub 集群。
    2. 为目标受管集群配置 kubectl

      请参阅支持的云了解如何配置 kubectl

    3. 输入以下命令编辑您要导入的集群的受管集群条目:

      oc edit managedcluster <cluster-name>

      使用受管集群的名称替换 cluster-name

    4. 在 YAML 文件中的 ManagedCluster spec 中添加 ManagedClusterClientConfigs,如下例所示:

      spec:
        hubAcceptsClient: true
        managedClusterClientConfigs:
        - url: https://multicloud-console.apps.new-managed.dev.redhat.com

      将 URL 值替换为提供对您要导入的受管集群的外部访问的 URL。

  8. Import an existing cluster 窗口中,选择 Copy 命令将生成的命令和令牌复制到剪贴板。

    重要:命令中包含复制到每个导入集群的 pull secret 信息。具有访问导入集群权限的所有用户都可以查看 pull secret 信息。考虑在 https://cloud.redhat.com/ 创建一个二级 pull secret,或创建一个服务帐户来保护个人凭证。如需了解更多与 pull secret 相关的信息,请参阅使用镜像 pull secret了解并创建服务帐户

  9. 登录到您要导入的受管集群。
  10. 对于 Red Hat OpenShift Dedicated 环境,完成以下步骤:

    1. 创建 open-cluster-management-agentopen-cluster-management 命名空间或受管集群上的项目。
    2. 在 OpenShift Container Platform 目录中找到 klusterlet Operator。
    3. open-cluster-management 命名空间中或您创建的项目中安装它。

      重要:不要在 open-cluster-management-agent 命名空间中安装 Operator。

    4. 通过完成以下步骤,从导入命令中提取 bootstrap secret:

      1. 生成导入命令:

        1. 从 Red Hat Advanced Cluster Management 控制台主导航中选择 Automate infrastructure > Clusters
        2. 选择 Add a cluster > Import an existing cluster
        3. 添加集群信息,选择 Save import and generate code
      2. 复制导入命令。
      3. 将导入命令粘贴到您创建的名为 import-command 的文件中。
      4. 根据您的 Red Hat Advanced Cluster Management 版本 2.2.x,运行以下命令之一来解码导入命令:

        • 如果您运行的是升级的 Red Hat Advanced Cluster Management 版本 2.2.x 的 z-stream 版本(例如,2.2.2)请运行以下命令:

          cat import-command | awk '{split($0,a,"&&"); print a[3]}' | awk '{split($0,a,"|"); print a[1]}' | sed -e "s/^ echo //" | sed 's/\"//g' | base64 -d
        • 如果您的 Red Hat Advanced Cluster Management 版本 2.2 没有升级到更新的 z-stream 版本(例如,运行 2.2.0 版本),请运行以下命令:

          cat import-command | awk '{split($0,a,"&&"); print a[3]}' | awk '{split($0,a,"|"); print a[1]}' | sed -e "s/^ echo //" | base64 -d
      5. 在输出中找到并复制名为 bootstrap-hub-kubeconfig 的 secret。
      6. 将 secret 应用到受管集群上的 open-cluster-management-agent 命名空间。
      7. 使用安装的 Operator 中的示例创建 klusterlet 资源,clusterName 应该与导入过程中设置的集群名称相同。

        备注:managedcluster 资源成功注册到 hub 时,会安装两个 klusterlet operator。一个 klusterlet operator 位于 open-cluster-management 命名空间中,另一个位于 open-cluster-management-agent 命名空间中。多个 operator 并不会影响 klusterlet 的功能。

  11. 对于不在 Red OpenShift Dedicated 环境中的集群导入,完成以下步骤:

    1. 如有必要,为您的受管集群配置 kubectl 命令。

      请参阅支持的云以了解如何配置 kubectl 命令行界面。

    2. 要将 open-cluster-management-agen-addon 部署到受管集群,请运行您复制的命令和令牌。
  12. 选择 View clusterOverview 页面中查看集群概述。

集群已导入。您可以选择 Import another 来导入另一个。

8.1.3. 删除导入的集群

完成以下步骤以删除导入的集群以及在受管集群上创建的 open-cluster-management-agent-addon

  1. Clusters 页面的表中查找您导入的集群。
  2. Actions > Detach cluster 从管理中删除集群。

备注:如果您试图分离名为 local-cluster 的 hub 集群,请注意 disableHubSelfManagement 的默认设置为 false。此设置会导致 hub 集群在分离时会重新导入自己并管理自己,并协调 MultiClusterHub 控制器。hub 集群可能需要几小时时间来完成分离过程并重新导入。如果要在等待进程完成后重新导入 hub 集群,您可以输入以下命令来重启 multiclusterhub-operator pod 并更快地重新导入:

oc delete po -n open-cluster-management `oc get pod -n open-cluster-management | grep multiclusterhub-operator| cut -d' ' -f1`

您可以通过将 disableHubSelfManagement 值改为 true 来更改 hub 集群的值,如在线安装所述。

8.2. 使用 CLI 导入受管集群

安装 Red Hat Advanced Cluster Management for Kubernetes 后,就可以导入集群来进行管理。您可以从控制台和 CLI 导入。按照以下步骤从 CLI 导入。

重要:hub 集群无法管理不同的 hub 集群。hub 集群被设置为自动导入并管理自己。您不必手动导入 hub 集群来自己管理。

但是,如果您删除 hub 集群并尝试再次导入它,则需要添加 local-cluster:true 标签。

8.2.1. 先决条件

  • 您需要一个已部署的 Red Hat Advanced Cluster Management for Kubernetes hub 集群。如果要导入裸机集群,则必须在 Red Hat OpenShift Container Platform 版本 4.5 或更高版本上安装了 hub 集群。
  • 您需要一个要管理的单独集群,以及互联网连接。
  • 您需要 Red Hat OpenShift Container Platform CLI 版本 4.5 或更高版本来运行 oc 命令。如需有关安装和配置 Red Hat OpenShift CLI oc 的信息,请参阅 OpenShift CLI 入门
  • 您需要安装 Kubernetes CLI kubectl。要安装 kubectl,请参阅 Kubernetes 文档安装和设置 kubectl

    备注:从控制台下载 CLI 工具的安装文件。

8.2.2. 支持的构架

  • Linux (x86_64, s390x)
  • macOS

8.2.3. 准备导入

  1. 登录到您的 hub 集群。运行以下命令:

    oc login
  2. 在 hub 集群上运行以下命令来创建命名空间。备注:<cluster_name> 中定义的集群名称也用作 .yaml 文件和命令中的集群命名空间:

    oc new-project ${CLUSTER_NAME}
    oc label namespace ${CLUSTER_NAME} cluster.open-cluster-management.io/managedCluster=${CLUSTER_NAME}
  3. 使用以下 YAML 示例编辑示例 ManagedCluster 集群:

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      name: <cluster_name>
    spec:
      hubAcceptsClient: true
  4. 将文件保存为 managed-cluster.yaml
  5. 使用以下命令应用 YAML 文件:

    oc apply -f managed-cluster.yaml
  6. 创建 klusterlet 插件配置文件。输入以下示例 YAML:

    apiVersion: agent.open-cluster-management.io/v1
    kind: KlusterletAddonConfig
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterName: <cluster_name>
      clusterNamespace: <cluster_name>
      applicationManager:
        enabled: true
      certPolicyController:
        enabled: true
      clusterLabels:
        cloud: auto-detect
        vendor: auto-detect
      iamPolicyController:
        enabled: true
      policyController:
        enabled: true
      searchCollector:
        enabled: true
      version: 2.2.0
  7. 将文件保存为 klusterlet-addon-config.yaml
  8. 应用 YAML。运行以下命令:

    oc apply -f klusterlet-addon-config.yaml

    备注:如果您导入 Red Hat OpenShift Dedicated 集群,且没有添加 vendor=OpenShiftDedicated 标签指定厂商,或者添加了 vendor=auto-detect 标签,则 managed-by=platform 标签会自动添加到集群中。您可以使用此添加标签将集群标识为一个 Red Hat OpenShift Dedicated 集群,并作为一个组来获取 Red Hat OpenShift Dedicated 集群。

ManagedCluster-Import-Controller 将生成一个名为 ${CLUSTER_NAME}-import 的 secret。${CLUSTER_NAME}-import secret 包括 import.yaml,用户会把它应用到一个受管集群来安装 klusterlet.

8.2.4. 导入 klusterlet

重要:导入命令中包含复制到每个导入集群的 pull secret 信息。具有访问导入集群权限的所有用户都可以查看 pull secret 信息。

  1. 获取由受管集群导入控制器生成的 klusterlet-crd.yaml

    运行以下命令:

    oc get secret ${CLUSTER_NAME}-import -n ${CLUSTER_NAME} -o jsonpath={.data.crds\\.yaml} | base64 --decode > klusterlet-crd.yaml
  2. 获取由受管集群控制器生成的 import.yaml。运行以下命令:

    oc get secret ${CLUSTER_NAME}-import -n ${CLUSTER_NAME} -o jsonpath={.data.import\\.yaml} | base64 --decode > import.yaml
  3. 登录到目标受管集群。
  4. 应用在第 1 步中生成的 klusterlet-crd.yaml。运行以下命令:

    kubectl apply -f klusterlet-crd.yaml
  5. 应用在第 2 步中生成的 import.yaml 文件。运行以下命令:

    kubectl apply -f import.yaml
  6. 验证目标受管集群上的 Pod 状态。运行以下命令:

    kubectl get pod -n open-cluster-management-agent
  7. 验证您的导入集群的 JOINEDAVAILABLE 状态。在 hub 集群中运行以下命令:

    kubectl get managedcluster ${CLUSTER_NAME}
  8. 在受管集群的状态为 AVAILABLE 后,会安装附加组件。验证目标受管集群上的附件组件的 Pod 状态。运行以下命令:

    kubectl get pod -n open-cluster-management-agent-addon

8.3. 修改集群的 klusterlet 附加设置

您可以使用 hub 集群修改 klusterlet 附加组件的设置。

klusterlet addon 控制器根据 klusterletaddonconfigs.agent.open-cluster-management.io Kubernetes 资源中的设置管理启用和禁用的功能。

以下设置可以在 klusterletaddonconfigs.agent.open-cluster-management.io Kubernetes 资源中更新:

设置名称

applicationmanager

truefalse

policyController

truefalse

searchCollector

truefalse

certPolicyController

truefalse

iamPolicyController

truefalse

8.3.1. 使用 hub 集群中的控制台进行修改

您可以使用 hub 集群修改 klusterletaddonconfigs.agent.open-cluster-management.io 资源设置。完成以下步骤以更改设置:

  1. 向 hub 集群的 Red Hat Advanced Cluster Management for Kubernetes 控制台进行身份验证。
  2. 在 hub 集群控制台的主菜单中选择 Search
  3. 在搜索参数中输入以下值:kind:klusterletaddonconfigs
  4. 选择您要更新的端点资源。
  5. 找到 spec 部分并选择 Edit 以编辑内容。
  6. 修改设置。
  7. 选择 Save 以应用您的更改。

8.3.2. 使用 hub 集群中的命令行进行修改

您必须有权访问 <cluster-name> 命名空间才能使用 hub 集群修改设置。完成以下步骤:

  1. 在 hub 集群中进行身份验证。
  2. 输入以下命令以编辑资源:

    kubectl edit klusterletaddonconfigs.agent.open-cluster-management.io <cluster-name> -n <cluster-name>
  3. 找到 spec 部分。
  4. 根据需要修改您的设置。

第 9 章 配置特定的集群管理角色

安装 Red Hat Advanced Cluster Management for Kubernetes 时,默认配置在 Red Hat Advanced Cluster Management hub 集群上提供 cluster-admin 角色。此权限允许您在 hub 集群中创建、管理和导入受管集群。在某些情况下,您可能想要限制对由 hub 集群管理的某些受管集群的访问,而不是提供对 hub 集群上所有受管集群的访问。

您可以通过定义集群角色并将其应用到用户或组来限制对特定受管集群的访问。完成以下步骤以配置和应用角色:

  1. 通过创建包含以下内容的 YAML 文件来定义集群角色:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: <clusterrole-name>
    rules:
    - apiGroups:
      - cluster.open-cluster-management.io
      resources:
      - managedclusters
      resourceNames:
      - <managed-cluster-name>
      verbs:
      - get
      - list
      - watch
      - update
      - delete
      - deletecollection
      - patch
    - apiGroups:
      - cluster.open-cluster-management.io
      resources:
      - managedclusters
      verbs:
      - create
    - apiGroups:
      - ""
      resources:
      - namespaces
      resourceNames:
      - <managed-cluster-name>
      verbs:
      - create
      - get
      - list
      - watch
      - update
      - delete
      - deletecollection
      - patch
    - apiGroups:
      - register.open-cluster-management.io
      resources:
      - managedclusters/accept
      resourceNames:
      - <managed-cluster-name>
      verbs:
      - update

    clusterrole-name 替换为您要创建的集群角色的名称。

    managed-cluster-name 替换为您希望用户有权访问的受管集群的名称。

  2. 输入以下命令应用 clusterrole 定义:

    oc apply <filename>

    filename 替换为您在上一步中创建的 YAML 文件的名称。

  3. 输入以下命令将 clusterrole 绑定到指定用户或组:

    oc adm policy add-cluster-role-to-user <clusterrole-name> <username>

    clusterrole-name 替换为您在上一步中应用的集群角色的名称。使用您要将集群角色绑定的用户名替换 username

第 10 章 ManagedClusterSets

ManagedClusterSet 是一个受管集群的组。通过使用 ManagedClusterSet,您可以一起管理对组中所有受管集群的访问。您也可以创建一个 ManagedClusterSetBinding 资源来将 ManagedClusterSet 资源绑定到一个命名空间。

10.1. 创建 ManagedClusterSet

您可以在 ManagedClusterSet 中将受管集群分组在一起,以限制受管集群的用户访问权限。

需要的访问权限 :集群管理员

ManagedClusterSet 是一个集群范围的资源,因此您必须在创建 ManagedClusterSet 的集群中具有集群管理权限。受管集群不能包含在多个 ManagedClusterSet 中。完成以下步骤以创建一个 ManagedClusterSet:

  1. yaml 文件中添加 ManagedClusterSet 的以下定义:

    apiVersion: cluster.open-cluster-management.io/v1alpha1
    kind: ManagedClusterSet
    metadata:
      name: <clusterset1>

    clusterset1 替换为 ManagedClusterSet 的名称。

10.2. 将集群添加到 ManagedClusterSet

创建 ManagedClusterSet 后,您必须添加一个或多个受管集群。完成以下步骤以添加受管集群:

  1. 确保有一个 RBAC ClusterRole 条目,供您在 managedclustersets/join 的虚拟子资源上 创建。没有这个权限,就无法将受管集群分配给 ManagedClusterSet

    如果此条目不存在,请将其添加到您的 yaml 文件中。示例条目类似以下内容:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: clusterrole1
    rules:
      - apiGroups: ["cluster.open-cluster-management.io"]
        resources: ["managedclustersets/join"]
        resourceNames: ["clusterset1"]
        verbs: ["create"]

    clusterset1 替换为 ManagedClusterSet 的名称。

    备注:如果要将受管集群从一个 ManagedClusterSet 移到另一个,则必须在两个 ManagedClusterSet 中都有该权限。

  2. yaml 文件中查找受管集群的定义。在受管集群定义的这个部分添加与以下内容类似的标签:

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      name: cluster1
    spec:
      hubAcceptsClient: true

    在本例中,cluster1 是受管集群的名称。

  3. 添加一个标签,指定 ManagedClusterSet,格式为: cluster.open-cluster-management.io/clusterset: clusterset1

    您的代码类似以下示例:

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      name: cluster1
      labels:
        cluster.open-cluster-management.io/clusterset: clusterset1
    spec:
      hubAcceptsClient: true

    在本例中,cluster1 是添加到 clusterset1 ManagedClusterSet 的集群。

    备注:如果受管集群之前分配给了一个已删除的 ManagedClusterSet,受管集群可能会有一个 ManagedClusterSet 已被指定到不存在的集群集合。如果出现这种情况,请用新名称替换。

10.3. 从 ManagedClusterSet 中删除受管集群

您可能想要从 ManagedClusterSet 中删除受管集群 ,将其移到不同的 ManagedClusterSet 中,或从集合的管理设置中移除。

要从 ManagedClusterSet 中删除受管 集群,请完成以下步骤:

  1. 运行以下命令在 ManagedClusterSet 中显示受管集群 列表:

    kubectl get managedclusters -l cluster.open-cluster-management.io/clusterset=<clusterset1>

    clusterset1 替换为 ManagedClusterSet 的名称。

  2. 找到您要删除的集群条目。
  3. 从您要删除的集群的 yaml 条目中删除该标签。参阅以下标签代码示例:

    labels:
       cluster.open-cluster-management.io/clusterset: clusterset1

    备注:如果要将受管集群从一个 ManagedClusterSet 移到另一个,则必须在两个 ManagedClusterSet 上都有 RBAC 权限。

10.4. ManagedClusterSetBinding resource

创建一个 ManagedClusterSetBinding 资源,将 ManagedClusterSet 资源绑定到一个命名空间。在同一命名空间中创建的应用程序和策略只能访问绑定的 ManagedClusterSet 资源中包含的受管集群。

创建 ManagedClusterSetBinding 时, ManagedClusterSetBinding 的名称必须与要绑定的 ManagedClusterSet 的名称匹配。

您的 ManagedClusterSetBinding 资源可能类似以下信息:

apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: ManagedClusterSetBinding
metadata:
  namespace: project1
  name: clusterset1
spec:
  clusterSet: clusterset1

您必须在目标 ManagedClusterSet 上具有 bind 权限。查看以下 ClusterRole 资源示例,其中包含允许用户绑定到 clusterset1 的规则:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: clusterrole1
rules:
  - apiGroups: ["cluster.open-cluster-management.io"]
    resources: ["managedclustersets/bind"]
    resourceNames: ["clusterset1"]
    verbs: ["create"]

有关角色操作的更多信息,请参阅基于角色的访问控制

第 11 章 为受管集群创建 AnsibleJob

当集群由 Red Hat Advanced Cluster Management for Kubernetes 创建或导入由 Red Hat Advanced Cluster Management 管理时,您可以创建一个绑定到集群的 AnsibleJob

完成以下步骤以创建一个 Ansible 作业,并使用尚未由 Red Hat Advanced Cluster Management 管理的集群进行配置:

  1. 在应用程序功能支持的一个频道中为 Ansible 任务创建定义文件。只支持 Git 频道。

    使用 AnsibleJob 作为定义中的 kind 值。

    您的定义文件内容可能类似以下示例:

    apiVersion: apiVersion: tower.ansible.com/v1alpha1
    kind: AnsibleJob
    metadata:
      name: hive-cluster-gitrepo
    spec:
      tower_auth_secret: my-toweraccess
      job_template_name: my-tower-template-name
      extra_vars:
        variable1: value1
        variable2: value2

    通过将文件存储在 prehook 或 posthook 目录中,它会创建一个与放置规则匹配的集群名称列表。集群名称列表可作为 extra_vars 的值传递给 AnsibleJob kind 资源。当此值传递给 AnsibleJob 资源时,Ansible 作业可以决定新的集群名称并在自动化中使用它。

  2. 登录您的 Red Hat Advanced Cluster Management hub 集群。
  3. 通过 Red Hat Advanced Cluster Management 控制台,使用 Git 订阅创建一个应用程序,该订阅引用您刚刚创建的定义文件存储频道的频道。有关创建应用程序和订阅的更多信息,请参阅管理应用程序资源

    在创建订阅时,请指定一个标签,您可以在以后创建或导入的集群中添加该订阅以与集群连接。这可以是现有标签,如 vendor=OpenShift,也可以是您创建和定义的唯一可用标签。

    备注:如果您选择任何已在使用的标签,Ansible 作业会自动运行。建议您在应用程序中包含不属于 prehook 或 posthook 的资源。

    当检测到集群时使用与 AnsibleJob 标签匹配的标签时,默认放置规则运行作业。如果您希望自动化在由 hub 集群管理的所有正在运行的集群中运行,请将以下内容添加到放置规则中:

    clusterConditions:
      - type: ManagedClusterConditionAvailable
        status: "True"

    您可以将其粘贴到放置规则的 YAML 内容中,或者在 Red Hat Advanced Cluster Management 控制台的 Application create 页面中选择 Deploy to all online clusters and local cluster 集群的选项。

  4. 按照创建集群将目标受管集群分别导入到 hub 集群中的内容创建或导入集群。

    在创建或导入集群时,使用您在创建订阅时使用的相同标签,AnsibleJob 会自动配置为在集群中运行。

Red Hat Advanced Cluster Management 会自动将集群名称注入 AnsibleJob.extra_vars.target_clusters 路径。您可以动态将集群名称注入到定义中。完成以下步骤,创建一个 AnsibleJob,并使用已经由 Red Hat Advanced Cluster Management 管理的集群进行配置:

  1. 在 Git Channel 的 prehook 或 posthook 目录中为 AnsibleJob 创建定义文件。

    使用 AnsibleJob 作为定义中的 kind 值。

    您的定义文件内容可能类似以下示例:

    apiVersion: tower.ansible.com/v1alpha1
    kind: AnsibleJob
    metadata:
      name: hive-cluster-gitrepo
    spec:
      tower_auth_secret: my-toweraccess
      job_template_name: my-tower-template-name
      extra_vars:
        variable1: value1
        variable2: value2

    使用访问您的 Ansible Tower 所需的验证 secret 替换 my-toweraccess。将 my-tower-template-name 替换为 Ansible Tower 中的模板名称。

每次删除或添加由 Ansible 作业控制的集群时,AnsibleJob 会自动运行和更新 extra_vars.target_clusters 变量。此更新提供了通过特定自动化指定集群名称,或将自动化应用到一组集群的功能。

第 12 章 ClusterClaims

ClusterClaim 是受管集群中的一个集群范围的自定义资源定义(CRD)。ClusterClaim 代表受管集群声明的一个信息片段。以下示例显示了 YAML 文件中标识的声明:

apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: ClusterClaim
metadata:
  name: id.openshift.io
spec:
  value: 95f91f25-d7a2-4fc3-9237-2ef633d8451c

下表显示了 Red Hat Advanced Cluster Management for Kubernetes 管理的集群中可能会定义的 ClusterClaims:

声明名称保留可变描述

id.k8s.io

true

false

在上游社区定义的 ClusterID

kubeversion.open-cluster-management.io

true

true

Kubernetes 版本

platform.open-cluster-management.io

true

false

运行受管集群的平台,如 AWS、GCE 和 Equinix Metal

product.open-cluster-management.io

true

false

产品名称,如 OpenShift、Anthos、EKS 和 GKE

id.openshift.io

false

false

OpenShift Container Platform 外部 ID,它仅适用于 OpenShift Container Platform 集群

consoleurl.openshift.io

false

true

管理控制台的 URL,仅适用于 OpenShift Container Platform 集群

version.openshift.io

false

true

OpenShift Container Platform 版本,它仅适用于 OpenShift Container Platform 集群

如果在受管集群中删除或更新之前的声明,它们会自动恢复或回滚到上一版本。

在受管集群加入 hub 后,在受管集群上创建的 ClusterClaims 与 hub 上的 ManagedCluster 资源的状态同步。带有 ClusterClaims 的受管集群可能类似以下示例:

apiVersion: cluster.open-cluster-management.io/v1
kind: ManagedCluster
metadata:
  labels:
    cloud: Amazon
    clusterID: 95f91f25-d7a2-4fc3-9237-2ef633d8451c
    installer.name: multiclusterhub
    installer.namespace: open-cluster-management
    name: cluster1
    vendor: OpenShift
  name: cluster1
spec:
  hubAcceptsClient: true
  leaseDurationSeconds: 60
status:
  allocatable:
    cpu: '15'
    memory: 65257Mi
  capacity:
    cpu: '18'
    memory: 72001Mi
  clusterClaims:
    - name: id.k8s.io
      value: cluster1
    - name: kubeversion.open-cluster-management.io
      value: v1.18.3+6c42de8
    - name: platform.open-cluster-management.io
      value: AWS
    - name: product.open-cluster-management.io
      value: OpenShift
    - name: id.openshift.io
      value: 95f91f25-d7a2-4fc3-9237-2ef633d8451c
    - name: consoleurl.openshift.io
      value: 'https://console-openshift-console.apps.xxxx.dev04.red-chesterfield.com'
    - name: version.openshift.io
      value: '4.5'
  conditions:
    - lastTransitionTime: '2020-10-26T07:08:49Z'
      message: Accepted by hub cluster admin
      reason: HubClusterAdminAccepted
      status: 'True'
      type: HubAcceptedManagedCluster
    - lastTransitionTime: '2020-10-26T07:09:18Z'
      message: Managed cluster joined
      reason: ManagedClusterJoined
      status: 'True'
      type: ManagedClusterJoined
    - lastTransitionTime: '2020-10-30T07:20:20Z'
      message: Managed cluster is available
      reason: ManagedClusterAvailable
      status: 'True'
      type: ManagedClusterConditionAvailable
  version:
    kubernetes: v1.18.3+6c42de8

12.1. 列出现有 ClusterClaims

您可以使用 kubectl 命令列出应用到受管集群的 ClusterClaims。当您要将 ClusterClaim 与错误消息进行比较时,这很有用。

备注:请确定您对资源 clusterclaims.cluster.open-cluster-management.iolist 权限。

运行以下命令列出受管集群中的所有现有 ClusterClaims:

kubectl get clusterclaims.cluster.open-cluster-management.io

12.2. 创建自定义 ClusterClaims

您可以使用受管集群上的自定义名称创建 ClusterClaims,这样可更轻松地识别它们。自定义 ClusterClaims 会与 hub 集群上的 ManagedCluster 资源进行同步。以下内容显示了自定义 ClusterClaim 的定义示例:

apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: ClusterClaim
metadata:
  name: <custom_claim_name>
spec:
  value: <custom_claim_value>

字段 spec.value 的最大长度为 1024。创建 ClusterClaim 需要资源 clusterclaims.cluster.open-cluster-management.iocreate 权限。

第 13 章 Submariner

submariner-addon 组件是一个技术预览功能。

Submariner 是一个开源工具,可与 Red Hat Advanced Cluster Management for Kubernetes 一起使用,用于在您的环境中(内部环境或云)提供两个或多个 Kubernetes 集群之间的直接联网。有关 Submariner 的更多信息,请参阅 Submariner

您可以在以下环境中托管的 OpenShift Container Platform 集群上启用 Submariner:

  • Amazon Web Services
  • Google Cloud Platform
  • Microsoft Azure
  • IBM Cloud
  • VMware vSphere
  • 裸机
  • Red Hat OpenShift Dedicated

Red Hat Advanced Cluster Management for Kubernetes 提供了一个 Submariner 组件,您可以使用 hub 集群在环境中部署。

13.1. 先决条件

在使用 Submariner 前,请确保已满足以下先决条件:

  • 在 Red Hat OpenShift Container Platform 版本 4.5 或更高版本上运行的 Red Hat Advanced Cluster Management hub 集群,Kubernetes 版本 1.17 或更高版本。
  • 一个用于访问 hub 集群的,具有 cluster administrator 权限的凭证。
  • 在 OpenShift Container Platform 版本 4.4 或更高版本上运行的两个或者两个以上 OpenShift Container Platform 受管集群,Kubernetes 版本 1.17 或更高版本,由 Red Hat Advanced Cluster Management hub 集群管理。
  • 不重叠的集群间的 Pod 和 Service Classless Inter-Domain Routing(CIDR)。
  • 在网关节点之间配置了 IP 连接。连接两个集群时,至少有一个集群必须具有分配给网关节点的可公开路由 IP 地址。
  • 各个受管集群中所有节点的防火墙配置必须同时允许 4800/UDP。

    备注:当您的集群部署在 Amazon Web Services 环境中时,这会自动配置,但必须为其他环境中的集群以及保护私有云的防火墙(如裸机和 VMware vSphere)手动配置。

  • 网关节点上的防火墙配置允许入口 8080/TCP,以便集群中的其他节点可以访问它。
  • 防火墙配置为 UDP/4500、UDP/500 以及网关节点上 IPSec 流量的其他端口打开。

有关先决条件的详情,请参阅 Marmariner 先决条件

13.2. 准备主机来部署 Submariner

在使用 Red Hat Advanced Cluster Management for Kubernetes 部署 Submariner 前,您必须在托管环境中为连接准备集群。所需条件因托管环境而异,因此请遵循托管环境的说明。

13.2.1. 准备 Amazon Web Services 以部署 Submariner

您可以配置托管在 Amazon Web Services 上的 OpenShift Container Platform 集群,以与 Submariner 部署集成。选择这些选项之一来准备连接:

  • 方法 1

    您可以使用 SubmarinerConfig API 来构建集群环境。使用这个方法,submariner-addon 配置环境,因此您可以在 SubmarinerConfig 定义中使用您的配置和云供应商凭证。

    备注:这个方法只在集群位于 Amazon Web Services 上时被支持,在其他环境中不支持。

    创建一个包含以下内容的 YAML 文件:

    apiVersion: v1
    kind: Secret
    metadata:
        name: <cloud-provider-credential-secret-name>
        namespace: <managed-cluster-namespace>
    type: Opaque
    data:
        aws_access_key_id: <aws-access-key-id>
        aws_secret_access_key: <aws-secret-access-key>

    name 格式与您使用 Red Hat Advanced Cluster Management 置备集群的凭证 secret 名称相同。

    如果您已经手动配置了 Submariner 集群环境,在 SubmarinerConfig 中包括配置。在本例中,IPSecIKEPort 设置为 501IPSecNATTPort 设置为 4501

    apiVersion: submarineraddon.open-cluster-management.io/v1alpha1
    kind: SubmarinerConfig
    metadata:
        name: <config-name>
        namespace: <managed-cluster-namespace>
    spec:
        IPSecIKEPort: 501
        IPSecNATTPort: 4501
        ...
  • 方法 2

    您可以使用 Submariner 网站提供的脚本文件 prep_for_subm.sh 更新 OpenShift Container Platform 安装程序置备的 Amazon Web Services 基础架构用于 Submariner 部署。如需该脚本以及如何运行的信息,请参阅为 Submariner 准备 AWS 集群

13.2.2. 准备 Google Cloud Platform 以部署 Submariner

要准备 Google Cloud Platform 上的集群来部署 Submariner 组件,请完成以下步骤:

  1. 在 Google Cloud Platform 上创建入站和出站防火墙规则以打开 IPsec IKE(默认为 500/UDP)和 NAT 遍历端口(默认为 4500/UDP),以启用 Submariner 通讯:

    $ gcloud compute firewall-rules create <name> --network=<network-name> --allow=udp:<ipsec-port> --direction=IN
    $ gcloud compute firewall-rules create <rule-name> --network=<network-name> --allow=udp:<ipsec-port>  --direction=OUT

    rule-name 替换为您的规则名称。

    network-name 替换为您的 Google Cloud Platform 集群网络名称。

    使用您的 IPsec 端口替换 ipsec-port

  2. 在 Google Cloud Platform 上创建入站和出站防火墙规则,打开 4800/UDP 端口,将 worker 和 master 节点的 Pod 流量封装到 Submariner Gateway 节点:

    $ gcloud compute firewall-rules create <name> --network=<network-name> --allow=udp:4800 --direction=IN
    $ gcloud compute firewall-rules create <name> --network=<network-name> --allow=udp:4800 --direction=OUT

    使用您的规则名称替换 name

    network-name 替换为您的 Google Cloud Platform 集群网络名称。

  3. 在 Google Cloud Platform 上创建入站和出站防火墙规则,打开 8080/TCP 端口,从 Submariner Gateway 节点导出指标服务:

    $ gcloud compute firewall-rules create <name> --network=<network-name> --allow=tcp:8080 --direction=IN
    $ gcloud compute firewall-rules create <name> --network=<network-name> --allow=tcp:8080 --direction=OUT

    使用您的规则名称替换 name

    network-name 替换为您的 Google Cloud Platform 集群网络名称。

13.2.3. 准备 Microsoft Azure 以部署 Submariner

要准备 Microsoft Azure 上的集群来部署 Submariner 组件,请完成以下步骤:

  1. 在 Microsoft Azure 上创建入站和出站防火墙规则以打开 IP security IKE(默认为 500/UDP)和 NAT 遍历端口(默认为 4500/UDP),以启用 Submariner 通讯:

    # create inbound nat rule
    $ az network lb inbound-nat-rule create --lb-name <lb-name> \
    --resource-group <res-group> \
    --name <name> \
    --protocol Udp --frontend-port <ipsec-port> \
    --backend-port <ipsec-port> \
    --frontend-ip-name <frontend-ip-name>
    
    # add your vm network interface to the created inbound nat rule
    $ az network nic ip-config inbound-nat-rule add \
    --lb-name <lb-name> --resource-group <res-group> \
    --inbound-nat-rule <nat-name> \
    --nic-name <nic-name> --ip-config-name <pipConfig>

    lb-name 替换为您的负载均衡器的名称。

    res-group 替换为您的资源组的名称。

    nat-name 替换为您的负载均衡 NAT 规则的名称。

    使用您的 IPsec 端口替换 ipsec-port

    pipConfig 替换为集群前端 IP 配置名称。

    nic-name 替换为您的网卡(NIC)。

  2. 创建一个负载均衡入站 NAT 规则以转发 Submariner 网关指标服务请求:

    # create inbound nat rule
    $ az network lb inbound-nat-rule create --lb-name <lb-name> \
    --resource-group <res-group> \
    --name <name> \
    --protocol Tcp --frontend-port 8080 --backend-port 8080 \
    --frontend-ip-name <frontend-ip-name>
    
    # add your vm network interface to the created inbound nat rule
    $ az network nic ip-config inbound-nat-rule add \
    --lb-name <lb-name> --resource-group <res-group> \
    --inbound-nat-rule <nat-name> \
    --nic-name <nic-name> --ip-config-name <pipConfig>

    lb-name 替换为您的负载均衡器的名称。

    res-group 替换为您的资源组的名称。

    nat-name 替换为您的负载均衡 NAT 规则的名称。

    pipConfig 替换为集群前端 IP 配置名称。

    nic-name 替换为您的网卡(NIC)。

  3. 在 Azure 上创建网络安全组 {NSG)安全规则,为 Submariner 打开 IPsec IKE(默认为 500/UDP)和 NAT 遍历端口(默认为 4500/UDP):

    $ az network nsg rule create --resource-group <res-group> \
    --nsg-name <nsg-name> --priority <priority> \
    --name <name> --direction Inbound --access Allow \
    --protocol Udp --destination-port-ranges <ipsec-port>
    
    $ az network nsg rule create --resource-group <res-group> \
    --nsg-name <nsg-name> --priority <priority> \
    --name <name> --direction Outbound --access Allow \
    --protocol Udp --destination-port-ranges <ipsec-port>

    res-group 替换为您的资源组的名称。

    nsg-name 替换为您的 NSG 名称。

    priority 替换为您的规则优先级。

    使用您的规则名称替换 name

    使用您的 IPsec 端口替换 ipsec-port

  4. 创建 NSG 规则以打开 4800/UDP 端口,将来自 worker 和 master 节点的 pod 流量封装到 Submariner 网关节点:

    $ az network nsg rule create --resource-group <res-group> \
    --nsg-name <nsg-name> --priority <priority> \
    --name <name> --direction Inbound --access Allow \
    --protocol Udp --destination-port-ranges 4800 \
    
    $ az network nsg rule create --resource-group <res-group> \
    --nsg-name <nsg-name> --priority <priority> \
    --name <name> --direction Outbound --access Allow \
    --protocol Udp --destination-port-ranges 4800

    res-group 替换为您的资源组的名称。

    nsg-name 替换为您的 NSG 名称。

    priority 替换为您的规则优先级。

    使用您的规则名称替换 name

  5. 创建 NSG 规则以打开 8080/TCP 端口,从 Submariner Gateway 节点导出指标服务:

    $ az network nsg rule create --resource-group <res-group> \
    --nsg-name <nsg-name> --priority <priority> \
    --name <name> --direction Inbound --access Allow \
    --protocol Tcp --destination-port-ranges 8080 \
    
    $ az network nsg rule create --resource-group <res-group> \
    --nsg-name <nsg-name> --priority <priority> \
    --name <name> --direction Outbound --access Allow \
    --protocol Udp --destination-port-ranges 8080

    res-group 替换为您的资源组的名称。

    nsg-name 替换为您的 NSG 名称。

    priority 替换为您的规则优先级。

    使用您的规则名称替换 name

13.2.4. 准备 IBM Cloud 来部署 Submariner

IBM Cloud 上有两种 Red Hat OpenShift Kubernetes Service(ROKS):经典(classic)集群,以及在虚拟私有云(VPC)中的第二代计算基础架构。因为无法为经典集群配置 IPSec 端口,所以 Submariner无法在典型的 ROKS 集群上运行。

要将 VPC 上的 ROKS 集群配置为使用 Submariner,请完成以下链接中的步骤:

  1. 在创建集群前,为 pod 和服务指定子网,这样可避免与其他集群重叠的 CIDR。如果使用现有集群,请确保集群之间没有重叠的 pod 和服务 CIDR。请参阅 VPC 子网
  2. 将公共网关附加到集群中使用的子网。详情请参阅公共网关
  3. 通过完成安全组中的步骤,为集群的默认安全组创建入站规则。确保防火墙允许 UDP/4500 和 UDP/500 端口上的入站和出站流量,并为所有其他节点允许入站和出站 UDP/4800。
  4. 将集群中带有公共网关的节点标记为 submariner.io/gateway=true
  5. 参阅 Calico 来配置 Calico CNI,在集群中创建 IPPools。

13.2.5. 准备 Red Hat OpenShift Dedicated 来部署 Submariner

Red Hat OpenShift Dedicated 支持由 AWS 和 Google Cloud Platform 置备的集群。

13.2.5.1. 准备 Red Hat OpenShift Dedicated 在 AWS 上部署 Submariner

要在 Red Hat OpenShift Dedicated 上配置 AWS 集群,请完成以下步骤:

  1. 向 Red Hat OpenShift Hosted SRE 支持团队提交支持问题单,以便获取 Red Hat OpenShift Dedicated 集群的 cluster-admin 组访问权限。dedicated-admin 的默认访问权限并没有包括创建 MachineSet 所需的权限。
  2. 创建组后,在完成 Red Hat OpenShift Dedicated 文档中的为用户分配 cluster-admin 角色的步骤时创建的 cluster-admin 组中添加用户名。
  3. 完成准备 Amazon Web Services 以部署 Submariner 中列出的先决条件。
  4. 配置用户 osdCcsAdmin 的凭证,以便将该用户用作服务帐户。

13.2.5.2. 准备 Red Hat OpenShift Dedicated 在 Google Cloud Platform 上部署 Submariner

要在 Red Hat OpenShift Dedicated 上配置 Google Cloud Platform 集群,请完成以下步骤:

  1. 完成 准备 Google Cloud Platform 以部署 Submariner 的先决条件。
  2. 配置名为 osd-ccs-admin 的服务帐户,可用于管理部署。

13.2.6. 准备在 VMware vSphere 或裸机上部署 Submariner

要准备 VMware vSphere 和裸机集群来部署 Submariner,请完成以下步骤:

  1. 配置一个公开可路由的 IP 地址,把它分配给集群中的最少一个网关节点。
  2. 确保 IP 安全性的端口是打开的。默认端口为 4500/UDP 和 500/UDP。如果防火墙阻止了默认端口,请配置一组可用的自定义端口,比如 4501/UDP 和 501/UDP。

13.3. 部署 Submariner

submariner-addon 组件是一个技术预览功能。

完成以下步骤以部署 Submariner:

  1. 使用集群管理员权限登录到 hub 集群。
  2. 请确定您已经完成了相关的准备。详情请参阅 Submariner 的要求。
  3. 使用 ManagedClusterSets 中的说明在 hub 集群上创建一个 ManagedClusterSetsubmariner-addon 会创建一个名为 submariner-clusterset-<clusterset-name\"-broker 的命名空间,并将 Submariner Broker 部署到其中。使用 ManagedClusterSet 的名称替换命名空间名称中的 <clusterset-name。ManagedClusterSet 的条目应类似以下内容:

    apiVersion: cluster.open-cluster-management.io/v1alpha1
    kind: ManagedClusterSet
    metadata:
      name: <ManagedClusterSet-name>

    ManagedClusterSet-name 替换为您要创建的 ManagedClusterSet 的名称。

  4. 输入以下命令启用 Submariner 以提供在受管集群间的通信:

    oc label managedclusters <managedcluster-name> "cluster.open-cluster-management.io/submariner-agent=true" --overwrite

    managedcluster-name 替换为您要使用 Submariner 的受管集群的名称。

  5. 输入以下命令将受管集群添加到 ManagedClusterSet 中:

    oc label managedclusters <managedcluster-name> "cluster.open-cluster-management.io/clusterset=<ManagedClusterSet-name>" --overwrite

    managedcluster-name 替换为您要添加到 ManagedClusterSet 的受管集群的名称。将 ManagedClusterSet-name 替换为您要在其中添加受管集群的 ManagedClusterSet 的名称。

  6. 对您要添加到 ManagedClusterSet 的所有受管集群重复这些步骤。

13.3.1. 将 Submariner 部署到 AWS OpenShift Container Platform 集群

Red Hat Advanced Cluster Management for Kubernetes 版本 2.2 支持自动部署 Submariner,以管理部署在 Amazon Web Services 上的 OpenShift Container Platform 集群。

完成以下步骤以部署 Submariner:

  1. 使用集群管理员权限登录到 hub 集群。

    • 对于使用 Red Hat Advanced Cluster Management 创建的集群,请继续第 2 步。
    • 对于导入到 Red Hat Advanced Cluster Management 的集群,请跳至第 3 步。
  2. 对于由 Red Hat Advanced Cluster Management for Kubernetes 创建的 AWS 集群,请创建一个名为 submarinerconfig.yaml 的文件,其中包含以下 SubmarinerConfig 内容:

    apiVersion: submarineraddon.open-cluster-management.io/v1alpha1
    kind: SubmarinerConfig
    metadata:
      name: submariner
      namespace: <your-cluster-namespace>
    spec:
      credentialsSecret:
        name: <your-cluster-name>-aws-creds
      subscriptionConfig:
        channel: alpha
        startingCSV: submariner.v0.8.1
    • your-cluster-namespace 替换为集群的命名空间。
    • your-cluster-name 替换为集群的名称。your-cluster-namespace aws-cloud-credentials 的文件保存在 Hive 集群命名空间中。

      跳至第 4 步。

  3. 对于由 OpenShift Container Platform 创建但导入到 Red Hat Advanced Cluster Management 的 AWS 集群,创建 aws-cloud-credentials

    1. 将以下 secret 应用到受管集群命名空间。

      apiVersion: v1
      kind: Secret
      metadata:
        name: aws-cloud-credentials
        namespace: <your-cluster-namespace>
      type: Opaque
      data:
        aws_access_key_id: <your-aws_access_key_id>
        aws_secret_access_key: <your-aws_secret_access_key>
    2. 使用以下 SubmarinerConfig 内容,创建一个名为 submarinerconfig.yaml 的文件:

      apiVersion: submarineraddon.open-cluster-management.io/v1alpha1
      kind: SubmarinerConfig
      metadata:
        name: subconfig
        namespace: <your-cluster-namespace>
      spec:
        credentialsSecret:
          name: <aws-cloud-credentials>
        subscriptionConfig:
          channel: alpha
          startingCSV: submariner.v0.8.1

      使用您在上一步中创建的 AWS 凭证替换 aws-cloud-credential

  4. 输入以下命令将 SubmarinerConfig 资源应用到 hub 集群上的受管集群命名空间:

    oc apply -f submarinerconfig.yaml
  5. 在 hub 集群中创建一个 ManagedClusterSet。

    apiVersion: cluster.open-cluster-management.io/v1alpha1
    kind: ManagedClusterSet
    metadata:
      name: my-clusterset
  6. 输入以下命令将受管集群添加到 ManagedClusterSet 中:

    oc label managedclusters <managedcluster-name> "cluster.open-cluster-management.io/clusterset=<ManagedClusterSet-name>" --overwrite
  7. 运行以下命令来允许 Red Hat Advanced Cluster Management 自动部署 Submariner:app-name:

    oc label managedclusters <managedcluster-name> "cluster.open-cluster-management.io/submariner-agent=true" --overwrite

13.4. 为 Submariner 启用服务发现

submariner-addon 组件是一个技术预览功能。

在 Submariner 部署到与受管集群相同的环境中后,会将路由配置为 ManagedClusterSet 中的 pod 和服务间的安全 IP 路由。如果要使集群的服务可见,并可以被 ManagedClusterSet 中的其他集群发现,您需要创建一个 ServiceExport 对象。当使用 ServiceExport 对象导出一个服务后,您可以使用以下方式访问该服务: <service>.<namespace>.svc.clusterset.local。如果多个集群导出具有相同名称的服务,并且来自同一命名空间中,则其他集群会把这个服务看作为一个单一的逻辑服务。

在本例在,在 default 命名空间中使用 nginx 服务,但您可以发现任何 Kubernetes ClusterIP 服务或无头服务:

  1. 使用以下命令,在 ManagedClusterSet 中的受管集群中应用 nginx 服务实例:

    oc -n default create deployment nginx --image=nginxinc/nginx-unprivileged:stable-alpine
    oc -n default expose deployment nginx --port=8080
  2. 通过创建一个 ServiceExport 条目来导出服务,该条目类似于 YAML 文件中的以下内容:

    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceExport
    metadata:
      name: <service-name>
      namespace: <service-namespace>

    使用您要导出的服务的名称替换 service-name。在本例中是 nginx。将 service-namespace 替换为服务所在命名空间的名称。在本例中,是 default

  3. 在不同的受管集群中运行以下命令,确认它可以访问 nginx 服务:

    oc -n default run --generator=run-pod/v1 tmp-shell --rm -i --tty --image quay.io/submariner/nettest -- /bin/bash curl nginx.default.svc.clusterset.local:8080

nginx 服务发现现在已为 Submariner 配置。

第 14 章 升级集群

创建要通过 Red Hat Advanced Cluster Management for Kubernetes 管理的 Red Hat OpenShift Container Platform 集群后,您可以使用 Red Hat Advanced Cluster Management for Kubernetes 控制台将这些集群升级到受管集群使用的版本频道中可用的最新次版本。

在连接的环境中,会在 Red Hat Advanced Cluster Management 控制台中为需要升级的每个集群自动识别更新。

在断开连接的环境中升级集群的过程需要一些额外的步骤来配置和镜像所需的发行镜像。它使用 Red Hat OpenShift Update Service 的 operator 来识别升级。如果您位于断开连接的环境中,请参阅 升级断开连接的集群以了解所需步骤。

备注:要升级到主要版本,您必须验证您是否满足升级到该版本的所有先决条件。在可以使用控制台升级集群前,您必须更新受管集群上的版本频道。更新受管集群上的版本频道后,Red Hat Advanced Cluster Management for Kubernetes 控制台会显示可用于升级的最新版本。

重要:您无法使用 Red Hat Advanced Cluster Management for Kubernetes 控制台在 Red Hat OpenShift Dedicated 上升级 Red Hat OpenShift Kubernetes Service 受管集群或 OpenShift Container Platform 受管集群。

此升级方法只适用于处于 Ready 状态的 OpenShift Container Platform 受管集群。

要在连接的环境中升级集群,请完成以下步骤:

  1. 从导航菜单中导航到 Automate infrastructure > Clusters。如果有可用的升级,会在 Distribution version 列中显示。
  2. 选择您要升级的集群。请记住:集群必须处于 Ready 状态,且必须是 Red Hat OpenShift Container Platform 集群才能使用控制台升级。
  3. 选择 Upgrade
  4. 选择每个集群的新版本。
  5. 选择 Upgrade

如果集群升级失败,Operator 通常会重试升级,停止并报告故障组件的状态。在某些情况下,升级过程会一直通过尝试完成此过程进行循环。不支持在失败的升级后将集群还原到以前的版本。如果您的集群升级失败,请联系红帽支持以寻求帮助。

14.1. 升级断开连接的集群

您可以将 Red Hat OpenShift Update Service 与 Red Hat Advanced Cluster Management for Kubernetes 搭配使用,以便在断开连接的环境中升级您的集群。

在某些情况下,安全性考虑会阻止集群直接连接到互联网。这使得您很难知道什么时候可以使用升级,以及如何处理这些升级。配置 OpenShift Update Service 可能会有所帮助。

OpenShift Update Service 是一个独立的操作对象,它监控受管集群在断开连接的环境中的可用版本,并使其可用于在断开连接的环境中升级集群。配置 OpenShift Update Service 后,它可以执行以下操作:

  1. 监测何时有适用于断开连接的集群的升级。
  2. 使用图形数据文件识别哪些更新需要被镜像到您的本地站点进行升级。
  3. 使用 Red Hat Advanced Cluster Management 控制台通知您的集群可以使用升级。

14.1.1. 先决条件

您必须满足以下先决条件,才能使用 OpenShift Update Service 升级断开连接的集群:

  • 已部署了一个在 Red Hat OpenShift Container Platform 版本 4.5 或更高版本上运行的 Red Hat Advanced Cluster Management hub 集群,并配置了受限 OLM。如需了解如何配置受限 OLM 的详细信息,请参阅在受限网络中使用 Operator Lifecycle Manager

    提示:配置受限 OLM 时,记录目录源镜像。

  • 由 Red Hat Advanced Cluster Management hub 集群管理的 OpenShift Container Platform 集群
  • 访问您可以镜像集群镜像的本地存储库的凭证。如需了解有关如何创建此存储库的更多信息,请参阅在受限网络中创建镜像 registry

    备注:您升级的集群当前版本的镜像必须始终作为镜像之一提供。如果升级失败,集群会在试图升级时恢复到集群的版本。

14.1.2. 准备断开连接的镜像 registry

您必须镜像要升级到的镜像,以及您要从本地镜像 registry 升级到的当前镜像。完成以下步骤以镜像镜像:

  1. 创建一个包含类似以下示例内容的脚本文件:

    UPSTREAM_REGISTRY=quay.io
    PRODUCT_REPO=openshift-release-dev
    RELEASE_NAME=ocp-release
    OCP_RELEASE=4.5.2-x86_64
    LOCAL_REGISTRY=$(hostname):5000
    LOCAL_SECRET_JSON=/path/to/pull/secret
    
    oc adm -a ${LOCAL_SECRET_JSON} release mirror \
    --from=${UPSTREAM_REGISTRY}/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE} \
    --to=${LOCAL_REGISTRY}/ocp4 \
    --to-release-image=${LOCAL_REGISTRY}/ocp4/release:${OCP_RELEASE}

    /path/to/pull/secret 替换为 OpenShift Container Platform pull secret 的路径。

  2. 运行该脚本来对镜像进行镜像、配置设置并将发行镜像与发行内容分开。

提示:在创建 ImageContentSourcePolicy 时,您可以使用此脚本最后一行的输出。

14.1.3. 为 OpenShift Update Service 部署 Operator

要在 OpenShift Container Platform 环境中为 OpenShift Update Service 部署 Operator,请完成以下步骤:

  1. 在 hub 集群中,访问 OpenShift Container Platform operator hub。
  2. 选择 Red Hat OpenShift Update Service Operator 来部署 Operator。如果需要,更新默认值。Operator 的部署会创建一个名为 openshift-cincinnati 的新项目。
  3. 等待 Operator 的安装完成。

    提示:您可以通过在 OpenShift Container Platform 命令行中输入 oc get pods 命令来检查安装的状态。验证 Operator 是否处于 running 状态。

14.1.4. 构建图形数据 init 容器

OpenShift Update Service 使用图形数据信息来决定可用的升级。在连接的环境中,OpenShift Update Service 会直接从 Cincinnati 图形数据GitHub 仓库中提取可用于升级的图形数据信息。由于要配置断开连接的环境,所以必须使用 init 容器使图形数据在本地存储库中可用。完成以下步骤以创建图形数据 init 容器:

  1. 输入以下命令克隆 graph data Git 存储库:

    git clone https://github.com/openshift/cincinnati-graph-data
  2. 创建一个包含您的图形数据 init 信息的文件。您可以在 cincinnati-operator GitHub 仓库中找到此 Dockerfile 示例。该文件的内容在以下示例中显示:

    FROM registry.access.redhat.com/ubi8/ubi:8.1
    
    RUN curl -L -o cincinnati-graph-data.tar.gz https://github.com/openshift/cincinnati-graph-data/archive/master.tar.gz
    
    RUN mkdir -p /var/lib/cincinnati/graph-data/
    
    CMD exec /bin/bash -c "tar xvzf cincinnati-graph-data.tar.gz -C /var/lib/
    cincinnati/graph-data/ --strip-components=1"

    在本例中:

    • FROM 值是 OpenShift Update Service 查找镜像的外部 registry。
    • RUN 命令创建目录并打包升级文件。
    • CMD 命令将软件包文件复制到本地库并提取文件进行升级。
  3. 运行以下命令来构建 图形数据 init 容器:

    podman build -f <path_to_Dockerfile> -t ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container:latest
    podman push ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container:latest --authfile=/path/to/pull_secret.json

    path_to_Dockerfile 替换为您在上一步中创建文件的路径。

    ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container 替换为 graph data init 容器的路径。

    /path/to/pull_secret 替换为 pull secret 文件的路径。

    备注:如果没有安装 podman,您也可以将命令中的 podman 替换为 docker

14.1.5. 为已镜像的 registry 配置证书

如果您使用安全的外部容器 registry 来存储已镜像的 OpenShift Container Platform 发行镜像,OpenShift Update Service 需要访问此 registry 来构建升级图。完成以下步骤以配置您的 CA 证书以用于 OpenShift Update Service Pod:

  1. 查找位于 image.config.openshift.io 的 OpenShift Container Platform 外部 registry API。这是存储外部 registry CA 证书的位置。

    如需更多信息,请参阅 OpenShift Container Platform 文档中的配置额外的信任存储以访问镜像 registry

  2. openshift-config 命名空间中创建 ConfigMap。
  3. 在密钥 cincinnati-registry 中添加您的 CA 证书。OpenShift Update Service 使用此设置来定位您的证书:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: trusted-ca
    data:
      cincinnati-registry: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
  4. 编辑 image.config.openshift.io API 中的 cluster 资源,将 additionalTrustedCA 字段设置为您创建的 ConfigMap 的名称。

    oc patch image.config.openshift.io cluster -p '{"spec":{"additionalTrustedCA":{"name":"trusted-ca"}}}' --type merge

    trusted-ca 替换为新 ConfigMap 的路径。

OpenShift Update Service Operator 会监视 image.config.openshift.io API 和您在 openshift-config 命名空间中创建的 ConfigMap 以获取更改,然后在 CA 证书已更改时重启部署。

14.1.6. 部署 OpenShift Update Service 实例

当在 hub 集群上完成 OpenShift Update Service 实例部署时,此实例就位于集群升级的镜像镜像位置,并可供断开连接的受管集群使用。完成以下步骤以部署实例:

  1. 如果您不想使用 Operator 的默认命名空间(openshift-cincinnati), 为 OpenShift Update Service 实例创建一个命名空间:

    1. 在 OpenShift Container Platform hub 集群控制台导航菜单中,选择 Administration > Namespaces
    2. Create Namespace
    3. 添加命名空间的名称以及您的命名空间的任何其他信息。
    4. 选择 Create 来创建命名空间。
  2. 在 OpenShift Container Platform 控制台的 Installed Operators 部分中,选择 Red Hat OpenShift Update Service Operator
  3. 在菜单中选择 Create Instance
  4. 粘贴 OpenShift Update Service 实例中的内容。您的 YAML 实例可能类似以下清单:

    apiVersion: cincinnati.openshift.io/v1beta1
    kind: Cincinnati
    metadata:
      name: openshift-update-service-instance
      namespace: openshift-cincinnati
    spec:
      registry: <registry_host_name>:<port>
      replicas: 1
      repository: ${LOCAL_REGISTRY}/ocp4/release
      graphDataImage: '<host_name>:<port>/cincinnati-graph-data-container'

    spec.registry 值替换为镜像的本地断开连接 registry 的路径。

    spec.graphDataImage 值替换为图形数据 init 容器的路径。提示:这与您运行 podman push 命令来推送 图形数据 init 容器时使用的值相同。

  5. 选择 Create 来创建实例。
  6. 在 hub 集群 CLI 中输入 oc get pods 命令来查看实例创建的状态。它可能需要一段时间,但当命令结果显示实例和运算符正在运行时,进程就会完成。

14.1.7. 部署策略以覆盖默认 registry(可选)

备注:本节中的步骤仅在将发行版本镜像到您的镜像 registry 时应用。

OpenShift Container Platform 具有一个默认的镜像 registry 值,用于指定它找到升级软件包的位置。在断开连接的环境中,您可以创建一个策略来替换该值,并将该值替换为您对发行版本镜像进行镜像的本地镜像 registry 的路径。

对于这些步骤,策略名为 ImageContentSourcePolicy。完成以下步骤以创建策略:

  1. 登录到 hub 集群的 OpenShift Container Platform 环境。
  2. 在 OpenShift Container Platform 导航中,选择 Administration > Custom Resource Definitions
  3. 选择 Instances 选项卡。
  4. 选择设置断开连接的 OLM 时创建的 ImageContentSourcePolicy 名称,以查看其内容。
  5. 选择 YAML 选项卡以 YAML 格式查看内容。
  6. 复制 ImageContentSourcePolicy 的整个内容。
  7. 在 Red Hat Advanced Cluster Management 控制台中选择 Govern risk > Create policy
  8. YAML 切换设置为 On 以查看策略的 YAML 版本。
  9. 删除 YAML 代码中的所有内容。
  10. 将以下 YAML 内容粘贴到窗口以创建自定义策略:

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-pod
      namespace: default
      annotations:
        policy.open-cluster-management.io/standards:
        policy.open-cluster-management.io/categories:
        policy.open-cluster-management.io/controls:
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-pod-sample-nginx-pod
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Pod
                    metadata:
                      name: sample-nginx-pod
                      namespace: default
                    status:
                      phase: Running
              remediationAction: inform
              severity: low
      remediationAction: enforce
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-pod
      namespace: default
    placementRef:
      name: placement-policy-pod
      kind: PlacementRule
      apiGroup: apps.open-cluster-management.io
    subjects:
    - name: policy-pod
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-pod
      namespace: default
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          []  # selects all clusters if not specified
  11. 将模板 objectDefinition 部分中的内容替换为类似以下内容的内容,以添加 ImageContentSourcePolicy 的设置:

    apiVersion: operator.openshift.io/v1alpha1
    kind: ImageContentSourcePolicy
    metadata:
      name: ImageContentSourcePolicy
    spec:
      repositoryDigestMirrors:
      - mirrors:
        - <path-to-local-mirror>
        source: registry.redhat.io
    • path-to-local-mirror 替换为您的本地 mirror repository 的路径。
    • 提示:您可以通过输入 oc adm release mirror 命令来查找到本地镜像的路径。
  12. 选择 Enforce if supported
  13. 选择 Create 来创建策略。

14.1.8. 部署策略来部署断开连接的目录源

Catalogsource 策略推送到受管集群,将默认位置从连接的位置更改为您断开连接的本地 registry。

  1. 在 Red Hat Advanced Cluster Management 控制台中,选择 Automate infrastructure > Clusters
  2. 在集群列表中找到要接收策略的受管集群。
  3. 记录下受管集群 name 标签的值。标签格式为 name=managed-cluster-name。该值会在推送策略时使用。
  4. 在 Red Hat Advanced Cluster Management 控制台菜单中,选择 Govern risk > Create policy
  5. YAML 切换设置为 On 以查看策略的 YAML 版本。
  6. 删除 YAML 代码中的所有内容。
  7. 将以下 YAML 内容粘贴到窗口以创建自定义策略:
  8. 将以下 YAML 内容粘贴到窗口以创建自定义策略:

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-pod
      namespace: default
      annotations:
        policy.open-cluster-management.io/standards:
        policy.open-cluster-management.io/categories:
        policy.open-cluster-management.io/controls:
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-pod-sample-nginx-pod
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Pod
                    metadata:
                      name: sample-nginx-pod
                      namespace: default
                    status:
                      phase: Running
              remediationAction: inform
              severity: low
      remediationAction: enforce
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-pod
      namespace: default
    placementRef:
      name: placement-policy-pod
      kind: PlacementRule
      apiGroup: apps.open-cluster-management.io
    subjects:
    - name: policy-pod
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-pod
      namespace: default
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          []  # selects all clusters if not specified
  9. 在策略中添加以下内容:

    apiVersion: config.openshift.io/vi
    kind: OperatorHub
    metadata:
     name: cluster
    spec:
     disableAllDefaultSources: true
  10. 添加以下内容:

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: my-operator-catalog
      namespace: openshift-marketplace
    spec:
      sourceType: grpc
      image: <registry_host_name>:<port>/olm/redhat-operators:v1
      displayName: My Operator Catalog
      publisher: grpc

    spec.image 值替换为本地受限目录源镜像的路径。

  11. 在 Red Hat Advanced Cluster Management 控制台导航中,选择 Automate infrastructure > Clusters 来检查受管集群的状态。应用策略时,集群状态为 ready

14.1.9. 部署策略以更改受管集群参数

ClusterVersion 策略推送到受管集群,以更改其检索升级的默认位置。

  1. 在受管集群中,输入以下命令确认 ClusterVersion upstream 参数目前是默认公共 OpenShift Update Service 操作对象:

    oc get clusterversion -o yaml

    返回的内容可能类似以下内容:

    apiVersion: v1
    items:
    - apiVersion: config.openshift.io/v1
      kind: ClusterVersion
    [..]
      spec:
        channel: stable-4.4
        upstream: https://api.openshift.com/api/upgrades_info/v1/graph
  2. 在 hub 集群中,输入以下命令来识别到 OpenShift Update Service 操作对象:oc get routes

    提示:请注意这个值供后续步骤使用。

  3. 在 hub 集群 Red Hat Advanced Cluster Management 控制台菜单中,选择 Govern risk > Create a policy
  4. YAML 切换设置为 On 以查看策略的 YAML 版本。
  5. 删除 YAML 代码中的所有内容。
  6. 将以下 YAML 内容粘贴到窗口以创建自定义策略:

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-pod
      namespace: default
      annotations:
        policy.open-cluster-management.io/standards:
        policy.open-cluster-management.io/categories:
        policy.open-cluster-management.io/controls:
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-pod-sample-nginx-pod
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Pod
                    metadata:
                      name: sample-nginx-pod
                      namespace: default
                    status:
                      phase: Running
              remediationAction: inform
              severity: low
      remediationAction: enforce
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-pod
      namespace: default
    placementRef:
      name: placement-policy-pod
      kind: PlacementRule
      apiGroup: apps.open-cluster-management.io
    subjects:
    - name: policy-pod
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-pod
      namespace: default
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          []  # selects all clusters if not specified
  7. 将以下内容添加到 policy 项中的 policy.spec 部分:

    apiVersion: config.openshift.io/v1
      kind: ClusterVersion
      metadata:
        name: version
      spec:
        channel: stable-4.4
        upstream: https://example-cincinnati-policy-engine-uri/api/upgrades_info/v1/graph

    spec.upstream 值替换为 hub 集群 OpenShift Update Service 操作对象的路径。

    提示:您可以完成以下步骤以确定操作对象的路径:

    1. 在 hub 集群上运行 oc get get routes -A 命令。
    2. 找到到 cincinnati 的路由。+ 到操作对象的路径是 HOST/PORT 字段的值。
  8. 在受管集群 CLI 中,使用以下命令确认 ClusterVersion 中的上游参数已使用本地 hub 集群 OpenShift Update Service URL 更新:

    oc get clusterversion -o yaml

    结果应该类似以下内容:

    apiVersion: v1
    items:
    - apiVersion: config.openshift.io/v1
      kind: ClusterVersion
    [..]
      spec:
        channel: stable-4.4
        upstream: https://<hub-cincinnati-uri>/api/upgrades_info/v1/graph

14.1.10. 查看可用升级

您可以通过完成以下步骤来查看受管集群可用升级列表:

  1. 登录您的 Red Hat Advanced Cluster Management 控制台。
  2. 在导航菜单中,选择 Automate Infrastructure > Clusters
  3. 选择处于 Ready 状态的一个集群。
  4. Actions 菜单中选择 Upgrade cluster
  5. 验证可选的升级路径是否可用。

    备注:如果当前版本没有镜像到本地镜像存储库,则不会显示可用的升级版本。

14.1.11. 升级集群

配置断开连接的 registry 后,Red Hat Advanced Cluster Management 和 OpenShift Update Service 使用断开连接的 registry 来确定升级是否可用。如果没有可用的升级,请确保您有集群当前级别的发行镜像,且至少有一个后续级别的镜像位于本地存储库中。如果集群当前版本的发行镜像不可用,则没有可用的升级。

完成以下步骤进行升级:

  1. 在 Red Hat Advanced Cluster Management 控制台中,选择 Automate infrastructure > Clusters
  2. 查找您要确定是否有可用的升级的集群。
  3. 如果有可用的升级,集群的 Distribution version 栏表示有可用的升级可用。
  4. 选择集群的 Options 菜单,然后选择 Upgrade cluster
  5. 为升级选择目标版本,然后选择 Upgrade

受管集群已更新至所选版本。

如果集群升级失败,Operator 通常会重试升级,停止并报告故障组件的状态。在某些情况下,升级过程会一直通过尝试完成此过程进行循环。不支持在失败的升级后将集群还原到以前的版本。如果您的集群升级失败,请联系红帽支持以寻求帮助。

第 15 章 从管理中移除集群

当您从管理中删除通过 Red Hat Advanced Cluster Management for Kubernetes 创建的 OpenShift Container Platform 集群时,您可以将其分离(detach)销毁(destroy)

分离集群会将其从管理中移除,但不会完全删除。如果要管理它,您可以再次导入它。只有集群处于 Ready 状态时方可使用这个选项。

销毁集群会将其从管理中移除,并删除集群的组件。这将会是永久的,集群无法被再次导入和管理。

15.1. 使用控制台删除集群

  1. 从导航菜单中导航到 Automate infrastructure > Clusters
  2. 选择您要从管理中删除的集群的 Option 菜单。
  3. 选择 Destroy clusterDetach cluster

    提示:您可以选择要分离或销毁的集群的复选框来分离或销毁多个集群。然后选择 DetachDestroy

  4. 删除集群后继续删除剩余的资源

备注:如果您试图分离名为 local-cluster 的 hub 集群,请注意 disableHubSelfManagement 的默认设置为 false。此设置会导致 hub 集群在分离时会重新导入自己并管理自己,并协调 MultiClusterHub 控制器。hub 集群可能需要几小时时间来完成分离过程并重新导入。如果要在等待进程完成后重新导入 hub 集群,您可以输入以下命令来重启 multiclusterhub-operator pod 并更快地重新导入:

oc delete po -n open-cluster-management `oc get pod -n open-cluster-management | grep multiclusterhub-operator| cut -d' ' -f1`

您可以通过将 disableHubSelfManagement 值改为 true 来更改 hub 集群的值,如在线安装所述。

15.2. 使用命令行删除集群

要使用 hub 集群的命令行分离受管集群,请运行以下命令:

oc delete managedcluster $CLUSTER_NAME

备注:如果您试图分离名为 local-cluster 的 hub 集群,请注意 disableHubSelfManagement 的默认设置为 false。此设置会导致 hub 集群在分离时会重新导入自己并管理自己,并协调 MultiClusterHub 控制器。hub 集群可能需要几小时时间来完成分离过程并重新导入。如果要在等待进程完成后重新导入 hub 集群,您可以输入以下命令来重启 multiclusterhub-operator pod 并更快地重新导入:

oc delete po -n open-cluster-management `oc get pod -n open-cluster-management | grep multiclusterhub-operator| cut -d' ' -f1`

您可以通过将 disableHubSelfManagement 值改为 true 来更改 hub 集群的值,如在线安装所述。

删除集群后继续删除剩余的资源

15.3. 在删除集群后删除剩余的资源

如果受管集群上有剩余的资源,则需要额外的步骤以确保删除所有剩余的组件。需要这些额外步骤的情况,包括以下示例:

  • 受管集群在完全创建前会被分离,但 klusterlet 等一些组件会保留在受管集群中。
  • 在分离受管集群前,管理集群的 hub 丢失或销毁,因此无法从 hub 中分离受管集群。
  • 当受管集群被分离后,受管集群将处于非在线状态。

完成以下步骤以分离受管集群:

  1. 确保配置了 oc 命令行界面。
  2. 确保您在受管集群中配置了 KUBECONFIG

    如果运行 oc get ns | grep open-cluster-management-agent,您应该看到两个命名空间:

    open-cluster-management-agent         Active   10m
    open-cluster-management-agent-addon   Active   10m
  3. deploy Git 仓库下载 cleanup-managed-cluster 脚本。
  4. 输入以下命令运行 cleanup-managed-cluster.sh 脚本:

    ./cleanup-managed-cluster.sh
  5. 运行以下命令以确保这两个命名空间被删除:

    oc get ns | grep open-cluster-management-agent