Google cloud platform 我可以在Kubernetes吊舱内运行Google监控代理吗?
似乎应该在Kubernetes集群的每个节点(即每个计算实例,即每台机器)上安装 然而,新的插件,比如,…,需要这些代理知道这些服务的IP。这意味着运行和设置Google cloud platform 我可以在Kubernetes吊舱内运行Google监控代理吗?,google-cloud-platform,kubernetes,google-kubernetes-engine,stackdriver,google-cloud-monitoring,Google Cloud Platform,Kubernetes,Google Kubernetes Engine,Stackdriver,Google Cloud Monitoring,似乎应该在Kubernetes集群的每个节点(即每个计算实例,即每台机器)上安装 然而,新的插件,比如,…,需要这些代理知道这些服务的IP。这意味着运行和设置kube代理,这意味着在Pod上运行Google监控代理 这两个冲突:一方面代理监视整个机器,另一方面它监视一台或多台机器上运行的服务 这些Stackdriver插件能否在Google容器引擎(GKE)/Kubernetes群集上工作?为了监视每台机器(内存、CPU、磁盘…),可以在每个节点(即GKE群集的每个计算实例)上安装代理。请注意,
kube代理
,这意味着在Pod上运行Google监控代理
这两个冲突:一方面代理监视整个机器,另一方面它监视一台或多台机器上运行的服务
这些Stackdriver插件能否在Google容器引擎(GKE)/Kubernetes群集上工作?为了监视每台机器(内存、CPU、磁盘…),可以在每个节点(即GKE群集的每个计算实例)上安装代理。请注意,在重新创建的节点不会安装代理的情况下,它不会与自动缩放一起工作
要监视服务(请求数/秒、客户端连接…),可以在另一个容器中安装代理插件,以便例如Nginx Pod运行两个容器:
- Nginx
- 谷歌监控代理和Nginx插件
注意:尚未完全测试。您可以在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
还有一种使用Dockerfile的方法。 创建docker映像时,预安装stackdriver代理安装所需的库
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"]
我曾尝试使用一个吊舱中的Stackdriver容器来收集同一吊舱中Nginx/Uwsgi的统计数据。 我有一些发现可能没有那么大帮助。仅供参考 要创建stackdriver映像,可以引用Keto创建的docker文件。 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']
apiVersion:extensions/v1beta1
种类:部署
...
-姓名:stackdriver代理
图片:gcr.io//stackdriver-agent:
命令:['/run.sh']
在我的测试中,我发现
- 它将基于[node_name]而不是[container_name]报告统计数据
- 它将收集许多对节点有意义的系统统计信息,但由于它位于pod中,因此毫无意义
嗯,我希望找到一些方法来收集我需要的pod和节点的统计数据,但我没有找到一个简单的方法来做到这一点。我所做的是通过Google Python API库来实现,但这需要花费太多的时间。我知道case#1是一个穷人的解决办法,我认为Google应该提供更好的支持。例如案例#2非常感谢:)但是您的stackdriver代理应该像监控整个主机一样监控您的容器。是的,这确实有点棘手。根据您如何配置吊舱,这可能会或可能不会按预期工作。如果您的主要目标是监视pod上的服务,那么您必须这样做。如果您想监视主机的某些详细信息,可以查看编辑compute instanceTemplate的启动脚本并在那里运行安装。同样的问题是“它将基于[node_name]而不是[container_name]报告统计数据”。
apiVersion: extensions/v1beta1
kind: Deployment
...
- name: stackdriver-agent
image: gcr.io/<project_id>/stackdriver-agent:<your_version>
command: ['/run.sh']