如何在 Kubernetes 实例中启动 TICK Stack

导航至

鉴于我对 Kubernetes 的兴趣,以及我们最近为简化使用 InfluxDB 监控 Kubernetes 集群所做的工作(kubernetes telegraph 插件kapacitor kubernetes 输出chronograf OSS 版本),我决定整理一个简单的方法,在 Kubernetes 实例中启动完整堆栈。

动机

您可能会问,Kubernetes 不是自带内置监控吗?是的,它是!这种监控和日志聚合的处理方式因您的集群配置和来源而异。默认情况下,指标监控由 heapster 完成。有时,这由 InfluxDB 提供支持。

Heapster 在遵循 InfluxDB 模式最佳实践方面做得不是最好。它的文档也很稀疏,并且已停止添加新功能。我想要一种简单的方法来创建演示和概念验证 (POC),其中包含丰富的实时数据。随着新的 Chronograf 和它提供的预制仪表板的发布,这成为可能。

为了便于在不同的 Kubernetes 配置上部署,我决定将该项目编写为一系列 Helm Chartstick-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。如果您查看完整文件,您将看到许多已挂载的卷。这些使容器化代理能够收集各种主机级统计信息。以下 输入插件 当前在 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-stack 的下载已在我们的“下载”页面上线
  • 云端部署:开始免费试用 InfluxDB Cloud,它具有完全托管的集群、Kapacitor 和 Grafana。
  • 在您的服务器上部署:想在您的服务器上运行 InfluxDB 集群?免费试用 14 天的 InfluxDB Enterprise,它具有用于部署、监控和重新平衡集群的直观 UI,以及管理备份和恢复。
  • 讲述您的故事:超过 100 家公司分享了他们关于 InfluxDB 如何帮助他们取得成功的故事。提交您的客户评价,即可获得限量版连帽衫作为感谢。