如何在 YAML 文件中安装期间配置 Elasticsearch 索引生命周期管理 (ILM)



我想在 YAML 安装文件中的 kubernetes 集群中安装 ES 期间配置默认的索引生命周期管理 (ILM) 策略和索引模板,而不是在安装后调用 ES API。我该怎么做?

我在基于 YAML 文件的 kubernetes 集群中安装了 Elasticsearch。

以下工作查询有效。

PUT _ilm/policy/logstash_policy
{
"policy": {
"phases": {
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
PUT _template/logstash_template
{
"index_patterns": ["logstash-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "logstash_policy"
}
}

我想在安装后立即进行上述设置,而无需进行任何curl查询。

我会尝试回答你的两个问题。

索引模板

您可以在 elasticsearch yaml 中传递具有此配置的索引模板。例如:

setup.template:
name: "<chosen template name>-%{[agent.version]}"
pattern: "<chosen pattern name>-%{[agent.version]}-*"

查看 ES 文档,了解此 setup.template 的确切位置,您就可以开始了。

ILM 策略

完成此操作的方法是将包含 ilm 配置的 ilm-policy.json 文件获取到 pod 的/usr/share/filebeat/目录中。 在 YAML 安装文件中,您可以在配置中使用此行使其正常工作(我已经添加了我的整个 ilm 配置):

setup.ilm:
enabled: true
policy_name: "<policy name>"
rollover_alias: "<rollover alias name
policy_file: "ilm-policy.json"
pattern: "{now/d}-000001"

那么,如何获取文件呢?成分是 1 个包含 ilm-policy.json 的配置映射,以及守护程序集配置中的卷和卷挂载,用于将配置映射的内容挂载到 pod 的目录中。

注意:我使用 helm 将文件节拍部署到连接到弹性云的 AKS 集群 (v 1.15)。在您的情况下,存储 json 的应用程序文件夹可能会/usr/share/elasticsearch/ilm-policy.json

下面,您将看到类似{{ .Files.Get <...> }}的行,这是一个用于 helm 获取文件内容的模板函数。或者,您可以将文件内容直接复制到 configmap yaml 中,但在我看来,将文件分开可以使其更易于管理。

配置地图

确保您的 ilm-policy.json 位于您的部署可以访问的位置。这是配置映射的外观:

apiVersion: v1
kind: ConfigMap
metadata:
name: ilmpolicy-config
namespace: logging
labels:
k8s-app: filebeat
data:
ilm-policy.json: |-
{{ .Files.Get "ilm-policy.json" | indent 4 }}

守护进程

在 deamonSet 的 volumeMounts 部分,附加以下内容:

- name: ilm-configmap-volume
mountPath: /usr/share/filebeat/ilm-policy.json
subPath: ilm-policy.json
readOnly: true

并在卷部分附加以下内容:

- name: ilm-configmap-volume
configMap:
name: ilmpolicy-config

我不确定浏览器中的间距是否正确,但这应该会给出一个很好的主意。 我希望这适用于您的设置!祝你好运。

我已经使用答案为与EC一起运行的Packetbeat制定了自定义策略。

配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
name: packetbeat-ilmpolicy
labels:
k8s-app: packetbeat
data:
ilm-policy.json: |-
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_age": "1d"
}
}
},
"delete": {
"min_age": "1d",
"actions": {
"delete": {}
}
}
}
}
}

节拍配置:

apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
name: packetbeat
spec:
type: packetbeat
elasticsearchRef:
name: demo
kibanaRef:
name: demo
config:
pipeline: geoip-info
packetbeat.interfaces.device: any
packetbeat.protocols:
- type: dns
ports: [53]
include_authorities: true
include_additionals: true
- type: http
ports: [80, 8000, 8080, 9200, 9300]
- type: tls
ports: [443, 993, 995, 5223, 8443, 8883, 9243]
packetbeat.flows:
timeout: 30s
period: 30s
processors:
- add_cloud_metadata: {}
- add_host_metadata: {}
setup.ilm:
enabled: true
overwrite: true
policy_name: "packetbeat"
policy_file: /usr/share/packetbeat/ilm-policy.json
pattern: "{now/d}-000001"
daemonSet:
podTemplate:
spec:
terminationGracePeriodSeconds: 30
hostNetwork: true
automountServiceAccountToken: true # some older Beat versions are depending on this settings presence in k8s context
dnsPolicy: ClusterFirstWithHostNet
tolerations:
- operator: Exists
containers:
- name: packetbeat
securityContext:
runAsUser: 0
capabilities:
add:
- NET_ADMIN
volumeMounts:
- name: ilmpolicy-config
mountPath: /usr/share/packetbeat/ilm-policy.json
subPath: ilm-policy.json
readOnly: true
volumes:
- name: ilmpolicy-config
configMap:
name: packetbeat-ilmpolicy

Beat 配置中的重要部分是卷挂载,我们将配置映射挂载到容器中。

在此之后,我们可以引用配置中的文件setup.ilm.policy_file.

最新更新