在 deployment/pod 创建之前编辑图像内的配置文件
Edit config file inside image before deployment/pod creation
我 运行 grafana 作为我的 Kubernetes 集群中的一个 pod。初始化 Grafana 后,它会在本地主机上创建一个数据库并将所有数据保存在那里。这意味着每当一个 pod 被销毁并重新创建时,整个数据库都会重新初始化,我会丢失所有以前的数据。
DB 的 Pod 内的 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 镜像本身提供了通过环境变量提供所有配置参数的能力。这个只在GitHubreadme.
中提到
这样您就可以使用 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"
我 运行 grafana 作为我的 Kubernetes 集群中的一个 pod。初始化 Grafana 后,它会在本地主机上创建一个数据库并将所有数据保存在那里。这意味着每当一个 pod 被销毁并重新创建时,整个数据库都会重新初始化,我会丢失所有以前的数据。
DB 的 Pod 内的 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 镜像本身提供了通过环境变量提供所有配置参数的能力。这个只在GitHubreadme.
中提到这样您就可以使用 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"