Учебники

Кубернетес — Мониторинг

Мониторинг является одним из ключевых компонентов управления большими кластерами. Для этого у нас есть ряд инструментов.

Мониторинг с помощью Прометея

Это система мониторинга и оповещения. Он был построен в SoundCloud и был открыт в 2012 году. Он очень хорошо обрабатывает многомерные данные.

Прометей имеет несколько компонентов для участия в мониторинге —

  • Прометей — это основной компонент, который собирает и хранит данные.

  • Исследование узла Prometheus — получает матрицы уровня хоста и предоставляет их Prometheus.

  • Ranch-eye — это гакрокси и выставляет статистику cAdvisor Прометею.

  • Графана — Визуализация данных.

  • InfuxDB — база данных временных рядов, специально используемая для хранения данных из ранчо.

  • Prom-ranch-exporter — это простое приложение node.js, которое помогает запрашивать у сервера Rancher статус стека службы.

Прометей — это основной компонент, который собирает и хранит данные.

Исследование узла Prometheus — получает матрицы уровня хоста и предоставляет их Prometheus.

Ranch-eye — это гакрокси и выставляет статистику cAdvisor Прометею.

Графана — Визуализация данных.

InfuxDB — база данных временных рядов, специально используемая для хранения данных из ранчо.

Prom-ranch-exporter — это простое приложение node.js, которое помогает запрашивать у сервера Rancher статус стека службы.

Мониторинг с помощью Прометея

Sematext Docker Agent

Это современный Docker-ориентированный агент метрик, событий и сбора журналов. Он работает как крошечный контейнер на каждом хосте Docker и собирает журналы, метрики и события для всех узлов кластера и контейнеров. Он обнаруживает все контейнеры (один модуль может содержать несколько контейнеров), включая контейнеры для основных служб Kubernetes, если основные службы развернуты в контейнерах Docker. После его развертывания все журналы и метрики сразу доступны из коробки.

Развертывание агентов на узлах

Kubernetes предоставляет DeamonSets, который обеспечивает добавление модулей в кластер.

Настройка агента SemaText Docker

Это настраивается с помощью переменных среды.

  • Получите бесплатный аккаунт на apps.sematext.com , если у вас его еще нет.

  • Создайте приложение SPM типа «Docker», чтобы получить маркер приложения SPM. SPM App будет хранить ваши показатели производительности Kubernetes и события.

  • Создайте приложение Logsene для получения токена приложения Logsene. Logsene App будет хранить ваши логи Kubernetes.

  • Измените значения LOGSENE_TOKEN и SPM_TOKEN в определении DaemonSet, как показано ниже.

    • Загрузите последний шаблон sematext-agent-daemonset.yml (простой текст) (также показан ниже).

    • Храните его где-нибудь на диске.

    • Замените заполнители SPM_TOKEN и LOGSENE_TOKEN на токены SPM и приложения Logsene.

Получите бесплатный аккаунт на apps.sematext.com , если у вас его еще нет.

Создайте приложение SPM типа «Docker», чтобы получить маркер приложения SPM. SPM App будет хранить ваши показатели производительности Kubernetes и события.

Создайте приложение Logsene для получения токена приложения Logsene. Logsene App будет хранить ваши логи Kubernetes.

Измените значения LOGSENE_TOKEN и SPM_TOKEN в определении DaemonSet, как показано ниже.

Загрузите последний шаблон sematext-agent-daemonset.yml (простой текст) (также показан ниже).

Храните его где-нибудь на диске.

Замените заполнители SPM_TOKEN и LOGSENE_TOKEN на токены SPM и приложения Logsene.

Создать объект DaemonSet

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
   name: sematext-agent
spec:
   template:
      metadata:
         labels:
            app: sematext-agent
      spec:
         selector: {}
         dnsPolicy: "ClusterFirst"
         restartPolicy: "Always"
         containers:
         - name: sematext-agent
            image: sematext/sematext-agent-docker:latest
            imagePullPolicy: "Always"
            env:
            - name: SPM_TOKEN
               value: "REPLACE THIS WITH YOUR SPM TOKEN"
            - name: LOGSENE_TOKEN
               value: "REPLACE THIS WITH YOUR LOGSENE TOKEN"
            - name: KUBERNETES
               value: "1"
            volumeMounts:
               - mountPath: /var/run/docker.sock
                  name: docker-sock
               - mountPath: /etc/localtime
                  name: localtime
            volumes:
               - name: docker-sock
                  hostPath:
                     path: /var/run/docker.sock
               - name: localtime
                  hostPath:
                     path: /etc/localtime

Запуск агента доката Sematext с помощью kubectl

$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created

Kubernetes Log

Журналы контейнеров Kubernetes мало чем отличаются от журналов контейнеров Docker. Тем не менее, пользователи Kubernetes должны просматривать журналы для развернутых модулей. Следовательно, очень полезно иметь информацию, специфичную для Kubernetes, для поиска в журнале, например:

  • Пространство имен Kubernetes
  • Кубернетес под названием
  • Кубернетес контейнер имя
  • Название образа докера
  • Кубернетес UID

Использование стека ELK и LogSpout

Стек ELK включает Elasticsearch, Logstash и Kibana. Для сбора и пересылки журналов на платформу ведения журнала мы будем использовать LogSpout (хотя есть и другие варианты, такие как FluentD).

В следующем коде показано, как настроить кластер ELK в Kubernetes и создать службу для ElasticSearch.

apiVersion: v1
kind: Service
metadata:
   name: elasticsearch
   namespace: elk
   labels:
      component: elasticsearch
spec:
   type: LoadBalancer
   selector:
      component: elasticsearch
   ports:
   - name: http
      port: 9200
      protocol: TCP
   - name: transport
      port: 9300
      protocol: TCP

Создание контроллера репликации

apiVersion: v1
kind: ReplicationController
metadata:
   name: es
   namespace: elk
   labels:
      component: elasticsearch
spec:
   replicas: 1
   template:
      metadata:
         labels:
            component: elasticsearch
spec:
serviceAccount: elasticsearch
containers:
   - name: es
      securityContext:
      capabilities:
      add:
      - IPC_LOCK
   image: quay.io/pires/docker-elasticsearch-kubernetes:1.7.1-4
   env:
   - name: KUBERNETES_CA_CERTIFICATE_FILE
   value: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
   - name: NAMESPACE
   valueFrom:
      fieldRef:
         fieldPath: metadata.namespace
   - name: "CLUSTER_NAME"
      value: "myesdb"
   - name: "DISCOVERY_SERVICE"
      value: "elasticsearch"
   - name: NODE_MASTER
      value: "true"
   - name: NODE_DATA
      value: "true"
   - name: HTTP_ENABLE
      value: "true"
ports:
- containerPort: 9200
   name: http
   protocol: TCP
- containerPort: 9300
volumeMounts:
- mountPath: /data
   name: storage
volumes:
   - name: storage
      emptyDir: {}

Кибана URL

Для Kibana мы предоставляем URL-адрес Elasticsearch в качестве переменной среды.

- name: KIBANA_ES_URL
value: "http://elasticsearch.elk.svc.cluster.local:9200"
- name: KUBERNETES_TRUST_CERT
value: "true"

Пользовательский интерфейс Kibana будет доступен через контейнерный порт 5601 и соответствующую комбинацию хост / порт узла. Когда вы начнете, в Kibana не будет никаких данных (что ожидается, поскольку вы не выдвинули никаких данных).