一、ES operator概述

Elastic Cloud on Kubernetes (ECK),这是一款基于 Kubernetes Operator 模式的新型编排产品,用户可使用该产品在 Kubernetes 上配置、管理和运行 Elasticsearch 集群

ECK 使用 Kubernetes Operator 模式构建而成,需要安装在您的 Kubernetes 集群内,其功能绝不仅限于简化 Kubernetes 上 Elasticsearch 和 Kibana 的部署工作这一项任务。ECK 专注于简化所有后期运行工作,例如:

  • 管理和监测多个集群
  • 轻松升级至新的堆栈版本
  • 扩大或缩小集群容量
  • 更改集群配置
  • 动态调整本地存储的规模(包括 Elastic Local Volume(一款本地存储驱动器))
  • 备份安排

二、ES operator部署

2.1 使用yaml文件部署

1)使用以下命令安装 Elastic 的自定义资源定义

kubectl create -f https://download.elastic.co/downloads/eck/3.0.0/crds.yaml

创建资源时,您将看到类似以下内容的输出:

customresourcedefinition.apiextensions.k8s.io/agents.agent.k8s.elastic.co created
customresourcedefinition.apiextensions.k8s.io/apmservers.apm.k8s.elastic.co created
customresourcedefinition.apiextensions.k8s.io/beats.beat.k8s.elastic.co created
customresourcedefinition.apiextensions.k8s.io/elasticmapsservers.maps.k8s.elastic.co created
customresourcedefinition.apiextensions.k8s.io/elasticsearches.elasticsearch.k8s.elastic.co created
customresourcedefinition.apiextensions.k8s.io/enterprisesearches.enterprisesearch.k8s.elastic.co created
customresourcedefinition.apiextensions.k8s.io/kibanas.kibana.k8s.elastic.co created
customresourcedefinition.apiextensions.k8s.io/logstashes.logstash.k8s.elastic.co created

2)安装es operator 及 RBAC资源

root@k8s-master01:~# kubectl apply -f https://download.elastic.co/downloads/eck/3.0.0/operator.yaml
namespace/elastic-system created
serviceaccount/elastic-operator created
secret/elastic-webhook-server-cert created
configmap/elastic-operator created
clusterrole.rbac.authorization.k8s.io/elastic-operator created
clusterrole.rbac.authorization.k8s.io/elastic-operator-view created
clusterrole.rbac.authorization.k8s.io/elastic-operator-edit created
clusterrolebinding.rbac.authorization.k8s.io/elastic-operator created
service/elastic-webhook-server created
statefulset.apps/elastic-operator created
validatingwebhookconfiguration.admissionregistration.k8s.io/elastic-webhook.k8s.elastic.co created

ECK operator默认在elastic-system命名空间中运行,议将应用程序工作负载部署在单独的专用命名空间中,而不是elastic-systemdefault

3)检查安装详情

root@k8s-master01:~# kubectl get all -n elastic-system
NAME                     READY   STATUS    RESTARTS   AGE
pod/elastic-operator-0   1/1     Running   0          2m2s

NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/elastic-webhook-server   ClusterIP   10.244.57.197   <none>        443/TCP   2m2s

NAME                                READY   AGE
statefulset.apps/elastic-operator   1/1     2m2s

2.2 使用helm部署

Elastic Operator Helm chart 支持两种主要安装方式:

  • 集群范围(全局)安装——一步安装operator及其所有自定义资源(CRD)
  • 受限安装 —— 将 CRD 的安装与operator分开,允许多个operator员实例在同一个集群中共存,同时管理不同的命名空间

前置:添加elastic helm仓库

helm repo add elastic https://helm.elastic.co
helm repo update

1)集群范围安装

helm install elastic-operator elastic/eck-operator -n elastic-system --create-namespace

2)受限安装

受限模式(Restricted Mode) 是一种避免安装集群范围资源(ClusterScope)的安装方式,Operator 仅能管理一组预定义的命名空间(Namespaces)。

优点:

  • 更高的安全性和隔离性。
  • 适合多租户或权限受限的环境。
  • Operator 无法访问或修改集群范围资源(如 ClusterRoles、ClusterRoleBindings 等)。

1、安装CRDs

由于 CRD(CustomResourceDefinitions)是集群范围资源,必须由管理员安装

