我可以在Kubernetes Pod中运行Google Monitoring Agent吗?

时间:2016-03-14 13:48:31

标签: google-cloud-platform kubernetes google-kubernetes-engine stackdriver google-cloud-monitoring

似乎应该在 Kubernetes 集群的每个 Node (即每个计算实例,即每台计算机)上安装Google Monitoring Agent (powered by Stackdriver)

但是新的插件,如NginxRedisElasticSearch ...,需要这些代理知道这些服务的IP。这意味着kube-proxy正在运行并设置,这意味着在Pod上运行 Google Monitoring Agent

这两个冲突:一方面,代理监控整台机器,另一方面监控一台或多台机器上运行的服务。

这些Stackdriver插件可以在 Google容器引擎(GKE)/ Kubernetes群集上运行吗?

4 个答案:

答案 0 :(得分:3)

要监控每台计算机(内存,CPU,磁盘......),可以在每个节点上(即在GKE集群的每个计算实例上)安装代理。请注意,在重新创建的节点不能安装代理的意义上,它不能用于自动缩放。

要监控服务(请求数量,客户端连接......),可以在另一个容器中安装代理插件,以便例如Nginx Pod运行两个容器:

  • Nginx的
  • Google Monitoring Agent以及Nginx插件

注意:尚未完全测试。

答案 1 :(得分:2)

您可以在Dockerfile中安装StackDriver Agent。

我已经能够将这个工作用于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

答案 2 :(得分:1)

我曾试图在pod中使用Stackdriver容器来收集同一pod中有关Nginx / Uwsgi的统计信息。 我有一些可能不太有帮助的发现。仅供参考。

要创建堆栈驱动程序映像,您可以引用由Keto创建的docker文件。 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

在GKE / K8S部署yaml文件中,

apiVersion: extensions/v1beta1
kind: Deployment
...
      - name: stackdriver-agent
        image: gcr.io/<project_id>/stackdriver-agent:<your_version>
        command: ['/run.sh']

在我的测试中,我找到了

  • 它将根据[node_name]而不是[container_name]报告统计信息。
  • 它将收集许多对节点有意义的系统统计信息,但由于它位于一个pod中,因此它毫无意义。

好吧,我希望找到一些方法来收集我需要的pod和节点的统计数据,但我找不到一种简单的方法。我所做的是通过Google Python API库实现,但这需要花费太多时间。

答案 3 :(得分:0)

还有另一种使用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"]