راه اندازی elasticsearch در kubernetes

الاستیک سرچ (Elasticsearch)، یک موتور جستجوی اوپن سورس است که توسط شرکت آپاچی و بر اساس Apache Lucene ساخته شده است. مبنای الاستیک سرچ، معماری Rest است.


برای راه اندازی الستیک سرچ در kubernetes از راه های مختلفی میشه استفاده کرد از جمله eck operator, helm و ... که در این مقاله از روش eck operator استفاده شده.

حالا eck operator چیه manager الستیک سرچ هست که برای راه اندازی الستیک مورد استفاده قرار می گیره یعنی ما فقط eck را رو تو یک namespace بالا می یاریم و کانفیگ الستیک رو براش ارسال می کنیم و شروع به راه اندازی الستیک می کنه.


برای راه اندازی eck مراحل زیر رو طی می کنیم:

  • با استفاده از دستور زیر برای کوبرنتیز custom resource های مرتبط با الستیک ایجاد می شود:
kubectl create -f https://download.elastic.co/downloads/eck/2.2.0/crds.yaml
  • بعد نوبت نصب operator فرا می رسد:
kubectl apply -f https://download.elastic.co/downloads/eck/2.2.0/operator.yaml

که namespace پیش فرض آن elastic-system می باشد

حالا فقط کافیه به صورت زیر کانفیگ الستیک رو با استفاده از kubectl به سمت کوبرنتیز ارسال کنیم

cat <<EOF | kubectl apply -n logs -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: eck
spec:
  version: 7.16.2
  nodeSets:
    - name: master
      count: 1
      volumeClaimTemplates:
      - metadata:
          name: elasticsearch-data 
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 5Gi
          storageClassName: hostpath
      podTemplate:
        spec:
          nodeSelector:
            type: tools
          containers:
            - name: elasticsearch
              readinessProbe:
                exec:
                  command:
                  - bash
                  - -c
                  - /mnt/elastic-internal/scripts/readiness-probe-script.sh
                failureThreshold: 3
                initialDelaySeconds: 60
                periodSeconds: 12
                successThreshold: 1
                timeoutSeconds: 60
              env:
              - name: READINESS_PROBE_PROTOCOL
                value: &quothttp&quot
      config:
        node.roles: [&quotmaster&quot]
        xpack.security.enabled: true
        node.store.allow_mmap: false
        xpack.security.http.ssl.enabled: false

    - name: data
      count: 1
      volumeClaimTemplates:
      - metadata:
          name: elasticsearch-data 
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 100Gi
          storageClassName: openebs-hostpath
      podTemplate:
        spec:
          nodeSelector:
            type: tools
          containers:
            - name: elasticsearch
              readinessProbe:
                exec:
                  command:
                  - bash
                  - -c
                  - /mnt/elastic-internal/scripts/readiness-probe-script.sh
                failureThreshold: 3
                initialDelaySeconds: 60
                periodSeconds: 12
                successThreshold: 1
                timeoutSeconds: 60
              env:
              - name: READINESS_PROBE_PROTOCOL
                value: &quothttp&quot
      config:
        node.roles: [&quotdata&quot]
        xpack.security.enabled: true
        node.store.allow_mmap: false
        xpack.security.http.ssl.enabled: false

EOF

در کانفیک بالا تو قسمت nodeset تعداد و نوع pod ها مشخص شده هستند که الان فقط pod های master و data هر کدام یکی ساخته می شوند

از بخش های مهم تنظیمات بالا به موارد زیر باید توجه بشه:

  • -n logs

برای مشخص کردن namespace ای هست که الستیک در آن بالا آورده می شود به باید از قبل در کوبرنتیز ساخته شود

  • storageClassName

اگر از storageclass استفاده نمی شود باید اسم pv و pvc به جای آن داده شود

  • nodeSelector

این قسمت برای بالا آوردن pod در node خاصی با استفاده از label موجود در node هست که اگر نیازی نیست حذف شود

  • xpack.security.enabled

با فعال کردن این گزینه بخش xpack راه اندازی می شود که باعث اضافه کردن user و pass به لاگین الستیک می شود که user و pass در یک secret ذخیره شده می باشد

علاوه بر pod های بالا می توان انواع مختلفی مثل ingest, ml, transform و ... به کلاستر الستیک اضافه کرد.