helm install elastic-operator-crds elastic/eck-operator-crds

2、安装 ECK Operator(任意有权限用户)

Operator 可由对目标命名空间有完全访问权限的用户安装。

helm install elastic-operator elastic/eck-operator \
  -n elastic-system \
  --create-namespace \
  --set=installCRDs=false \
  --set=managedNamespaces='{namespace-a, namespace-b}' \
  --set=createClusterScopedResources=false \
  --set=webhook.enabled=false \
  --set=config.validateStorageClass=false

参数说明:

参数 说明
installCRDs=false 不重复安装 CRD(已由管理员安装)
managedNamespaces='{namespace-a, namespace-b}' Operator 仅管理这些命名空间
createClusterScopedResources=false 不创建 ClusterRole、ClusterRoleBinding 等集群资源
webhook.enabled=false 禁用验证 Webhook(在受限模式下通常关闭)
config.validateStorageClass=false 禁用 StorageClass 验证逻辑(可选)

注意事项

1、Webhook 支持(可选)

  • 如果你希望在受限模式下启用验证 Webhook,请参考官方文档中的 Webhook namespace selectors 配置。
  • 验证 Webhook 的作用是确保提交的 Elasticsearch 或 Kibana CR 合法。

2、CRD 的更新

  • 每次升级 ECK Operator 时,CRD 需要由管理员重新应用
  • CRD 不受 Helm release 管理(除非你手动启用 installCRDs=true)。

三、ES operator配置

3.1 Elasticsearch配置

3.1.1 节点编排

1.NodeSets概述
  • NodeSet 是定义 Elasticsearch 集群拓扑结构的基本单位。
  • 每个 NodeSet 表示一组具有相同配置的 Elasticsearch 节点。
  • 每个 NodeSet 对应一个 Kubernetes StatefulSet

示例 YAML 配置:

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.16.1
  nodeSets:
  - name: master-nodes
    count: 3
    config:
      node.roles: ["master"]
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        accessModes: [ReadWriteOnce]
        resources:
          requests:
            storage: 10Gi
        storageClassName: standard
  - name: data-nodes
    count: 10
    config:
      node.roles: ["data"]
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        accessModes: [ReadWriteOnce]
        resources:
          requests:
            storage: 1000Gi
        storageClassName: standard

此集群共13个节点:3个master节点 + 10个data节点
支持 YAML Anchor 重用配置,提高维护性

2.集群升级与变更支持

ECK 支持平滑升级与调整:

支持的变更操作:

  • 新增节点:调整 NodeSet 中的 count
  • 调整资源:如增加 data-nodes 的内存限制
  • 变更角色配置:如合并 master 和 data 节点
  • 升级版本:修改 spec.version

升级时 ECK 保障:

  • 在节点移除前迁移数据(有前提限制)
  • 自动调整以下设置:
    • discovery.seed_hosts
    • cluster.initial_master_nodes
    • discovery.zen.minimum_master_nodes
    • _cluster/voting_config_exclusions
3.StatefulSet 编排机制
  • 每个 NodeSet 对应一个 StatefulSet
  • count 对应 StatefulSet 的副本数(replicas)
  • 支持通过 podTemplate 自定义 Pod 配置
  • 使用 OnDelete 策略手动控制升级时机
  • ECK 控制升级过程并确保 PV 复用
4.集群升级模式与操作行为
操作类型 ECK 行为简述
新增 NodeSet 创建对应 StatefulSet、配置 Secret 和 ConfigMap
增加 NodeSet 节点数 扩展 StatefulSet 的副本数
减少 NodeSet 节点数 迁移数据并缩容 StatefulSet;自动删除对应 PVC
删除 NodeSet 迁移数据并删除 StatefulSet
修改现有 NodeSet 配置 滚动重启升级 Pod(逐个进行)
重命名 NodeSet 创建新 NodeSet → 迁移数据 → 删除旧 NodeSet(升级期间节点数可能超标)
5.升级过程中的 Kubernetes 参数自动调整

升级过程中,ECK 会动态调整以下参数确保集群可用性:

  • discovery.seed_hosts
  • cluster.initial_master_nodes
  • discovery.zen.minimum_master_nodes
  • _cluster/voting_config_exclusions
6.已知限制

