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

jhkqcmku  于 2022-12-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(200)

我想在Kubernetes集群中安装ES时,在YAML安装文件中配置默认的Index Lifecycle Management (ILM)策略和索引模板,而不是在安装后调用ES API。我该如何做?
我有Elasticsearch安装在kubernetes集群基于YAML文件。
以下查询起作用。
第一个
我想在安装后有以上设置,而不做任何curl查询。

tyu7yeag

tyu7yeag1#

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

索引模板

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

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

检查ES文档以查看该setup.template的确切位置,然后就可以开始了。

胶片策略

要实现这一点,您需要将包含ILM配置的ilm-policy.json文件放到pod的/usr/share/filebeat/目录中,然后在您的配置文件中使用下面这一行命令来使其工作(我已经添加了我的整个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配置中的一个卷和volumeMount,用于将configmap的内容挂载到pod的目录中。

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

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

配置Map

确保部署可以访问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

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

rdrgkggo

rdrgkggo2#

我已经使用这个答案为运行ECK的Packetbeat设置了一个自定义策略。

配置Map:

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配置中的重要部分是卷装载,我们在其中将配置Map装载到容器中。
在此之后,我们可以使用setup.ilm.policy_file在config中引用该文件。

相关问题