kubernetes - 在部署/ pods 创建之前在镜像中编辑配置文件

标签 kubernetes grafana

我在Kubernetes集群中将grafana作为pod运行。初始化Grafana后,它将在localhost上创建一个DB,并将所有数据保存在那里。这意味着只要销毁并重新创建Pod,整个DB就会重新初始化,并且我会丢失所有以前的Data。

Pod for DB内部的grafana配置为::

#################################### Database ####################################
[database]
# Either "mysql", "postgres" or "sqlite3", it's your choice
;type = sqlite3
;host = 127.0.0.1:3306
;name = grafana
;user = root
;password =

为了摆脱这个问题,我必须创建一个外部数据库,并在每次创建Grafana Pod时都将我的Grafana指向该数据库实例。我当前创建Grafana pod的默认实现是::
apiVersion: v1
kind: Service
metadata:
  name: lb-grafana-service
spec:
  ports:
    - port: 4545
      targetPort: 4545
      protocol: TCP
  clusterIP: 10.100.10.100
----
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  labels:
    app: grafana
    name: grafana
  name: grafana
spec:
  ports:
  - name: scrape
    port: 4545
    nodePort: 30999
    protocol: TCP
  type: NodePort
  selector:
    app: grafana
----
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      name: grafana
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana:develop
        env:
          - name: Prometheus_SERVICE_URL
            value: http://172.29.219.105:30901
          - name: GF_SECURITY_ADMIN_PASSWORD
            value: "grafana"
          - name: GF_SERVER_HTTP_PORT
            value: "4545"
        ports:
          - containerPort: 9101
        volumeMounts:
        - mountPath: /var
          name: grafana-storage
      volumes:
      - name: grafana-storage
        emptyDir: {}

因此,我想做的是在Grafana pod上线之前覆盖/etc/grafana/grafana.ini文件,或者只是用新值重写当前文件。我不知道我现在该怎么做。一点指导将不胜感激。

最佳答案

通常,您可以使用ConfigMaps,如注释中所述。

Grafana镜像本身提供了通过环境变量提供所有配置参数的能力。这仅在GitHub readme中提及。

这样,您可以使用Kubernetes设置环境变量,例如:

  spec:
    template:
      spec:
        containers:
        - name: grafana
          image: grafana/grafana:4.1.1
          env:
          - name: "GF_SERVER_ROOT_URL"
            value: "http://grafana.{{.clusterDomain}}"
          - name: "GF_DATABASE_TYPE"
            value: "{{.gfDatabaseType}}"
          - name: "GF_DATABASE_HOST"
            value: "{{.gfDatabaseHost}}"
          - name: "GF_DATABASE_NAME"
            value: "{{.gfDatabaseName}}"
          - name: "GF_DATABASE_USER"
            value: "{{.gfDatabaseUser}}"
          - name: "GF_DATABASE_PASSWORD"
            value: "{{.gfDatabasePassword}}"
          - name: "GF_DATABASE_SSL_MODE"
            value: "disable"
          - name: "GF_AUTH_ANONYMOUS_ENABLED"
            value: "true"

关于kubernetes - 在部署/ pods 创建之前在镜像中编辑配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44243745/

相关文章:

docker - minikube 0.30.0 DNS在带有Docker 18.06.1-ce和vm-driver = none的CentOS 7上不起作用

Grafana Singlestat : select with timerange

homebrew - 已启动 Grafana,但本地主机 :3000? 处没有日志或服务器

opentsdb - 如何在grafana图表中创建趋势线

influxdb - 在 InfluxQL/InfluxDB 中获取 30 天前的差异

kubernetes - 同步 Kubernetes 中多个服务实例之间的 HTTP 请求

spring-mvc - Kubernetes 中微服务之间的身份验证

networking - 防止 Kubernetes 中的命名空间间通信

kubernetes - APISERVER 日志中的 TLS 握手错误来自哪里?

database - 没有选项 "Postgres "作为 GRAFANA 上的数据库类型