以下场景下集群升级或操作可能失败或不可用:

单节点集群:无高可用,升级时可能导致不可用

索引无副本:升级节点后,分片会暂时不可用

使用本地存储(local PV)

  • 如果升级后的 Pod 不能重新调度至原节点,会处于 Pending 状态

非 green 状态下升级限制

  • 集群必须处于 green 状态才能升级(例外见下方)
  • yellow 状态且:
    • 存在版本升级中
    • 无初始化/迁移中的 shard
    • 节点不持有最后副本,则可升级

以下情况忽略集群健康状态:

  • NodeSet 所有节点不可用(如配置错误)
  • 节点本身 unhealthy 且不在集群中

不支持降级版本

  • 例如不能从 7.3.0 降级为 7.2.0

缩容失败(需用户干预)

  • index 的副本数超过缩容后的数据节点数,数据无法迁移
  • 解决方案:
    • 手动调整副本数
    • 使用 auto_expand_replicas 自动调整副本数

3.1.2 持久化

在 ECK(Elastic Cloud on Kubernetes)中,为每个 Elasticsearch Pod 持久化数据,需使用 PersistentVolumeClaim(PVC)。默认情况下,ECK 会为每个 Pod 创建一个容量为 1Gi 的 PVC,以防止 Pod 意外删除导致的数据丢失。

1.自定义PVC

为了适配生产环境,建议手动定义 volumeClaimTemplates,包括所需的存储容量和(可选)指定 storageClass

spec:
  nodeSets:
  - name: default
    count: 3
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data   # 名称必须是 elasticsearch-data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 5Gi
        storageClassName: standard

重要提示

  • PVC 名称 必须是 elasticsearch-data,否则需要手动挂载 volume 到 /usr/share/elasticsearch/data
  • 默认数据路径为 /usr/share/elasticsearch/data
2.控制pvc删除行为

通过 volumeClaimDeletePolicy 控制在不同场景下 PVC 是否删除:

参数说明:

参数值 行为描述
DeleteOnScaledownAndClusterDeletion(默认) 缩容节点或删除整个集群时,同时删除 PVC
DeleteOnScaledownOnly 仅在缩容节点时删除 PVC,删除集群时保留 PVC,以便恢复

示例配置:

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: es
spec:
  version: 8.16.1
  volumeClaimDeletePolicy: DeleteOnScaledownOnly
  nodeSets:
  - name: default
    count: 3
3.EmptyDir

示例配置:

spec:
  nodeSets:
  - name: data
    count: 10
    podTemplate:
      spec:
        volumes:
        - name: elasticsearch-data
          emptyDir: {}

⚠️ 警告

  • emptyDir 是非持久存储,Pod 重建后数据会丢失
  • 仅用于测试或不关心数据保留的场景

3.1.3 虚拟内存

Elasticsearch 默认使用 内存映射(mmap) 方式访问索引,提高性能。

但大多数 Linux 系统默认的虚拟地址空间设置(vm.max_map_count)过低,容易导致 OOM(Out of Memory)异常

为避免此问题,生产环境必须将 vm.max_map_count 设置为 262144

配置虚拟内存有两种配置方式:

1)推荐设置(生产环境):

  • 设置 vm.max_map_count=262144
  • 不设置 node.store.allow_mmap: false

2)快速启动示例(测试环境):

config:
  node.store.allow_mmap: false
  • 禁用 mmap,避免系统设置不足导致异常。
  • 不推荐用于生产环境,因性能较差。

下面说一下配置vm.max_map_count=262144的两种方式

1.使用init Container

podTemplate:
  spec:
    initContainers:
    - name: sysctl
      securityContext:
        privileged: true
        runAsUser: 0
      command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']

要求集群允许运行 特权容器

适合轻量级设置,但不适用于很多受限的生产环境

2.使用DaemonSet

使用daemonset可以将所有宿主机vm.max_map_count配置都修改,当使用 securityContext.privileged: true 参数的时候,会将宿主机的 /proc挂载到容器内部

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: max-map-count-setter
  namespace: elastic-system
