如何在YAML文件中的安装过程中配置Elasticsearch Index Lifecycle Management(ILM)

时间:2019-05-31 10:30:37

标签: elasticsearch kubernetes configuration

我想在YAML安装文件中的Kubernetes群集中配置默认​​的Index Lifecycle Management (ILM)策略和索引模板,而不是在Kubernetes集群中安装ES,而不是在安装后调用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查询。

1 个答案:

答案 0 :(得分:1)

我会尽力回答您的两个问题。

索引模板

您可以在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的configmap,以及daemonset配置中的一个volume和volumeMount,用于将configmap的内容安装到pod的目录中。

注意::我使用掌舵将文件信号部署到AKS集群(v 1.15),该集群连接到Elastic Cloud。在您的情况下,用于存储json的应用程序文件夹可能为/usr/share/elasticsearch/ilm-policy.json

下面,您将看到类似{{ .Files.Get <...> }}的行,这是一个模板函数,用于掌控获取文件内容。另外,您可以将文件内容直接复制到configmap yaml中,但是我认为将文件分开可以更好地进行管理。

configMap

确保您的ilm-policy.json可以被部署访问。这是configmap的外观:

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

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