首页 文章

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

提问于
浏览
8

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

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

这两个冲突:一方面,代理监视整个计算机,另一方面监视一台或多台计算机上运行的服务 .

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

4 回答

  • 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
    
  • 3

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

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

    • Nginx

    • Google Monitoring Agent以及Nginx插件

    注意:尚未完全测试 .

  • 0

    我曾尝试在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库来实现,但这需要花费太多时间 .

  • 1

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

相关问题