spec:
  selector:
    matchLabels:
      name: max-map-count-setter
  template:
    metadata:
      labels:
        name: max-map-count-setter
    spec:
      initContainers:
      - name: max-map-count-setter
        image: docker.io/bash:5.2.21
        securityContext:
          privileged: true
          runAsUser: 0
        command: ['/usr/local/bin/bash', '-e', '-c', 'echo 262144 > /proc/sys/vm/max_map_count']
        resources:
          limits:
            cpu: 100m
            memory: 32Mi
      containers:
      - name: sleep
        image: docker.io/bash:5.2.21
        command: ['sleep', 'infinity']

优点:

  • 所有节点统一设置
  • 比 initContainer 更适合大规模集群
  • 可以结合集群启动顺序进行初始化

3.1.4 由ECK管理的es设置

ECK(Elastic Cloud on Kubernetes)自动管理以下 Elasticsearch 设置,不建议手动修改这些项:

配置项 说明
cluster.name 集群名称,由 ECK 控制
discovery.seed_hosts 用于节点发现,由 ECK 设置
discovery.seed_providers 节点自动发现配置
discovery.zen.minimum_master_nodes 控制主节点最小数量(防止脑裂)
cluster.initial_master_nodes 初始化主节点列表
network.host 节点监听地址
network.publish_host 节点对外公布地址
path.data 数据路径(默认挂载路径)
path.logs 日志路径(由 Operator 控制)
xpack.security.authc.reserved_realm.enabled 内置用户认证设置
xpack.security.enabled 启用/禁用 X-Pack 安全功能
xpack.security.http.ssl.certificate HTTP 层证书
xpack.security.http.ssl.enabled 启用 HTTP TLS
xpack.security.http.ssl.key HTTP 层私钥
xpack.security.transport.ssl.enabled 启用节点间传输层 TLS
xpack.security.transport.ssl.verification_mode 节点验证模式

3.1.5 更新策略

ECK 的 updateStrategy 配置用于控制 集群更新操作中 Pod 的重建节奏,避免一次性修改太多节点,带来性能影响或资源耗尽。

常见场景包括:

  • 应用新配置重启节点。
  • 从一个 NodeSet 迁移到另一个 NodeSet。

配置示例

spec:
  updateStrategy:
    changeBudget:
      maxSurge: 3
      maxUnavailable: 1

参数说明

参数 含义 默认值
maxSurge 超过当前规格允许同时多启动多少个 Pod(适用于扩容/迁移) -1(不限制)
maxUnavailable 当前不可用 Pod 的最大数量(适用于滚动更新) 1

maxSurge

  • 控制 临时额外启动的 Pod 数量
  • 避免扩容时占满集群资源
  • 适用于节点配置变更或 NodeSet 替换

maxUnavailable

  • 控制最大不可用 Pod 数量
  • 保证集群始终有可用节点服务

参数取值说明

意义
null 使用默认值
非负数 明确限制(如:maxSurge: 2
负数 不设上限(如:maxSurge: -1

注意事项

maxSurge: 0 且 maxUnavailable: 0

  • 无法删除或新建 Pod,导致操作完全阻塞。

迁移节点数据时 maxSurge: 0

  • 无法创建新 Pod,也无法删除旧 Pod,形成死锁。

复杂配置下无法计算最佳更新顺序

  • ECK 可能会“卡住”,这时应手动提高 maxSurge

非高可用集群(<3个节点)升级时特殊处理

  • 操作会忽略 changeBudget,一次性更新所有节点,以避免无法形成主节点选举(quorum)。

日志提示

  • 如果更新受限,ECK 会在日志中输出提示,说明受限原因是 maxSurgemaxUnavailable 设置。

3.1.6 调度

ECK 提供丰富的调度能力,使你可以构建具备高可用性和资源感知的生产级 Elasticsearch 集群。

1.节点角色定义(Node Roles)

通过 node.roles 可以定义节点的职责:

node.roles: ["master"]
node.roles: ["data", "ingest"]
node.roles: ["data_hot", "ingest", "master"]
node.roles: ["data_warm"]

支持多角色组合配置
可使用 YAML Anchor 减少重复配置

2.pod亲和性配置

1)pod反亲和性调度(es默认的)

ECK 默认避免多个 ES Pod 被调度到同一主机:

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchLabels:
            elasticsearch.k8s.elastic.co/cluster-name: quickstart
        topologyKey: kubernetes.io/hostname

2)强制pod反亲和性调度

