Kubernetes

Kubernetes学习日记(三)

本文主要是介绍Kubernetes学习日记(三),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Kubernetes学习日记(三)

暑期加入了沃天宇老师的实验室进行暑期的实习。在正式开始工作之前,师兄先让我了解一下技术栈,需要了解的有docker、k8s、springboot、springcloud。

谨以一系列博客记录一下自己学习的笔记。更多内容见Github

  • 上一篇 Kubernetes学习日记(一)

2021/7/13

今天师兄让我尝试写一下Chronograf的配置文件。

参考资料

  • Chronograf官方文档:https://docs.influxdata.com/chronograf/latest/
  • Kuberbetes API文档:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/

Chronograf是什么

Chronograf是InfluxData中的可视化Web服务,InfluxData常常用于监控一个集群,监控的信息保存于influxdb数据库,而chronograf的功能就是将influxdb中的数据漂亮地展示出来。

镜像

InfluxDB 2.0似乎已经推出了,但是Chronograf似乎目前只支持InfluxDB 1.x

下载页:https://portal.influxdata.com/downloads/

往下翻,可以看到InfluxDB 1.xChronograf的下载链接,可以看到这里直接就提供了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,使得本地有镜像的时候不必重新拉取。

通过指定了PORTINFLUXDB_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的相关配置文件。

这篇关于Kubernetes学习日记(三)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!