1.3. 安装和升级多集群引擎 Operator
multicluster engine operator 是一个软件 operator,用于增强集群团队管理。multicluster engine operator 支持跨云和数据中心的 Red Hat OpenShift Container Platform 和 Kubernetes 集群生命周期管理。
请参阅以下文档:
1.3.1. 在线安装
multicluster engine operator 安装有 Operator Lifecycle Manager,用于管理安装、升级和删除包含 multicluster engine operator 的组件。
弃用: 不再支持 multicluster engine operator 的 2.3 和更早的版本。文档可能仍然可用,但没有任何可用的勘误或其他更新。
最佳实践: 升级到最新版本。
需要的访问权限:集群管理员
重要:
-
对于 OpenShift Container Platform Dedicated 环境,必须具有
cluster-admin
权限。默认情况下,dedicated-admin
角色没有在 OpenShift Container Platform Dedicated 环境中创建命名空间所需的权限。 - 默认情况下,多集群引擎 Operator 组件安装在 OpenShift Container Platform 集群的 worker 节点上,而无需额外的配置。您可以使用 OpenShift Container Platform OperatorHub Web 控制台界面或使用 OpenShift Container Platform CLI 将多集群引擎 Operator 安装到 worker 节点上。
- 如果您使用基础架构节点配置了 OpenShift Container Platform 集群,您可以使用带有其他资源参数的 OpenShift Container Platform CLI 将多集群引擎 Operator 安装到这些基础架构节点上。不是所有多集群引擎 Operator 组件都支持基础架构节点,因此在基础架构节点上安装 multicluster engine operator 时仍需要一些 worker 节点。详情请参阅在基础架构节点上安装多集群引擎部分。
如果您计划导入不是由 OpenShift Container Platform 或 Kubernetes 多集群引擎创建的 Kubernetes 集群,则需要配置镜像 pull secret。有关如何配置镜像 pull secret 和其他高级配置的详情,请参考本文档的高级配置部分中的选项。
1.3.1.1. 先决条件
在为 Kubernetes 安装多集群引擎前,请查看以下要求:
- 您的 Red Hat OpenShift Container Platform 集群必须通过 OpenShift Container Platform 控制台访问 OperatorHub 目录中的 multicluster engine operator。
- 您需要访问 catalog.redhat.com。
OpenShift Container Platform 版本 4.8 或更高版本必须部署到您的环境中,且必须通过 OpenShift Container Platform CLI 登录。如需 OpenShift Container Platform,请参阅以下安装文档:
-
您的 OpenShift Container Platform 命令行界面(CLI)被配置为运行
oc
命令。如需有关安装和配置 OpenShift Container Platform CLI 的信息,请参阅 CLI 入门。 - OpenShift Container Platform 权限必须允许创建命名空间。
- 需要有一个互联网连接来访问 Operator 的依赖项。
要在 OpenShift Container Platform Dedicated 环境中安装,请参阅以下内容:
- 您必须已配置并运行了 OpenShift Container Platform Dedicated 环境。
-
您必须在要安装引擎的 OpenShift Container Platform Dedicated 环境中具有
cluster-admin
授权。
- 如果您计划使用 Red Hat OpenShift Container Platform 提供的 Assisted Installer 创建受管集群,请参阅 OpenShift Container Platform 文档中的使用 Assisted Installer 主题准备安装。
1.3.1.2. 确认 OpenShift Container Platform 安装
您必须有一个受支持的 OpenShift Container Platform 版本,包括 registry 和存储服务,并可以正常工作。有关安装 OpenShift Container Platform 的更多信息,请参阅 OpenShift Container Platform 文档。
- 验证 multicluster engine operator 尚未安装在 OpenShift Container Platform 集群中。multicluster engine operator 只允许在每个 OpenShift Container Platform 集群中有一个安装。如果没有安装,请继续执行以下步骤。
要确保正确设置 OpenShift Container Platform 集群,请使用以下命令访问 OpenShift Container Platform Web 控制台:
kubectl -n openshift-console get route console
请参见以下示例输出:
console console-openshift-console.apps.new-coral.purple-chesterfield.com console https reencrypt/Redirect None
-
在浏览器中打开 URL 并检查结果。如果控制台 URL 显示
console-openshift-console.router.default.svc.cluster.local
,当安装 OpenShift Container Platform 时把openshift_master_default_subdomain
设置为这个值。请参阅以下 URL 示例:https://console-openshift-console.apps.new-coral.purple-chesterfield.com
。
您可以继续安装 multicluster engine operator。
1.3.1.3. 从 OperatorHub Web 控制台界面安装
最佳实践: 从 OpenShift Container Platform 导航中的 Administrator 视图,安装 OpenShift Container Platform 提供的 OperatorHub Web 控制台界面。
- 选择 Operators > OperatorHub 来访问可用 operator 列表,选择 multicluster engine for Kubernetes operator。
-
点
Install
。 在 Operator 安装页面中,选择安装选项:
命名空间:
- 多集群引擎 operator 引擎必须安装在自己的命名空间或项目中。
-
默认情况下,OperatorHub 控制台安装过程会创建一个名为
multicluster-engine
的命名空间。最佳实践: 继续使用multicluster-engine
命名空间(如果可用)。 -
如果已存在名为
multicluster-engine
的命名空间,请选择不同的命名空间。
- Channel:选择与要安装的发行版本相对应的频道。当您选择频道时,它会安装指定的发行版本,并确定以后获得该发行版本中的勘误更新。
Approval strategy:批准策略指定了用户需要如何处理应用到您的频道或发行版本的更新。
- 选择 Automatic (默认选择)以确保会自动应用该发行版本中的任何更新。
- 选择 Manual 在有更新可用时接收通知。如果您对更新的应用有疑问,这可能是您的最佳实践。
注: 要升级到下一个次版本,您必须返回到 OperatorHub 页面,并为更当前的发行版本选择一个新频道。
- 选择 Install 以应用您的更改并创建 Operator。
请参阅以下流程来创建 MultiClusterEngine 自定义资源。
- 在 OpenShift Container Platform 控制台导航中,选择 Installed Operators > multicluster engine for Kubernetes。
- 选择 MultiCluster Engine 选项卡。
- 选择 Create MultiClusterEngine。
更新 YAML 文件中的默认值。请参阅文档中的 MultiClusterEngine 高级配置部分中的选项。
- 以下示例显示了您可以复制到编辑器中的默认模板:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: {}
选择 Create 来初始化自定义资源。多集群引擎 operator 引擎最多可能需要 10 分钟才能构建并启动。
创建 MultiClusterEngine 资源后,在 MultiCluster Engine 标签页中资源的状态为
Available
。
1.3.1.4. 通过 OpenShift Container Platform CLI 安装
创建一个 multicluster engine operator 引擎命名空间,其中包含 Operator 的要求。运行以下命令,其中
namespace
是 Kubernetes 引擎命名空间的多集群引擎的名称。在 OpenShift Container Platform 环境中,namespace
的值可能被称为 Project(项目)。oc create namespace <namespace>
将项目命名空间切换到您创建的命名空间。使用在第 1 步中创建的 Kubernetes 引擎命名空间的多集群引擎名称替换
namespace
。oc project <namespace>
创建 YAML 文件来配置
OperatorGroup
资源。每个命名空间只能有一个 operator 组。将default
替换为 operator 组的名称。将namespace
替换为项目命名空间的名称。请参见以下示例:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: <default> namespace: <namespace> spec: targetNamespaces: - <namespace>
运行以下命令来创建
OperatorGroup
资源。将operator-group
替换为您创建的 operator 组 YAML 文件的名称:oc apply -f <path-to-file>/<operator-group>.yaml
创建 YAML 文件来配置 OpenShift Container Platform 订阅。文件内容应类似以下示例:
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: multicluster-engine spec: sourceNamespace: openshift-marketplace source: redhat-operators channel: stable-2.1 installPlanApproval: Automatic name: multicluster-engine
注:要在基础架构节点上安装 Kubernetes 引擎的多集群引擎,请参阅 Operator Lifecycle Manager 订阅其他配置部分。
运行以下命令来创建 OpenShift Container Platform 订阅。使用您创建的订阅文件的名称替换
subscription
:oc apply -f <path-to-file>/<subscription>.yaml
创建 YAML 文件来配置
MultiClusterEngine
自定义资源。您的默认模板应类似以下示例:apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: {}
注: 要在基础架构节点上安装多集群引擎 Operator,请参阅 MultiClusterEngine 自定义资源附加配置 部分:
运行以下命令来创建
MultiClusterEngine
自定义资源。将custom-resource
替换为自定义资源文件的名称:oc apply -f <path-to-file>/<custom-resource>.yaml
如果此步骤失败并显示以下错误,则仍然会创建并应用这些资源。创建资源后几分钟内再次运行命令:
error: unable to recognize "./mce.yaml": no matches for kind "MultiClusterEngine" in version "operator.multicluster-engine.io/v1"
运行以下命令来获取自定义资源。在运行以下命令后,在
status.phase
字段中显示MultiClusterEngine
自定义资源状态Available
可能需要最多 10 分钟时间:oc get mce -o=jsonpath='{.items[0].status.phase}'
如果您要重新安装多集群引擎 operator 且 pod 没有启动,请参阅故障排除重新安装失败以了解解决这个问题的步骤。
备注:
-
具有
ClusterRoleBinding
的ServiceAccount
会自动向 multicluster engine operator 以及有权访问安装 multicluster engine operator 的命名空间的用户凭证授予集群管理员特权。
1.3.1.5. 在基础架构节点上安装
OpenShift Container Platform 集群可以配置为包含用于运行批准的管理组件的基础架构节点。在基础架构节点上运行组件可避免为运行这些管理组件的节点分配 OpenShift Container Platform 订阅配额。
将基础架构节点添加到 OpenShift Container Platform 集群后,请按照 OpenShift Container Platform CLI 指令安装,并将以下配置添加到 Operator Lifecycle Manager Subscription 和 MultiClusterEngine
自定义资源中。
1.3.1.5.1. 将基础架构节点添加到 OpenShift Container Platform 集群
按照 OpenShift Container Platform 文档中的 创建基础架构机器集 中所述的步骤进行操作。基础架构节点配置有 Kubernetes 污点(taint)
和标签(label)
,以便防止非管理工作负载在它们上运行。
要与多集群引擎 operator 提供的基础架构节点启用兼容,请确保您的基础架构节点应用了以下 taint
和 label
:
metadata: labels: node-role.kubernetes.io/infra: "" spec: taints: - effect: NoSchedule key: node-role.kubernetes.io/infra
1.3.1.5.2. Operator Lifecycle Manager Subscription 额外配置
在应用 Operator Lifecycle Manager 订阅前,添加以下配置:
spec: config: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - key: node-role.kubernetes.io/infra effect: NoSchedule operator: Exists
1.3.1.5.3. MultiClusterEngine 自定义资源额外配置
在应用 MultiClusterEngine
自定义资源前添加以下附加配置:
spec: nodeSelector: node-role.kubernetes.io/infra: ""
1.3.2. 在断开连接的网络中安装
您可能需要在没有连接到互联网的 Red Hat OpenShift Container Platform 集群上安装 multicluster engine operator。在断开连接的引擎中安装的步骤需要一些与连接安装相同的步骤。
重要: 您必须在没有安装早于 2.5 的 Red Hat Advanced Cluster Management for Kubernetes 的集群上安装多集群引擎 Operator。multicluster engine operator 无法在 2.5 之前的版本上与 Red Hat Advanced Cluster Management for Kubernetes 共存,因为它们提供了一些相同的管理组件。建议您在之前没有安装 Red Hat Advanced Cluster Management 的集群上安装 multicluster engine Operator。如果您在版本 2.5.0 或更高版本中使用 Red Hat Advanced Cluster Management for Kubernetes,则 multicluster engine operator 已安装在集群中。
您必须下载软件包副本以在安装过程中访问它们,而不是在安装过程中直接从网络访问它们。
1.3.2.1. 先决条件
在安装 multicluster engine operator 前,您必须满足以下要求:
- Red Hat OpenShift Container Platform 版本 4.8 或更高版本必须部署到您的环境中,且必须使用 CLI 登录。
您需要访问 catalog.redhat.com。
注: 要管理裸机集群,您必须使用 OpenShift Container Platform 版本 4.8 或更高版本。
请参阅 OpenShift Container Platform 版本 4.10、OpenShift Container Platform 版本 4.8。
-
您的 Red Hat OpenShift Container Platform CLI 需要版本 4.8 或更高版本,并配置为运行
oc
命令。如需有关安装和配置 Red Hat OpenShift CLI 的信息,请参阅 CLI 入门。 - 您的 Red Hat OpenShift Container Platform 权限必须允许创建命名空间。
- 必须有一 个有互联网连接的工作站来下载 operator 的依赖软件包。
1.3.2.2. 确认 OpenShift Container Platform 安装
- 您必须有一个受支持的 OpenShift Container Platform 版本,包括 registry 和存储服务,在集群中安装并正常工作。如需有关 OpenShift Container Platform 版本 4.8 的信息,请参阅 OpenShift Container Platform 文档。
连接后,您可以使用以下命令访问 OpenShift Container Platform Web 控制台来确保正确设置 OpenShift Container Platform 集群:
kubectl -n openshift-console get route console
请参见以下示例输出:
console console-openshift-console.apps.new-coral.purple-chesterfield.com console https reencrypt/Redirect None
本例中的控制台 URL 为
https:// console-openshift-console.apps.new-coral.purple-chesterfield.com
。在浏览器中打开 URL 并检查结果。如果控制台 URL 显示
console-openshift-console.router.default.svc.cluster.local
,当安装 OpenShift Container Platform 时把openshift_master_default_subdomain
设置为这个值。
1.3.2.3. 在断开连接的环境中安装
重要: 您需要将所需的镜像下载到镜像 registry 中,以便在断开连接的环境中安装 Operator。如果没有下载,您可能会在部署过程中收到 ImagePullBackOff
错误。
按照以下步骤在断开连接的环境中安装多集群引擎 Operator:
创建镜像 registry。如果您还没有镜像 registry,请按照 Red Hat OpenShift Container Platform 文档的 Disconnected 安装镜像 主题中的步骤来创建。
如果已有镜像 registry,可以配置和使用现有 registry。
注: 对于裸机,您需要在
install-config.yaml
文件中为断开连接的 registry 提供证书信息。要访问受保护的断开连接的 registry 中的镜像,您必须提供证书信息,以便多集群引擎 operator 可以访问 registry。- 复制 registry 中的证书信息。
-
在编辑器中打开
install-config.yaml
文件。 -
找到
additionalTrustBundle: |
条目。 在
additionalTrustBundle
行后添加证书信息。内容应类似以下示例:additionalTrustBundle: | -----BEGIN CERTIFICATE----- certificate_content -----END CERTIFICATE----- sshKey: >-
重要: 如果需要以下监管策略,则需要额外的镜像 registry:
-
Container Security Operator 策略:查找
registry.redhat.io/quay
源中的镜像。 -
Compliance Operator 策略:查找
registry.redhat.io/compliance
源中的镜像。 Gatekeeper Operator 策略:查找
registry.redhat.io/mvapich2
源中的镜像。参阅以下所有三个 operator 的镜像列表示例:
- mirrors: - <your_registry>/rhacm2 source: registry.redhat.io/rhacm2 - mirrors: - <your_registry>/quay source: registry.redhat.io/quay - mirrors: - <your_registry>/compliance source: registry.redhat.io/compliance
-
Container Security Operator 策略:查找
-
保存
install-config.yaml
文件。 创建一个包含
ImageContentSourcePolicy
的 YAML 文件,其名称为mce-policy.yaml
。注: 如果您在正在运行的集群中修改此操作,则会导致所有节点的滚动重启。apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: name: mce-repo spec: repositoryDigestMirrors: - mirrors: - mirror.registry.com:5000/multicluster-engine source: registry.redhat.io/multicluster-engine
输入以下命令应用 ImageContentSourcePolicy 文件:
oc apply -f mce-policy.yaml
启用断开连接的 Operator Lifecycle Manager Red Hat Operator 和 Community Operator。
multicluster engine operator 包含在 Operator Lifecycle Manager Red Hat Operator 目录中。
- 为 Red Hat Operator 目录配置离线 Operator Lifecycle Manager。按照 Red Hat OpenShift Container Platform 文档中受限网络部分中使用 Operator Lifecycle Manager 中的步骤操作。
- 现在,您在断开连接的 Operator Lifecycle Manager 中已有镜像,从 Operator Lifecycle Manager 目录继续为 Kubernetes 安装 multicluster engine operator。
如需了解所需步骤,请参阅在线安装。
1.3.3. 升级集群
创建要使用 multicluster engine operator 管理的 Red Hat OpenShift Container Platform 集群后,您可以使用 multicluster engine operator 控制台将这些集群升级到受管集群使用的版本频道中可用的最新次版本。
在连接的环境中,会自动识别更新,并带有为在控制台中需要升级的每个集群提供的通知。
备注:
要升级到一个主要版本,您必须确定是否满足升级到该版本的所有先决条件。在可以使用控制台升级集群前,您必须更新受管集群上的版本频道。
更新受管集群上的版本频道后,多集群引擎 operator 控制台会显示可用于升级的最新版本。
此升级方法只适用于处于 Ready 状态的 OpenShift Container Platform 受管集群。
重要: 您无法使用 multicluster engine operator 控制台在 Red Hat OpenShift Dedicated 上升级 Red Hat OpenShift Kubernetes Service 受管集群或 OpenShift Container Platform 受管集群。
要在连接的环境中升级集群,请完成以下步骤:
- 通过导航菜单进入 Infrastructure > Clusters。如果有可用的升级,会在 Distribution version 列中显示。
- 选择您要升级的 Ready 状态的集群。集群必须是 OpenShift Container Platform 集群才能使用控制台升级。
- 选择 Upgrade。
- 选择每个集群的新版本。
- 选择 Upgrade。
如果集群升级失败,Operator 通常会重试升级,停止并报告故障组件的状态。在某些情况下,升级过程会一直通过尝试完成此过程进行循环。不支持在失败的升级后将集群还原到以前的版本。如果您的集群升级失败,请联系红帽支持以寻求帮助。
1.3.3.1. 选择一个频道
您可以使用控制台为 OpenShift Container Platform 版本 4.6 或更高版本上的集群升级选择频道。选择频道后,会自动提醒两个勘误版本可用的集群升级(4.8.1 > 4.8.2 > 4.8.3 等)和发行版本(4.8 > 4.9 等)。
要为集群选择频道,请完成以下步骤:
- 在导航中,选择 Infrastructure > Clusters。
- 选择要更改的集群名称来查看 Cluster details 页面。如果集群有一个不同的频道,则 Channel 字段中会显示一个编辑图标。
- 点编辑图标,以修改字段中的设置。
- 在 New channel 字段中选择一个频道。
您可以在集群的 Cluster details 页中找到有关可用频道更新的提示信息。
1.3.3.2. 升级断开连接的集群
您可以使用带有多集群引擎 operator 的 Red Hat OpenShift Update Service 来在断开连接的环境中升级集群。
在某些情况下,安全性考虑会阻止集群直接连接到互联网。这使得您很难知道什么时候可以使用升级,以及如何处理这些升级。配置 OpenShift Update Service 可能会有所帮助。
OpenShift Update Service 是一个独立的操作对象,它监控受管集群在断开连接的环境中的可用版本,并使其可用于在断开连接的环境中升级集群。配置 OpenShift Update Service 后,它可以执行以下操作:
- 监测何时有适用于断开连接的集群的升级。
- 使用图形数据文件识别哪些更新需要被镜像到您的本地站点进行升级。
- 使用控制台,通知您的集群有可用的升级。
以下主题解释了升级断开连接的集群的步骤:
1.3.3.2.1. 先决条件
您必须满足以下先决条件,才能使用 OpenShift Update Service 升级断开连接的集群:
部署在 Red Hat OpenShift Container Platform 版本 4.6 或更高版本上运行的 hub 集群,并配置了受限 OLM。如需了解如何 配置受限 OLM 的详细信息,请参阅在受限网络中使用 Operator Lifecycle Manager。
注: 在配置受限 OLM 时记录目录源镜像。
- 由 hub 集群管理的 OpenShift Container Platform 集群
访问您可以镜像集群镜像的本地存储库的凭证。如需有关如何创建此存储库的更多信息,请参阅 断开连接的安装镜像。
注: 您升级的集群当前版本的镜像必须始终作为镜像的一个镜像可用。如果升级失败,集群会在试图升级时恢复到集群的版本。
1.3.3.2.2. 准备断开连接的镜像 registry
您必须镜像要升级到的镜像,以及您要从本地镜像 registry 升级到的当前镜像。完成以下步骤以镜像镜像:
创建一个包含类似以下示例内容的脚本文件:
UPSTREAM_REGISTRY=quay.io PRODUCT_REPO=openshift-release-dev RELEASE_NAME=ocp-release OCP_RELEASE=4.12.2-x86_64 LOCAL_REGISTRY=$(hostname):5000 LOCAL_SECRET_JSON=/path/to/pull/secret 1 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}
- 1
- 将
/path/to/pull/secret
替换为 OpenShift Container Platform pull secret 的路径。
运行该脚本来对镜像进行镜像、配置设置并将发行镜像与发行内容分开。
在创建
ImageContentSourcePolicy
时,您可以使用此脚本的最后一行输出。
1.3.3.2.3. 为 OpenShift Update Service 部署 Operator
要在 OpenShift Container Platform 环境中为 OpenShift Update Service 部署 Operator,请完成以下步骤:
- 在 hub 集群中,访问 OpenShift Container Platform operator hub。
-
选择
Red Hat OpenShift Update Service Operator
来部署 Operator。如果需要,更新默认值。Operator 的部署会创建一个名为openshift-cincinnati
的新项目。 等待 Operator 的安装完成。
您可以通过在 OpenShift Container Platform 命令行中输入
oc get pods
命令来检查安装的状态。验证 Operator 是否处于running
状态。
1.3.3.2.4. 构建图形数据 init 容器
OpenShift Update Service 使用图形数据信息来决定可用的升级。在连接的环境中,OpenShift Update Service 会直接从 Cincinnati 图形数据GitHub 仓库中提取可用于升级的图形数据信息。由于要配置断开连接的环境,所以必须使用 init 容器
使图形数据在本地存储库中可用。完成以下步骤以创建图形数据 init 容器
:
输入以下命令克隆 graph data Git 存储库:
git clone https://github.com/openshift/cincinnati-graph-data
创建一个包含您的图形数据
init
信息的文件。您可以在cincinnati-operator GitHub
仓库中找到此 Dockerfile 示例。该文件的内容在以下示例中显示:FROM registry.access.redhat.com/ubi8/ubi:8.1 1 RUN curl -L -o cincinnati-graph-data.tar.gz https://github.com/openshift/cincinnati-graph-data/archive/master.tar.gz 2 RUN mkdir -p /var/lib/cincinnati/graph-data/ 3 CMD exec /bin/bash -c "tar xvzf cincinnati-graph-data.tar.gz -C /var/lib/ cincinnati/graph-data/ --strip-components=1" 4
在本例中:
运行以下命令来构建
图形数据 init 容器
:podman build -f <path_to_Dockerfile> -t <${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container>:latest 1 2 podman push <${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container><2>:latest --authfile=</path/to/pull_secret>.json 3
注: 如果没有安装
podman
,您也可以将命令中的podman
替换为docker
。
1.3.3.2.5. 为已镜像的 registry 配置证书
如果您使用安全的外部容器 registry 来存储已镜像的 OpenShift Container Platform 发行镜像,OpenShift Update Service 需要访问此 registry 来构建升级图。完成以下步骤以配置您的 CA 证书以用于 OpenShift Update Service Pod:
查找位于
image.config.openshift.io
的 OpenShift Container Platform 外部 registry API。这是存储外部 registry CA 证书的位置。如需更多信息,请参阅 OpenShift Container Platform 文档中的 为镜像 registry 访问 配置额外的信任存储。
-
在
openshift-config
命名空间中创建 ConfigMap。 在密钥
updateservice-registry
中添加您的 CA 证书。OpenShift Update Service 使用此设置来定位您的证书:apiVersion: v1 kind: ConfigMap metadata: name: trusted-ca data: updateservice-registry: | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
编辑
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 证书已更改时重启部署。
1.3.3.2.6. 部署 OpenShift Update Service 实例
当在 hub 集群上完成 OpenShift Update Service 实例部署时,此实例就位于集群升级的镜像镜像位置,并可供断开连接的受管集群使用。完成以下步骤以部署实例:
如果您不想使用 Operator 的默认命名空间(
openshift-cincinnati
), 为 OpenShift Update Service 实例创建一个命名空间:- 在 OpenShift Container Platform hub 集群控制台导航菜单中,选择 Administration > Namespaces。
- 点 Create Namespace。
- 添加命名空间的名称以及您的命名空间的任何其他信息。
- 选择 Create 来创建命名空间。
- 在 OpenShift Container Platform 控制台的 Installed Operators 部分中,选择 Red Hat OpenShift Update Service Operator。
- 在菜单中选择 Create Instance。
粘贴 OpenShift Update Service 实例中的内容。您的 YAML 实例可能类似以下清单:
apiVersion: cincinnati.openshift.io/v1beta2 kind: Cincinnati metadata: name: openshift-update-service-instance namespace: openshift-cincinnati spec: registry: <registry_host_name>:<port> 1 replicas: 1 repository: ${LOCAL_REGISTRY}/ocp4/release graphDataImage: '<host_name>:<port>/cincinnati-graph-data-container'2
- 选择 Create 来创建实例。
-
在 hub 集群 CLI 中输入
oc get pods
命令来查看实例创建的状态。它可能需要一段时间,但当命令结果显示实例和运算符正在运行时,进程就会完成。
1.3.3.2.7. 覆盖默认 registry (可选)
注: 本节中的步骤只在将发行版本镜像到您的镜像 registry 时才应用。
OpenShift Container Platform 具有一个默认的镜像 registry 值,用于指定它找到升级软件包的位置。在断开连接的环境中,您可以创建一个覆盖,将该值替换为镜像发行镜像的本地镜像 registry 的路径。
完成以下步骤以覆盖默认 registry:
创建名为
mirror.yaml
的 YAML 文件,该文件类似于以下内容:apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: name: <your-local-mirror-name>1 spec: repositoryDigestMirrors: - mirrors: - <your-registry>2 source: registry.redhat.io
注: 您可以通过输入
oc adm release mirror
命令来查找到本地镜像的路径。使用受管集群的命令行,运行以下命令覆盖默认 registry:
oc apply -f mirror.yaml
1.3.3.2.8. 部署断开连接的目录源
在受管集群中,禁用所有默认目录源并创建一个新源。完成以下步骤,将默认位置从连接的位置改为断开连接的本地 registry:
创建名为
source.yaml
的 YAML 文件,该文件类似于以下内容:apiVersion: config.openshift.io/v1 kind: OperatorHub metadata: name: cluster spec: disableAllDefaultSources: true --- 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'1 displayName: My Operator Catalog publisher: grpc
- 1
- 将
spec.image
值替换为本地受限目录源镜像的路径。
在受管集群的命令行中,运行以下命令来更改目录源:
oc apply -f source.yaml
1.3.3.2.9. 更改受管集群参数
更新受管集群的 ClusterVersion
资源信息,以更改从中检索其升级的默认位置。
在受管集群中,输入以下命令确认
ClusterVersion
上游参数目前是默认的公共 OpenShift Update Service 操作对象:oc get clusterversion -o yaml
返回的内容可能类似以下内容:
apiVersion: v1 items: - apiVersion: config.openshift.io/v1 kind: ClusterVersion [..] spec: channel: stable-4.12 upstream: https://api.openshift.com/api/upgrades_info/v1/graph
在 hub 集群中,输入以下命令识别 OpenShift Update Service 操作对象的路由 URL:
oc get routes
记录返回的值以获取后续步骤。
在受管集群的命令行中,输入以下命令编辑
ClusterVersion
资源:oc edit clusterversion version
将
spec.channel
的值替换为您的新版本。将
spec.upstream
值替换为 hub 集群 OpenShift Update Service 操作对象的路径。您可以完成以下步骤来确定操作对象的路径:在 hub 集群中运行以下命令:
oc get routes -A
-
查找到
cincinnati
的路径。操作对象的路径是HOST/PORT
字段中的值。
在受管集群的命令行中,输入以下命令确认
ClusterVersion
中的 upstream 参数已更新为本地 hub 集群 OpenShift Update Service URL:oc get clusterversion -o yaml
结果类似以下内容:
apiVersion: v1 items: - apiVersion: config.openshift.io/v1 kind: ClusterVersion [..] spec: channel: stable-4.12 upstream: https://<hub-cincinnati-uri>/api/upgrades_info/v1/graph
1.3.3.2.10. 查看可用升级
在 Clusters 页面中,如果断开连接的 registry 中有升级,集群的 Distribution version 表示有一个可用的升级。您可以通过从 Actions 菜单中选择集群并选择 Upgrade cluster 来查看可用的升级。如果可选的升级路径可用,则会列出可用的升级。
注: 如果当前版本没有镜像到本地镜像存储库,则不会显示可用的升级版本。
1.3.3.2.11. 选择一个频道
您可以使用控制台为 OpenShift Container Platform 版本 4.6 或更高版本上的集群升级选择频道。这些版本必须在镜像 registry 上可用。完成选择频道中的步骤为您的升级指定频道。
1.3.3.2.12. 升级集群
配置断开连接的 registry 后,多集群引擎 operator 和 OpenShift Update Service 使用断开连接的 registry 来确定升级是否可用。如果没有可用的升级,请确保您有集群当前级别的发行镜像,且至少有一个后续级别的镜像位于本地存储库中。如果集群当前版本的发行镜像不可用,则没有可用的升级。
在 Clusters 页面中,如果断开连接的 registry 中有升级,集群的 Distribution version 表示有一个可用的升级。您可以通过点 Upgrade available 并选择升级的版本来升级镜像。受管集群已更新至所选版本。
如果集群升级失败,Operator 通常会重试升级,停止并报告故障组件的状态。在某些情况下,升级过程会一直通过尝试完成此过程进行循环。不支持在失败的升级后将集群还原到以前的版本。如果您的集群升级失败,请联系红帽支持以寻求帮助。
1.3.4. 高级配置
multicluster engine operator 使用部署所有所需组件的 operator 安装。通过在 MultiClusterEngine
自定义资源中添加一个或多个以下属性,可以在安装过程中或安装后进一步配置 multicluster engine operator:
1.3.4.1. local-cluster 启用
默认情况下,运行 multicluster engine operator 的集群管理其自身。要在没有集群管理其自身的情况下安装 multicluster engine operator,在 MultiClusterEngine
部分中的 spec.overrides.components
设置中指定以下值:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: overrides: components: - name: local-cluster enabled: false
-
name
值将 hub 集群标识为local-cluster
。 -
enabled
设置指定功能是启用还是禁用。当值为true
时,hub 集群会自己管理。当值为false
时,hub 集群不自己管理。
由自身管理的 hub 集群在集群列表中被指定为 local-cluster
。
1.3.4.2. 自定义镜像 pull secret
如果您计划导入不是由 OpenShift Container Platform 或 multicluster engine operator 创建的 Kubernetes 集群,请生成一个包含 OpenShift Container Platform pull secret 信息的 secret,以便从发布 registry 中访问授权内容。
OpenShift Container Platform 集群的 secret 要求由 Kubernetes 的 OpenShift Container Platform 和多集群引擎自动解决,因此如果您没有导入其他类型的 Kubernetes 集群,则不必创建 secret。
重要: 这些 secret 是特定于命名空间的,因此请确保处于用于引擎的命名空间中。
- 选择 Download pull secret 从 cloud.redhat.com/openshift/install/pull-secret 下载 OpenShift Container Platform pull secret 文件。您的 OpenShift Container Platform pull secret 与您的 Red Hat Customer Portal ID 相关联,在所有 Kubernetes 供应商中都是相同的。
运行以下命令来创建 secret:
oc create secret generic <secret> -n <namespace> --from-file=.dockerconfigjson=<path-to-pull-secret> --type=kubernetes.io/dockerconfigjson
-
将
secret
替换为您要创建的 secret 的名称。 -
将
namespace
替换为项目命名空间,因为 secret 是特定于命名空间的。 -
将
path-to-pull-secret
替换为您下载的 OpenShift Container Platform pull secret 的路径。
-
将
以下示例显示,如果使用自定义 pull secret,要使用的 spec.imagePullSecret
模板。将 secret
替换为 pull secret 的名称:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: imagePullSecret: <secret>
1.3.4.3. 目标命名空间
可通过在 MultiClusterEngine
自定义资源中指定位置,在指定的命名空间中安装操作对象。此命名空间在 MultiClusterEngine
自定义资源的应用程序上创建。
重要: 如果没有指定目标命名空间,Operator 将安装到 multicluster-engine
命名空间,并在 MultiClusterEngine
自定义资源规格中设置它。
以下示例显示了可以用来指定目标命名空间的 spec.targetNamespace
模板。使用目标命名空间的名称替换 target
。注: target
目标命名空间不能是 default
命名空间:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: targetNamespace: <target>
1.3.4.4. availabilityConfig
hub 集群有两个可用功能: High
和 Basic
。默认情况下,hub 集群的可用性为 High
,hub 集群组件副本数
为 2
。它提供了对故障转移功能的支持,但消耗的资源数量比可用性为 Basic
(副本数
为1
) 的集群多。
以下示例显示了具有 Basic
可用性的 spec.availabilityConfig
模板:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: availabilityConfig: "Basic"
1.3.4.5. nodeSelector
您可以在 MultiClusterEngine
中定义一组节点选择器,以安装到集群中的特定节点。以下示例显示了将 pod 分配给带有标签 node-role.kubernetes.io/infra
的节点的 spec.nodeSelector
:
spec: nodeSelector: node-role.kubernetes.io/infra: ""
1.3.4.6. 容限(tolerations)
您可以定义容限列表,以允许 MultiClusterEngine
容许在集群中定义的特定污点。以下示例显示了与 node-role.kubernetes.io/infra
污点匹配的 spec.tolerations
:
spec: tolerations: - key: node-role.kubernetes.io/infra effect: NoSchedule operator: Exists
默认情况下,以上 infra-node 容限在 pod 上设置,而不在配置中指定任何容限。在配置中自定义容限将替换此默认行为。
1.3.4.7. ManagedServiceAccount 附加组件(技术预览)
默认情况下,Managed-ServiceAccount
附加组件被禁用。启用该组件后,您可以在受管集群上创建或删除服务帐户。要在启用此附加组件的环境中安装,请在 spec.overrides
的 MultiClusterEngine
规格中包括以下内容:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: overrides: components: - name: managedserviceaccount-preview enabled: true
在创建 MultiClusterEngine
后,可以在命令行中编辑资源并将 managedserviceaccount-preview
组件设置为 enabled: true
来启用 Managed-ServiceAccount
插件。或者,您可以运行以下命令,将 <multiclusterengine-name> 替换为 MultiClusterEngine
资源的名称。
oc patch MultiClusterEngine <multiclusterengine-name> --type=json -p='[{"op": "add", "path": "/spec/overrides/components/-","value":{"name":"managedserviceaccount-preview","enabled":true}}]'
1.3.4.8. Hypershift 附加组件(技术预览)
默认情况下,Hypershift
附加组件被禁用。要在启用此附加组件的环境中安装,请在 spec.overrides
的 MultiClusterEngine
值中包含以下内容:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: overrides: components: - name: hypershift-preview enabled: true
在创建 MultiClusterEngine
后,可在命令行中编辑资源,将 hypershift-preview
组件设置为 enabled: true
来启用 Hypershift
附加组件。或者,您可以运行以下命令,将 <multiclusterengine-name> 替换为 MultiClusterEngine
资源的名称:
oc patch MultiClusterEngine <multiclusterengine-name> --type=json -p='[{"op": "add", "path": "/spec/overrides/components/-","value":{"name":"hypershift-preview","enabled":true}}]'
1.3.5. 卸装
在卸载 Kubernetes 的多集群引擎时,您会看到两个不同的流程级别: 删除自定义资源和完成 Operator 卸载。完成卸载过程最多可能需要五分钟。
-
删除自定义资源是最基本的卸载类型,它会删除
MultiClusterEngine
实例的自定义资源,但会保留其他所需的 operator 资源。如果您计划使用相同的设置和组件重新安装,这个卸载级别很有用。 - 第二个级别是更完整的卸载,可删除大多数 Operator 组件,不包括自定义资源定义等组件。当您继续执行此步骤时,它会删除所有没有通过删除自定义资源而被删除的组件和订阅。在卸载后,您必须在重新安装自定义资源前重新安装 Operator。
1.3.5.1. 先决条件:分离启用的服务
在卸载 Kubernetes 引擎的多集群引擎前,您必须分离所有由该引擎管理的集群。为了避免错误,分离仍由引擎管理的所有集群,然后尝试再次卸载。
如果附加了受管集群,您可能会看到以下信息。
Cannot delete MultiClusterEngine resource because ManagedCluster resource(s) exist
有关分离集群的更多信息,请参阅从管理部分删除集群,在 创建集群中选择与您的供应商相关的信息。
1.3.5.2. 使用命令删除资源
-
如果还没有运行 oc 命令,请确保 OpenShift Container Platform CLI 配置为运行
oc
命令。如需有关如何配置oc
命令的更多信息,请参阅 OpenShift Container Platform 文档中的 OpenShift CLI 入门。 输入以下命令来更改到您的项目命名空间。将 namespace 替换为项目命名空间的名称:
oc project <namespace>
输入以下命令删除
MultiClusterEngine
自定义资源:oc delete multiclusterengine --all
您可以输入以下命令来查看进度:
oc get multiclusterengine -o yaml
-
输入以下命令删除在其中安装的命名空间中 multicluster-engine
ClusterServiceVersion
:
❯ oc get csv NAME DISPLAY VERSION REPLACES PHASE multicluster-engine.v2.0.0 multicluster engine for Kubernetes 2.0.0 Succeeded ❯ oc delete clusterserviceversion multicluster-engine.v2.0.0 ❯ oc delete sub multicluster-engine
此处显示的 CSV 版本可能会有所不同。
1.3.5.3. 使用控制台删除组件
当使用 Red Hat OpenShift Container Platform 控制台卸载时,需要删除 operator。使用控制台完成以下步骤进行卸载:
- 在 OpenShift Container Platform 控制台导航中,选择 Operators > Installed Operators > multicluster engine for Kubernetes.
删除
MultiClusterEngine
自定义资源。- 选择 Multiclusterengine 标签页
- 选择 MultiClusterEngine 自定义资源的 Options 菜单。
- 选择 Delete MultiClusterEngine。
根据以下部分中的步骤运行清理脚本。
提示: 如果您计划为 Kubernetes 版本重新安装相同的多集群引擎,您可以跳过这个过程中的其余步骤并重新安装自定义资源。
- 进入 Installed Operators。
- 选择 Options 菜单并选择 Uninstall operator 来删除 Kubernetes_ operator 的 _ multicluster 引擎。
1.3.5.4. 卸载故障排除
如果没有删除多集群引擎自定义资源,请通过运行清理脚本删除潜在的剩余工件。
将以下脚本复制到一个文件中:
#!/bin/bash oc delete apiservice v1.admission.cluster.open-cluster-management.io v1.admission.work.open-cluster-management.io oc delete validatingwebhookconfiguration multiclusterengines.multicluster.openshift.io oc delete mce --all