默认的亲和性是使用preferredDuringSchedulingIgnoredDuringExecution,它以尽力而为的方式运行,并且在没有其他可用主机的情况下不会阻止 Elasticsearch 节点在主机上被调度。在 3 台主机的 Kubernetes 集群上调度 4 节点 Elasticsearch 集群,将在同一主机上成功调度 2 个 Elasticsearch 节点。要强制每个主机只调度一个节点,需要指定为requiredDuringSchedulingIgnoredDuringExecution

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchLabels:
          elasticsearch.k8s.elastic.co/cluster-name: quickstart
      topologyKey: kubernetes.io/hostname

会强制每台主机只运行一个节点,集群主机数量不足时将导致调度失败。

3)显式取消节点反亲和性

要明确禁用默认行为,需要设置一个空的关联对象:

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.16.1
  nodeSets:
  - name: default
    count: 3
    podTemplate:
      spec:
        affinity: {}
3.node亲和性配置

1)节点选择器

要根据标签将调度限制到特定的一组 Kubernetes 节点,请使用NodeSelector。以下示例将 Elasticsearch Pod 调度到同时带有diskType: ssd和标记的 Kubernetes 节点上environment: production

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.16.1
  nodeSets:
  - name: default
    count: 3
    podTemplate:
      spec:
        nodeSelector:
          diskType: ssd
          environment: production

2)节点亲和性

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.16.1
  nodeSets:
  - name: default
    count: 3
    podTemplate:
      spec:
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: environment
                  operator: In
                  values:
                  - e2e
                  - production
            preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 1
                preference:
                  matchExpressions:
                  - key: diskType
                    operator: In
                    values:
                    - ssd

此示例限制 Elasticsearch 节点,使其仅调度到带有environment: e2e或标记的 Kubernetes 主机上environment: production。它优先使用带有 标记的节点diskType: ssd

3.1.7 就绪探测

ECK 默认使用 HTTP 请求进行就绪性检测,超时为 3 秒,可能在高负载下误判为不就绪。

自定义 Readiness Probe 示例:
此示例介绍如何将 API 调用超时时间增加到十秒,并将总体检查时间增加到十二秒:
spec:
  version: 8.16.1
  nodeSets:
  - name: default
    count: 1
    podTemplate:
      spec:
        containers:
        - name: elasticsearch
          readinessProbe:
            exec:
              command:
              - bash
              - -c
              - /mnt/elastic-internal/scripts/readiness-probe-script.sh
            failureThreshold: 3           # 连续失败次数
            initialDelaySeconds: 10       # 启动延迟
            periodSeconds: 12             # 探测周期
            successThreshold: 1           # 连续成功判定次数
            timeoutSeconds: 12            # 探测命令最大执行时间
          env:
          - name: READINESS_PROBE_TIMEOUT
            value: "10"                   # readiness 脚本中的 API 请求超时设置

注意:

  • timeoutSeconds: 表示探测脚本最长执行时间。
  • READINESS_PROBE_TIMEOUT: 设置脚本中 API 请求的 HTTP 超时时间。
  • 需要 重启 Pod 以应用新配置

3.1.8 安全上下文

Elasticsearch 8.8.0 起,ECK 为 Elasticsearch 容器、initContainer 和 sidecar 配置了如下默认安全上下文:

securityContext:
  allowPrivilegeEscalation: false
  capabilities:
    drop:
      - ALL
  privileged: false
  readOnlyRootFilesystem: true

说明:

  • allowPrivilegeEscalation: false:禁止容器进程通过 setuidsetgid 提升权限。
  • capabilities.drop: ALL:移除所有 Linux 特权能力。
  • privileged: false:容器不以特权模式运行。
  • readOnlyRootFilesystem: true只读根文件系统(仅在挂载 elasticsearch-data 目录时启用)。

早期版本(8.0.0 之前)中,Elasticsearch 默认以 root 身份启动,然后切换至 UID 为 1000elasticsearch 用户。

为安全起见,建议配置 非 root 用户 运行 Elasticsearch。实现方式如下:

示例配置:使用非 root 用户(UID: 1234)

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.16.1
  nodeSets:
  - name: default
    count: 3
    podTemplate:
      spec:
        securityContext:
          runAsUser: 1234
          fsGroup: 1234

