Wednesday, September 23, 2020

Разворачивание Elastic Cloud on Kubernetes

 Привет всем. 

 ЕСК - это сбор, анализ и корреляция журналов, метрик и трассировок из контейнеров, приложений и служб, работающих поверх Docker и Kubernetes, — все это в одном месте.

Установим ЕСК на работающий кластер кубернетеса. В моем примере кубернетес работает под управлением Rancher'a. 

Elastic Cloud on Kubernetes (ECK) построен на шаблоне оператора Kubernetes.
Оператор ECK расширяет базовые возможности оркестрации Kubernetes для поддержки, настройки и управления Elasticsearch, Kibana и APM-сервером.

Операторы - программные расширения Kubernetes, которые используют пользовательские ресурсы для управления приложениями и их компонентами. Другими словами -это метод упаковки, развертывания и управления приложением Kubernetes.

Для установки оператора необходим работающий кластер Kubernetes с поддержкой RBAC и наличие командной утилиты kubectl, подключенной к кластеру.
Установка:
kubectl apply -f https://download.elastic.co/downloads/eck/1.2.1/all-in-one.yaml

Elasticsearch

С помощью kubectl выполним команду
cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 7.9.1
  nodeSets:
  - name: default
    count: 1
    config:
      node.master: true
      node.data: true
      node.ingest: true
      node.store.allow_mmap: false
EOF

Kibana

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 7.9.1
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

Для примера созданы 2 модуля, посмотрим их в ранчере.

 


Для доступа из вне к кибане и эластику пробросим порты:


Готово! Можно подключать агенты сбора логов с приложений.

Ошибки во время установки

1. После установки модуля с кибаной появилась такая ошибка:

Readiness probe failed: Get https://10.41.1.44:5601/login: dial tcp : connect: connection refused

Смысл ее в том, что контейнер не успел задеплоиться из-за  HealthCkeck. Поэтому пришлось его отключить через настройки Workload модуля. 

Кубер включает в себя 2 типа проб(probes): liveness checks и readiness checks.

  • Liveness Check: Проверяет, работает ли отслеживаемый контейнер. Если проба сообщает о сбое, Kubernetes убивает модуль, а затем перезапускает его в соответствии с политикой перезапуска развертывания (deployment restart policy).
  • Readiness Check: Проверяет, готов ли контейнер принимать и обслуживать запросы. Если проба сообщает об отказе, модуль изолируется, пока не "починится".

2. Подключение к Elastic'у не выполняется по указаному порту. В логах такая ошибка:

Unable to revive connection: https://quickstart-es-http.default.svc:9200/

Проверьте протокол, скорей всего настроено на https, а не http

3. Для тестов можно отключить TLS. Требуется обновить конфиг эластика.

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 7.9.1
  http:
    tls:
      selfSignedCertificate:
        disabled: true
  nodeSets:
  - name: default
    count: 1
    config:
      node.master: true
      node.data: true
      node.ingest: true
      node.store.allow_mmap: false
EOF

Успехов!