Можно ли запустить агент мониторинга Google в модуле Kubernetes?
Похоже, что агент мониторинга Google (работающий на Stackdriver) должен быть установлен на каждом узле (т.е. на каждом вычислительном экземпляре, т.е. на каждой машине) кластера Kubernetes.
Однако новым плагинам, таким как Nginx, Redis, ElasticSearch..., нужны эти агенты, чтобы знать IP этих сервисов. Это значит иметь kube-proxy
запустить и настроить, что должно означать запуск этого агента мониторинга Google на модуле.
Эти два конфликта: с одной стороны, агент контролирует всю машину, с другой стороны, он контролирует службы, работающие на одной или нескольких машинах.
Могут ли эти плагины Stackdriver работать в кластере Google Container Engine (GKE) / Kubernetes?
4 ответа
Для мониторинга каждой машины (памяти, процессора, диска...) можно установить агент на каждом узле (т. Е. На каждом вычислительном экземпляре вашего кластера GKE). Обратите внимание, что он не будет работать с автоматическим масштабированием в том смысле, что во вновь созданных узлах не будет установлен агент.
Для мониторинга сервисов (количество запросов / с, клиентское соединение...) возможно установить плагин агента в другом контейнере, чтобы, например, Nginx Pod запускал два контейнера:
- Nginx
- Агент мониторинга Google вместе с плагином Nginx
Примечание: еще не полностью протестировано.
Вы можете установить StackDriver Agent в свой Dockerfile.
Я смог заставить это работать для контейнера couchdb следующим образом:
FROM klaemo/couchdb
RUN apt-get update
RUN apt-get install curl lsb-release -y
RUN curl -O https://repo.stackdriver.com/stack-install.sh
RUN apt-get install libyajl2 -y
COPY couchdb.conf /opt/stackdriver/collectd/etc/collectd.d/couchdb.conf
CMD bash stack-install.sh --write-gcm && service stackdriver-agent restart && couchdb
Я пытался использовать контейнер Stackdriver в модуле для сбора статистики о Nginx/Uwsgi в одном модуле. У меня были некоторые выводы, которые могут быть не очень полезны. Просто для справки.
Чтобы создать образ драйвера стека, вы можете ссылаться на файл докера, созданный Keto. https://hub.docker.com/r/keto/stackdriver/~/dockerfile/
FROM centos:centos7
MAINTAINER Mikael Keto
# add stackdriver repository
RUN curl -o /etc/yum.repos.d/stackdriver.repo https://repo.stackdriver.com/stackdriver-el7.repo
# install stackdriver
RUN yum -y install initscripts stackdriver-agent && yum clean all
RUN mkdir -p /var/lock/subsys; exit 0
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
Run.sh выглядит как ниже,
#!/usr/bin/env bash
/opt/stackdriver/stack-config --write-gcm --no-start
/etc/init.d/stackdriver-agent start
while true; do
sleep 60
agent_pid=$(cat /var/run/stackdriver-agent.pid 2>/dev/null)
ps -p $agent_pid > /dev/null 2>&1
if [ $? != 0 ]; then
echo "Stackdriver agent pid not found!"
break;
fi
done
В файле yaml развертывания GKE/K8S
apiVersion: extensions/v1beta1
kind: Deployment
...
- name: stackdriver-agent
image: gcr.io/<project_id>/stackdriver-agent:<your_version>
command: ['/run.sh']
В моем тесте я нашел
- Он будет сообщать статистику на основе [имя_узла] вместо [имя_контейнера].
- Он будет собирать много системных статистических данных, которые имеют значение для узла, но поскольку он находится в модуле, это совершенно бессмысленно.
Что ж, я надеюсь найти какой-то способ сбора статистики по нужным мне стручкам и узлам, но я не нашел простого способа сделать это. Я сделал это с помощью библиотеки API Google Python, но это занимает слишком много времени.
Есть другой способ использовать Dockerfile. При создании образа Docker предварительно установите необходимые библиотеки для установки агента stackdriver-agent.
FROM mongo
RUN apt-get update && apt-get install -y curl lsb-release
# COPY credential
COPY gcloud-credential.json /etc/google/auth/application_default_credentials.json
ENV GOOGLE_APPLICATION_CREDENTIALS "/etc/google/auth/application_default_credentials.json"
# download Stackdriver Agent installer
RUN curl -O https://repo.stackdriver.com/stack-install.sh
RUN chmod +x /stack-install.sh
# COPY stackdriver mongodb plugin
COPY mongodb.conf /opt/stackdriver/collectd/etc/collectd.d/mongodb.conf
Затем установите агент, используя жизненный цикл POD.
spec:
containers:
- image: your_mongo_image
name: my-mongo
ports:
- containerPort: 27017
lifecycle:
postStart:
exec:
command: ["/stack-install.sh", "--write-gcm"]