9

Google Monitoring Agent(由Stackdriver 提供支持)似乎应该安装在Kubernetes集群的每个节点(即每个计算实例,即每台机器)上。

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

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

这些 Stackdriver 插件可以在Google Container Engine (GKE) / Kubernetes 集群上运行吗?

4

4 回答 4

3

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

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

  • Nginx
  • 谷歌监控代理和 Nginx 插件

注意:尚未完全测试。

于 2016-03-21T10:51:34.093 回答
1

您可以在 Dockerfile 中安装 StackDriver 代理。

我已经能够让这个为 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
于 2016-07-07T22:19:35.800 回答
1

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

要创建 stackdriver 映像,您可以参考 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 库来做这件事,但这需要太多时间。

于 2017-02-22T07:42:53.507 回答
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"]
于 2017-02-21T09:25:42.127 回答