升级
本页介绍如何将 operator 2.8.0 原地升级到 Alauda Data Services Search Engine E1 3.0。
变更内容
operator 2.8.0 管理 opensearch.opster.io/v1 API 组中的资源。E1 3.0 管理 opensearch.org/v1 API 组中的资源。两个组中的资源种类及其字段相同。
E1 3.0 bundle 会安装两个组的 CRD。升级后:
- 自动迁移。 对于
opensearch.opster.io/v1中的每个资源,operator 都会在opensearch.org/v1中创建一个名称和命名空间相同的资源,并复制相同的 spec、标签和注释,以及状态。 - 旧组变为只读。 验证 webhook 会拒绝创建新的
opensearch.opster.io/v1资源,也会拒绝更改现有资源的spec。仍允许更新状态和删除资源。 - 每个节点池滚动重启一次。 每个现有集群中的每个节点池都会重启一次,每次重启一个 Pod。
此后,opensearch.org/v1 资源是需要编辑的资源。operator 会将其状态复制回旧资源,但迁移完成后,不会再向任一方向复制 spec 变更。
迁移的工作原理
迁移涵盖以下种类:OpenSearchCluster、OpensearchUser、OpensearchRole、OpensearchUserRoleBinding、OpensearchTenant、OpensearchActionGroup、OpenSearchISMPolicy、OpensearchSnapshotPolicy、OpensearchIndexTemplate 和 OpensearchComponentTemplate。
资源只有在就绪状态下才会迁移:
未就绪的资源会被跳过,并每 30 秒重新检查一次。资源一旦就绪,就会立即迁移。
每个迁移后的资源都会带有记录其来源的注释:
对于集群,operator 还会将新的资源设为 TLS 证书 Secret(<cluster>-ca、<cluster>-transport-cert、<cluster>-http-cert、<cluster>-admin-cert)的所有者,因此即使之后删除旧资源,证书也会保留。
为什么每个节点池都会重启一次
StatefulSet 的 Pod 选择器无法更改,而 E1 3.0 会使用新的 opensearch.org/... 标签选择 Pod。因此,对于每个节点池,operator 会:
- 为运行中的 Pod 添加新标签;
- 删除 StatefulSet,但不删除其 Pod;
- 使用 3.0 规范重新创建 StatefulSet,使其接管运行中的 Pod;
- 由于 3.0 Pod 模板与 2.8.0 的不同,因此逐个重启接管的 Pod。
重启采用常规滚动重启操作步骤:每次重启一个 Pod,并等待集群恢复后再继续。持久卷上的数据会保留。
对于每个重新创建的 StatefulSet,operator 都会在集群上记录一个原因是 StatefulSetRecreated 的 Warning 事件,随后记录 RollingRestart 事件。如果同时正在进行 OpenSearch 版本升级,则由版本升级负责重启 Pod。
升级前
检查要升级的每个 Kubernetes 集群中的以下各项。
将 Subscription 的 channel 切换为 stable 时,升级即会开始(请参阅升级 operator)。如果 Subscription 使用自动审批,升级会立即开始。请先完成此检查清单,并将 Subscription 切换为手动审批,以便由您决定何时开始升级:
-
在节点上设置
vm.max_map_count。 无论spec.general.setVMMaxMapCount的值是什么,E1 都不会运行用于在 2.8.0 中设置vm.max_map_count的特权 init 容器。升级之前,每个运行 OpenSearch 的节点都必须将vm.max_map_count设置为 262144 或更高;否则,Pod 重启后将无法启动。请参阅在节点上设置 vm.max_map_count。 -
所有集群都处于健康状态且为
RUNNING。 未处于RUNNING状态的集群要等到达到该状态后才会迁移。另请检查 OpenSearch 集群的健康状态是否为
green。 -
其他资源均为
CREATED。 例如:对你使用的上述其他类型重复此检查。
-
每个索引至少有一个从节点。 在滚动重启期间,没有从节点的索引会在承载该索引的节点重启时不可用。每个节点重启期间,集群健康状态预计为
yellow。 -
创建快照。 没有自动回滚机制(请参阅回滚)。升级前请为数据创建快照。
-
检查引擎版本。 迁移会保持
spec.general.version不变;operator 升级不会升级 OpenSearch。由于每个 Pod 都会重启,各集群当前运行版本的镜像必须仍可供节点使用。 -
检查未启用 TLS 的集群。 在 E1 3.0 中,spec 未配置 TLS(没有
spec.security.tls.transport或spec.security.tls.http)的集群会禁用 OpenSearch security plugin,并以未加密的 HTTP 提供服务,且不进行身份验证。如果此类集群依赖 security plugin,请在升级前解决此问题。 -
检查 Pod Security 设置。 重启后,OpenSearch 和 Dashboards Pod 将采用安装中所述的受限默认设置,包括 OpenSearch Pod 的
fsGroup: 1000。如果你设置了自己的podSecurityContext或securityContext,则仍以你的设置为准。 -
规划维护时段。 对于节点数量较多或数据量较大的节点池,滚动重启可能需要很长时间。
-
更新自动化配置。 创建或修改
opensearch.opster.io/v1资源的脚本、GitOps 仓库和 Helm chart 在升级后将会失败。请将其切换为opensearch.org/v1,并将标签选择器从opster.io/...切换为opensearch.org/...。
升级 operator
E1 3.0 在 opensearch-operator OLM 软件包中发布,且仅位于 stable channel,并标记为可替换任何 2.8.x 版本。operator 2.8.0 位于 alpha channel,该 channel 保持为 2.8.0,因此只有将 2.8.0 Subscription 切换到 stable 后,才会升级该 Subscription:
平台日志存储(平台日志功能的 OpenSearch 日志存储)在 alpha channel 上使用 operator 2.8.0,并创建 opensearch.opster.io/v1 集群,而 E1 会将这些集群设为只读。不要将平台日志存储使用的 Subscription 切换到 stable。
-
使用自动批准时,切换 channel 后,OLM 会立即升级 operator。
-
使用手动批准时,请在 Web 控制台中批准待处理的 InstallPlan,或使用 kubectl:
如果没有提供升级,请检查 Subscription 的 channel 是否为 stable,以及其 catalog source 是否提供 E1 3.0 bundle。OLM 只会提供 Subscription 所引用的 catalog source 和 channel 中的升级。
如果你的 2.8.0 Subscription 指向发布 E1 的 catalog source 之外的其他 catalog source,OLM 将不会提供升级,因为它不会在 catalog source 之间迁移 Subscription。编辑 Subscription,使 spec.source 和 spec.sourceNamespace 指向发布 E1 的 catalog source,并将 spec.channel 设置为 stable:
等待新的 ClusterServiceVersion 变为 Succeeded:
升级后
-
新资源存在。 每个旧资源在新 group 中都有对应资源:
对你使用的其他类型重复此操作,例如
opensearchusers.opensearch.org。 -
观察滚动重启。
预计每个节点池会有一个
StatefulSetRecreated事件,随后会有RollingRestart事件。 -
所有 Pod 重启后,集群将处于
RUNNING状态且运行正常:检查 OpenSearch 集群健康状态是否恢复为
green。 -
仅在新 group 上进行更改。 使用
kubectl edit opensearchclusters.opensearch.org <cluster-name>(对于其他每种类型,使用opensearch.orggroup)。尝试更改旧资源的 spec 时会被拒绝,并显示opensearch.opster.io/v1API group 已弃用的消息。
迁移后的旧资源
无需删除旧的 opensearch.opster.io/v1 资源。如果删除这些资源:
- 删除旧资源的操作会一直等待,直到其
opensearch.org/v1对应资源存在,因此该资源不会在迁移前被删除。 - 删除已迁移的
opensearch.org/v1资源也会删除相应的旧资源。
回滚
无法自动回滚到 operator 2.8.0:
- OLM 不会降级已安装的 operator。
- 迁移后,旧资源会保留迁移时的 spec。对
opensearch.org/v1资源所做的更改不会复制回旧资源。 - 节点池 StatefulSet 已使用
opensearch.org/...选择器标签重新创建。
如果升级失败,请收集 operator 日志和集群事件,保留数据卷,并在需要时从升级前创建的快照恢复。
故障排除
OpenSearch® 是 LF Projects, LLC 的注册商标。