Elasticsearch Operator 在 Kubernetes 中的部署与运维全指南
一、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-system或default。
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_hostscluster.initial_master_nodesdiscovery.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_hostscluster.initial_master_nodesdiscovery.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 会在日志中输出提示,说明受限原因是
maxSurge或maxUnavailable设置。
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:禁止容器进程通过setuid、setgid提升权限。capabilities.drop: ALL:移除所有 Linux 特权能力。privileged: false:容器不以特权模式运行。readOnlyRootFilesystem: true:只读根文件系统(仅在挂载elasticsearch-data目录时启用)。
早期版本(8.0.0 之前)中,Elasticsearch 默认以 root 身份启动,然后切换至 UID 为 1000 的 elasticsearch 用户。
为安全起见,建议配置 非 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
更多推荐
所有评论(0)