Мониторинг является одним из ключевых компонентов управления большими кластерами. Для этого у нас есть ряд инструментов.
Мониторинг с помощью Прометея
Это система мониторинга и оповещения. Он был построен в 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 не будет никаких данных (что ожидается, поскольку вы не выдвинули никаких данных).