安装

Alauda Data Services Search Engine E1 通过平台的 OperatorHub,使用 Operator Lifecycle Manager (OLM) 安装。

先决条件

  • 集群版本为 ACP 4.1、4.2、4.3 或 4.4,节点架构为 amd64 或 arm64,网络配置为 IPv4、IPv6 或双栈。
  • 在所有可能运行 OpenSearch pod 的节点上,内核设置 vm.max_map_count 的值为 262144 或更高。请参阅在节点上设置 vm.max_map_count。
  • 用于存储 OpenSearch 数据卷的 StorageClass。请参阅存储。

安装信息

项目值
OLM 软件包opensearch-operator
通道stable
安装模式仅 AllNamespaces(operator 监视所有命名空间)
建议的命名空间opensearch-system

该 operator 为其自定义资源提供验证准入 Webhook。OLM 会配置 Webhook 服务证书;无需安装 cert-manager。

在 Web 控制台中安装

  1. 在 ACP Web 控制台中,打开 Marketplace 中的 OperatorHub。
  2. 找到 Alauda Data Services Search Engine E1 并打开。
  3. 单击 安装。
  4. 选择 stable 通道和 AllNamespaces 安装模式。除非有理由使用其他命名空间,否则请使用建议的命名空间 opensearch-system。
  5. 确认安装,并等待 operator 状态变为 Succeeded。

如果列表中没有 Alauda Data Services Search Engine E1,请联系平台管理员,让其在平台 Marketplace 中提供此软件包。

使用 CLI 安装

如果要从命令行安装,请创建命名空间、一个适用于所有命名空间的 OperatorGroup,以及一个 Subscription。请将 <catalog-source> 和 <catalog-namespace> 替换为平台上提供 opensearch-operator 软件包的 catalog source。

apiVersion: v1
kind: Namespace
metadata:
  name: opensearch-system
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: opensearch-operator
  namespace: opensearch-system
spec: {}
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: opensearch-operator
  namespace: opensearch-system
spec:
  name: opensearch-operator
  channel: stable
  source: <catalog-source>
  sourceNamespace: <catalog-namespace>
  installPlanApproval: Manual

spec 为空的 OperatorGroup 会选择所有命名空间,这与该 operator 支持的唯一安装模式一致。

对于 installPlanApproval: Manual,请批准 OLM 创建的 InstallPlan:

kubectl -n opensearch-system get installplan
kubectl -n opensearch-system patch installplan <installplan-name> \
  --type merge -p '{"spec":{"approved":true}}'

检查 operator 是否正在运行:

kubectl -n opensearch-system get csv
kubectl -n opensearch-system get pods

ClusterServiceVersion opensearch-operator.v3.0.0-acp.3 必须达到 Succeeded 阶段。

已创建 Pod 的 Pod Security

operator Pod 本身以非 root 用户运行,使用 RuntimeDefault seccomp 配置文件,不允许权限提升,删除所有 capabilities,并使用只读根文件系统。

对于它创建的 Pod(OpenSearch 节点池、引导 Pod、安全配置作业和 OpenSearch Dashboards),当您的 OpenSearchCluster 未设置以下字段时,operator 会填充相应的默认值:

级别字段默认值
PodrunAsNonRoottrue
PodrunAsUser1000
PodseccompProfile.typeRuntimeDefault
Pod(仅限 OpenSearch Pod)fsGroup1000
容器allowPrivilegeEscalationfalse
容器capabilities.drop["ALL"]

使用这些默认值时,Pod 与 Kubernetes restricted Pod Security 级别兼容,因此您可以在标记为 pod-security.kubernetes.io/enforce=restricted 的命名空间中创建集群。

您自行设置的值始终按字段优先:

  • OpenSearch Pod 的 spec.general.podSecurityContext 和 spec.general.securityContext。
  • OpenSearch Dashboards 的 spec.dashboards.podSecurityContext 和 spec.dashboards.securityContext。

如果您设置的值不被 restricted 级别允许(例如 runAsUser: 0、privileged: true、添加的 capabilities 或 hostPath 持久性),Pod 将不再与 restricted 兼容,并会在强制执行该级别的命名空间中被拒绝。

上游 operator 会以 root 身份运行 init 容器,以更改数据目录的所有者。E1 不会运行该容器。相反,数据卷通过 Pod fsGroup(默认为 1000)变为可写。如果您使用不同的用户或组运行 OpenSearch,请相应设置 spec.general.podSecurityContext.fsGroup。

在节点上设置 vm.max_map_count

OpenSearch 要求 Linux 内核设置 vm.max_map_count 至少为 262144。上游 operator 会通过特权 init 容器设置该值。无论 spec.general.setVMMaxMapCount 的值是什么,E1 都不会运行该容器,因为 restricted Pod Security 级别不允许特权容器。您必须在创建集群之前在节点上设置该值。

检查当前值

在节点上:

sysctl vm.max_map_count

或者,在装有 kubectl 的工作站上,使用节点调试 Pod。替换 <node-name>,并使用任何包含 sysctl 且集群可用的小型映像:

kubectl debug node/<node-name> -it --image=<image> -- sysctl vm.max_map_count

检查后删除调试 Pod(kubectl get pods 会显示带有 node-debugger- 前缀的 Pod)。

要列出所有节点上的值,请使用您常用的节点管理工具,在每个节点上运行该命令。

持久设置该值

在每个可运行 OpenSearch Pod 的节点上,以 root 身份运行:

echo 'vm.max_map_count=262144' > /etc/sysctl.d/99-opensearch.conf
sysctl --system
sysctl vm.max_map_count

如果您使用节点选择器、亲和性或容忍度,将 OpenSearch 调度到专用节点上,则只需配置这些节点。之后添加到集群的节点也需要进行相同设置。

如果该值过低,OpenSearch 节点将无法通过启动引导检查,Pod 会反复重启。Pod 日志中会包含类似 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 的消息。

卸载

请按以下顺序卸载:先删除集群,然后删除 operator,最后删除自定义资源定义(CRD)。

  1. 删除所有命名空间中的每个 OpenSearchCluster 及相关自定义资源。请先列出它们:

    kubectl get opensearchclusters.opensearch.org -A
    kubectl -n <namespace> delete opensearchclusters.opensearch.org <cluster-name>

    数据 PVC 会保留。如果不再需要这些数据,也请删除它们。请参阅 存储。

    如果集群是从 operator 2.8.0 升级而来,operator 还会删除其 opensearch.opster.io 副本。继续操作前,请等待以下命令不再列出任何内容,因为删除 operator 后将无法删除这些副本:

    kubectl get opensearchclusters.opensearch.opster.io -A
  2. 删除 operator。在 Web 控制台中,从 OperatorHub 卸载 Alauda Data Services Search Engine E1。使用 kubectl 时,请删除 Subscription 和 ClusterServiceVersion:

    kubectl -n opensearch-system delete subscription opensearch-operator
    kubectl -n opensearch-system delete csv opensearch-operator.v3.0.0-acp.3
  3. 可选:删除 CRD。卸载 operator 时,OLM 不会删除这些 CRD。删除 CRD 会删除集群中该类型的所有剩余资源,因此只有在完成步骤 1 后才能执行此操作。

    kubectl get crd -o name | grep -E 'opensearch\.org|opensearch\.opster\.io'

    使用 kubectl delete 删除命令列出的 CRD。

后续步骤


OpenSearch® 是 LF Projects, LLC 的注册商标。