Elastic Cloud on Kubernetes hay còn viết tắt là ECK là một operator được viết và phát triển bởi Elastic nhằm mục đích phục vụ cho việc cài đặt, điều khiển và cấu hình các cluster Elasticsearch trên 1 cluster Kubernetes.

Có nhiều cách cài cluster Elasticsearch lên kubernetes như là sử dụng helm chart cũng do elastic cung cấp hoặc có thể tự viết helm chart riêng theo ý muốn rồi cài đặt hoặc đơn giản hơn là làm 1 bộ file manifest k8s rồi cứ kubectl apply nó là xong.

Ngoài ra không thích thì vẫn có thể cài đặt trên các Instance thông thường như truyền thống. Vậy ECK có lợi ích gì mà mình giới thiệu nó?

 

Lợi ích

Về việc sử dụng manifest truyền thống thậm chí kết hợp kustomization hoặc helm cài lện k8s để quản lý thì nó vẫn rất khó khăn nếu sau này phình ra.

Bạn sẽ đối diện với các vấn đề sau nếu dùng cách truyền thống:

  • Dựng cluster ES trong 1 nốt nhạc
  • Nếu dự án hoặc công ty có nhiều dự án cần nhiều clusters Elasticsearch thì quản lý như thế nào?
  • Cấu hình nâng cao như chia nodeset, thay đổi type disk của node elasticsearch như thế nào?
  • Sử dụng các tính năng nâng cao khác như apm, heatbeat,…

Những liệt kê trên thì ECK có thể giải quyết được một cách dễ dàng

Cài đặt

Có 2 loại hình cài đặt

  • Sử dụng manifest và tiến hành kubectl apply -f
  • Cài đặt qua helm chart (thường hay dùng cách này để dể quản lý và upgrade version)

1. Cài đặt sử dụng manifest

Đầu tiên ta cài đặt bộ CRDs cho nó để define các object cho api server của kubernetes

kubectl create -f https://download.elastic.co/downloads/eck/2.4.0/crds.yaml

Tiến hành cài đặt ECK

kubectl apply -f https://download.elastic.co/downloads/eck/2.4.0/operator.yaml

2. Cài đặt sử dụng Helm

Yêu cầu phải cài đặt command line helm

Đầu tiên add helm repo vào local trên máy

helm repo add elastic https://helm.elastic.co
helm repo update

Sau đó tiến hành cài đặt

helm install elastic-operator elastic/eck-operator -n elastic-system --create-namespace

Ở đây chỉ cài đặt ECK với cấu hình cơ bản theo cluster wide mode. Điều này có nghĩa ECK sẽ có thể tạo các cluster elasticsearch ở toàn bộ namespaces của kubernetes

 

Sử dụng

Sử dụng thì cũng đơn giản thôi và trên trang chủ của Elastic cũng có nói tới

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: elasticsearch-logs
  namespace: elastic-system
spec:
  version: 7.13.4
  volumeClaimDeletePolicy: DeleteOnScaledownOnly
  nodeSets:
  - name: logs-disk-gp3-xfs
    count: 3
    config:
      node.store.allow_mmap: false
    podTemplate:
      spec:
        initContainers:
        - name: sysctl
          securityContext:
            privileged: true
          command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']
        containers:
        - name: elasticsearch
          # specify resource limits and requests
          resources:
            requests:
              memory: 4Gi
              cpu: 1
            limits:
              memory: 8Gi
              cpu: 2
          env:
          - name: ES_JAVA_OPTS
            value: "-Xms2g -Xmx2g"
        nodeSelector:
          alpha.eksctl.io/nodegroup-name: spotsystemnodes
        tolerations:
          - key: "systemnodes"
            operator: "Exists"
            effect: "NoSchedule"
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 100Gi
        storageClassName: gp3-xfs
  http:
    tls:
      selfSignedCertificate:
        disabled: true

Như trên là config Yaml để tạo được 1 cluster ES gồm 3 nodes thuộc nodeSet của ES có tên là logs-gp3-xfs

ECK cũng hỗ trợ tốt trong việc change type storageclass hoặc tăng size disk.

  • Khi tăng size disk thì chỉ cần update lại chỗ storage rồi tiến hành kubectl apply -f lại là được
  • Còn đổi storageclass thì buộc tạo nodeSet mới rồi rollout dần nodeSet cũ

Trong cấu hình trên chú ý: volumeClaimDeletePolicy: DeleteOnScaledownOnly config này giúp cho ECK sẽ không xóa PVC khi mà mình destroy cluster, nó chỉ delete disk khi nhận tính hiệu scaledown

Ngoài ra còn nhiều config khác nữa các bạn tham khảo trên documents trong quá trình sử dụng nhé

Tham Khảo

https://www.elastic.co/guide/en/cloud-on-k8s/current/index.html

 

Rate this post

LEAVE A REPLY

Please enter your comment!
Please enter your name here