参数说明

  • runAsUser: 1234:所有容器进程以 UID 1234 运行。
  • fsGroup: 1234:K8s 会将所有挂载卷的权限设置为该 group,并让容器进程也属于此 group,从而 确保数据目录可写

3.1.9 计算资源

计算资源配置

es配置
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.16.1
  nodeSets:
  - name: default
    count: 1
    podTemplate:
      spec:
        containers:
        - name: elasticsearch
          resources:
            requests:
              memory: 4Gi
              cpu: 8
            limits:
              memory: 4Gi

内存限制和JVM堆设置

从 Elasticsearch 7.11 开始,JVM 的堆大小会根据节点角色和可用内存自动计算。可用内存由Pod 模板中容器resources.limits.memory上设置的值定义elasticsearch,如果未设置限制,则由 Kubernetes 节点上的可用内存定义。

对于 7.11 之前的 Elasticsearch,或者如果您想覆盖较新版本中默认计算的堆大小,请将ES_JAVA_OPTS环境变量设置podTemplate为适当的值:

建议将 ES_JAVA_OPTS 设置为堆大小的 50% 左右:

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.16.1
  nodeSets:
  - name: default
    count: 1
    podTemplate:
      spec:
        containers:
        - name: elasticsearch
          env:
          - name: ES_JAVA_OPTS
            value: -Xms2g -Xmx2g 
          resources:
            requests:
              memory: 4Gi
              cpu: 8
            limits:
              memory: 4Gi

3.1.10 配置service类型

默认es创建出来的集群service是cluster类型,如果想要修改service类型可以应用以下配置

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: es-server
spec:
  version: 8.16.1
  http:
    service:
      spec:
        type: NodePort
  nodeSets:
...

3.2 kibana配置

3.1.1 连接到es集群

kibana可以连接到由ECK管理或者式不由ECK管理的Elasticsearch集群

1.es由ECK管理

将 Kibana 实例连接到由 ECK 管理的 Elasticsearch 集群非常简单:

apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 8.16.1
  count: 1
  elasticsearchRef:
    name: quickstart    # 关联的 Elasticsearch 资源名称,不是service地址
    namespace: default  # 可选,若与 Kibana 在同一命名空间可省略

特点:

  • elasticsearchRef 会自动建立安全连接。
  • Kibana 的配置文件由 ECK 自动管理(无需手动设置用户名/密码/证书)。
  • 支持自定义 serviceName 用于访问特定节点(如协调节点)
elasticsearchRef:
  name: quickstart
  serviceName: quickstart-es-coordinating-nodes
2.连接外部es

这种情况需要你 手动指定地址、凭证和 CA 证书

1)使用安全设置机制安全地存储在部署 Elasticsearch 集群下设置的外部 Elasticsearch 集群的默认elastic用户凭证:$PASSWORD

kubectl create secret generic kibana-elasticsearch-credentials --from-literal=elasticsearch.password=$PASSWORD
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: kibana-sample
spec:
  version: 8.16.1
  count: 1
  config:
    elasticsearch.hosts:
      - <ELASTICSEARCH_HOST_URL>:9200
    elasticsearch.username: elastic
  secureSettings:
    - secretName: kibana-elasticsearch-credentials

2)如果外部 Elasticsearch 集群使用自签名证书,需要创建Secret包含 CA 证书并将其挂载到 Kibana 容器,如下所示:

创建包含CA证书的secret
kubectl create secret generic elasticsearch-certs-secret \
  --from-file=ca.crt=</path/to/ca.crt>
配置挂载和引用路径
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: kibana-sample
spec:
  version: 8.16.1
  count: 1
  config:
    elasticsearch.hosts:
      - <ELASTICSEARCH_HOST_URL>-es-http:9200
    elasticsearch.username: elastic
    elasticsearch.ssl.certificateAuthorities: /etc/certs/ca.crt
  secureSettings:
    - secretName: kibana-elasticsearch-credentials # es密码
  podTemplate:
    spec:
      volumes:
        - name: elasticsearch-certs
          secret:
            secretName: elasticsearch-certs-secret # es CA证书
      containers:
        - name: kibana
          volumeMounts:
            - name: elasticsearch-certs
              mountPath: /etc/certs
              readOnly: true
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