如何在Kubernetes实例中启动TICK堆栈

导航至

鉴于我对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 取得成功的经历。提交您的评价,并将获得一件限量版卫衣作为感谢。