如何在Kubernetes实例中启动TICK堆栈
作者:Jack Zampolin / 产品
2016年11月30日
导航至
鉴于我对Kubernetes的兴趣,以及我们最近为简化Kubernetes集群的InfluxDB监控所做的努力(kubernetes telegraph插件、kapacitor kubernetes输出、chronograf OSS发布),我决定提供一个简单的方法在Kubernetes实例中启动整个堆栈。
动机
您可能会问,Kubernetes难道没有内置监控吗?是的,它确实有!这个监控和日志聚合根据您的集群配置和提供者有所不同。默认情况下,指标监控由Heapster执行。有时这由InfluxDB提供支持。
Heapster在遵循InfluxDB模式最佳实践方面做得并不好。它也只有很少的文档,并且已经停止添加新功能。我想要一个简单的方法来创建包含丰富实时数据演示和概念验证(POC)。随着新Chronograf的发布和它提供的 canned dashboards,这成为可能。
为了便于在不同的Kubernetes配置上部署,我决定将项目编写为一系列Helm Charts。结果是tick-charts。
.
??? LICENSE
??? README.md
??? chronograf
? ??? Chart.yaml
? ??? README.md
? ??? templates
? ? ??? NOTES.txt
? ? ??? _helpers.tpl
? ? ??? deployment.yaml
? ? ??? pvc.yaml
? ? ??? service.yaml
? ??? values.yaml
??? influxdb
? ??? Chart.yaml
? ??? README.md
? ??? templates
? ? ??? NOTES.txt
? ? ??? _helpers.tpl
? ? ??? config.yaml
? ? ??? deployment.yaml
? ? ??? pvc.yaml
? ? ??? service.yaml
? ??? values.yaml
??? kapacitor
? ??? Chart.yaml
? ??? README.md
? ??? templates
? ? ??? NOTES.txt
? ? ??? _helpers.tpl
? ? ??? deployment.yaml
? ? ??? pvc.yaml
? ? ??? service.yaml
? ??? values.yaml
??? telegraf
??? Chart.yaml
??? README.md
??? docs
? ??? all-config-values.toml
? ??? all-config-values.yaml
??? templates
? ??? _helpers.tpl
? ??? configmap-single.yaml
? ??? conifgmap-ds.yaml
? ??? daemonset.yaml
? ??? deployment.yaml
? ??? service.yaml
??? values.yaml
Helm
在部署堆栈成员之前,我们需要将它们打包为Helm
$ helm package influxdb chronograf telegraf kapacitor
Telegraf
$ helm install telegraf-0.1.0.tgz --name telegraf --namespace tick
从高层次来看,系统的工作方式是启动Telegraf Daemonset
# telegraf/daemonset.yaml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: telegraf
namespace: tick
spec:
template:
metadata:
labels:
app: telegraf
spec:
containers:
- name: telegraf
image: telegraf:1.1.0-alpine
imagePullPolicy: Always
...
这将在Kubernetes集群的每个虚拟主机上运行Pod。如果您查看完整文件,您将看到许多挂载的卷。这些卷使得容器化代理能够收集各种主机级别统计信息。以下input插件目前在daemonset中启用Telegraf chart还创建了一个单例Telegraf实例,它运行以下插件
InfluxDB
$ helm install influxdb-0.1.0.tgz --name influxdb --namespace tick
Telegraf产生的数据随后被转发到InfluxDB# influxdb/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: influxdb
namespace: tick
...
spec:
containers:
- image: influxdb:1.1.0-rc2-alpine
...
volumeMounts:
- name: config-volume
mountPath: /etc/influxdb
- name: influxdb
mountPath: /var/lib/influxdb
...
volumes:
- name: config-volume
configMap:
name: influxdb-config
- name: influxdb
emptyDir: {}
注意
emptyDir
不提供InfluxDB实例的持久性。您可以在InfluxDB chart中启用持久性。Kapacitor和Chronograf也需要持久存储。默认情况下,所有产品均禁用持久性。本项目使用持久卷声明(pvc
)来创建卷,如果需要的话。只需在相关的values.yaml
文件中将persistence: "true"
设置为即可。为了使Influx可寻址,我们需要通过service
公开其API。这将在内部集群DNS中创建一个条目,形式为http://{service_name}.{namespace}:{service_port}
,使InfluxDB API可在集群的任何地方通过http://influxdb-influxdb.tick:8086
进行寻址。如果您想通过influx
从本地机器访问数据库,请尝试以下操作# the args are {namespace} {app}
# It will attach to the first instance of app returned if multiple exist
# InfluxDB API will be available at localhost:8086
$ kubectl port forward $(kubectl get pods --all-namespaces -l app=influxdb-influxdb -o jsonpath='{ .items[0].metadata.name }') 8086:8086
# In another terminal window:
$ influx
> show databases
name: databases
name
----
telegraf
_internal
Chronograf
$ helm install chronograf-0.1.0.tgz --name chronograf --namespace tick
Chronograf 是 InfluxDB 推出的新型开源时序数据可视化和管理工具。它包含一些针对 Kubernetes 的预设仪表板。它还需要一些持久化存储来存储它使用的 boltdb 文件以保存状态。在这个应用中,我们使用的唯一新的 Kubernetes 功能是 LoadBalancer
服务。apiVersion: v1
kind: Service
metadata:
name: chronograf
namespace: tick
spec:
type: LoadBalancer
ports:
- port: 80
name: http
targetPort: 8888
protocol: TCP
selector:
app: chronograf
这会将 Chronograf 的服务端口(:8888
)通过负载均衡器(AWS 上的 ELB 和 GCE 上的 Cloud LB)公开为公网 IP。这可能需要一分钟才能部署,因此创建服务后,请运行 kubectl get -w svc --namespace tick chronograf-chronograf
来监视 IP 地址是否可用。在我们配置 Web 控制台之前,我们需要部署堆栈的最后一个成员,即 kapacitor
。该部署文件集中没有新内容,但是 Web 控制台暴露了一些功能。$ helm install kapacitor-0.1.0.tgz --name kapacitor --namespace tick
配置 Chronograf
在上述步骤中获取到公网 IP 后,将其输入您的 Web 浏览器。您应该会看到一个屏幕,提示您输入 InfluxDB 的 URL 和名称。因为所有请求都通过 chronograf 服务器代理,我们可以使用以下 URL 通过内部集群寻址来访问 InfluxDB 或 Kapacitor- InfluxDB:
http://influxdb-influxdb.tick:8086
- Kapacitor:
http://kapacitor-kapacitor.tick:9092
万事俱备!
现在您可以开始探索可用的数据了!这篇帖子更多地描述了示例中使用的不同技术和策略。我将在另一篇帖子中详细介绍您可以做什么。同时,您可以观看我关于这个主题的视频,其中包括一个 现场演示。接下来是什么
- 下载TICK 堆栈的下载在我们的 "下载" 页面已上线
- 云上部署:免费试用InfluxDB Cloud,包含完全托管的集群、Kapacitor 和 Grafana。
- 服务器上部署:想在自己的服务器上运行 InfluxDB 集群吗?免费试用 14 天的InfluxDB Enterprise,包括直观的 UI 用于部署、监控和重新平衡集群,以及管理备份和还原。
- 分享您的经历: 超过 100 家公司分享了他们如何利用 InfluxDB 取得成功的经历。提交您的评价,并将获得一件限量版卫衣作为感谢。