暑期加入了沃天宇老师的实验室进行暑期的实习。在正式开始工作之前,师兄先让我了解一下技术栈,需要了解的有docker、k8s、springboot、springcloud。
谨以一系列博客记录一下自己学习的笔记。更多内容见Github
2021/7/13
今天师兄让我尝试写一下Chronograf的配置文件。
Chronograf是InfluxData中的可视化Web服务,InfluxData常常用于监控一个集群,监控的信息保存于influxdb数据库,而chronograf的功能就是将influxdb中的数据漂亮地展示出来。
InfluxDB 2.0
似乎已经推出了,但是Chronograf
似乎目前只支持InfluxDB 1.x
。
下载页:https://portal.influxdata.com/downloads/
往下翻,可以看到InfluxDB 1.x
和Chronograf
的下载链接,可以看到这里直接就提供了docker镜像,所以我们不需要手动构建镜像了:
docker pull influxdb:1.8 docker pull quay.io/influxdb/chronograf:1.9.0
从Chronograf文档 | --port中可以知道,其默认的端口是8888
,可以通过命令行参数/环境变量来修改,但是次数参数来修改deploy就启动不了了,所以还是通过环境变量来修改。
另一个比较重要的参数时InfluxDb的信息,从Chronograf文档 | --influxdb-url中可以知道,可以通过环境变量INFLUXDB_URL
来指定,如果我们将InfluxDb也包装为一个Service,那么我们就可以借助k8s内部的DNS来访问了。在文档中,后面也介绍了influxdb需要鉴权时的参数,需要的话,以后再加上,届时,可能需要k8s Secret来保证其安全性。
从InfluxDb文档 | Port中可以知道,FluxDb响应HTTP请求的服务默认启动于8086端口,这里我们就不修改了。
详见chronograf
chronograf.yml
apiVersion: apps/v1 kind: Deployment metadata: name: chronograf namespace: default labels: app: chronograf spec: selector: matchLabels: app: chronograf replicas: 2 template: metadata: labels: app: chronograf spec: containers: - name: chronograf image: quay.io/influxdb/chronograf:1.9.0 # args: # - --influxdb-url=influxdb:8086 imagePullPolicy: IfNotPresent env: - name: PORT value: "8081" - name: INFLUXDB_URL value: "http://influxdb:8086" resources: limits: cpu: 100m memory: 200Mi ports: - containerPort: 8081
resources.limits是我随便写的,因为不写vscode会报warning。
通过指定imagePullPolicy: IfNotPresent
,使得本地有镜像的时候不必重新拉取。
通过指定了PORT
和INFLUXDB_URL
两个环境变量,分别实现了更改端口、指定influxdb的url,然后将容器的8081端口暴露出来。
其中influxdb的url我们利用了k8s的DNS,我们后面还需要创建一个influxdb的Service。
然后创建一个服务:
chronograf-service.yml
apiVersion: v1 kind: Service metadata: name: chronograf-service namespace: default labels: app: chronograf-service spec: selector: app: chronograf type: NodePort ports: - port: 8081
通过selector
来指定pods。这跟使用kubectl expose pod/chronograf --type="NodePort" --port=8081
的效果应该差不多。
最后创建influxdb:
influxdb.yml
apiVersion: apps/v1 kind: Deployment metadata: name: influxdb namespace: default labels: app: influxdb spec: selector: matchLabels: app: influxdb replicas: 1 template: metadata: labels: app: influxdb spec: containers: - name: influxdb imagePullPolicy: IfNotPresent image: influxdb:1.8 resources: limits: cpu: 100m memory: 200Mi ports: - containerPort: 8086
influxdb的service就直接通过kubectl expose
来创建。
通过kubectl apply
运行这三个配置文件,通过kubectl expose
来创建influxdb的service。
通过dashboard可以看到都正常运行了:
因为我在windows上运行,还需要将minikube这个node的端口转发出来:
minikube service chronograf-service
注意,如果我们没有配置INFLUXDB_URL
环境变量,访问的时候就必须先输入连接InfluxDb的信息,如果仅仅创建了InfluxDb的Deployment,而没有创建Service,在Chronograf中应该会报错无法连接到InfluxDb。
通过查阅文档,我们初步完成了一个Chronograf的相关配置文件。