apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: default labels: app: grafana spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: nodeSelector: node-role.kubernetes.io/control-plane: "true" containers: - name: grafana image: registry.t-aaron.com/grafana/grafana:latest ports: - containerPort: 3000 env: - name: GF_SECURITY_ADMIN_PASSWORD value: "admin123" resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" volumeMounts: - name: grafana-storage mountPath: /var/lib/grafana - name: grafana-provisioning mountPath: /etc/grafana/provisioning/datasources readOnly: true - name: grafana-dash-provisioning mountPath: /etc/grafana/provisioning/dashboards readOnly: true - name: grafana-dashboards mountPath: /var/lib/grafana/dashboards readOnly: true volumes: - name: grafana-storage hostPath: path: /opt/grafana/data type: DirectoryOrCreate - name: grafana-provisioning configMap: name: grafana-datasource - name: grafana-dash-provisioning configMap: name: grafana-dash-provisioning - name: grafana-dashboards configMap: name: grafana-dashboard-aserver --- apiVersion: v1 kind: Service metadata: name: grafana-service namespace: default labels: app: grafana spec: type: ClusterIP ports: - port: 3000 targetPort: 3000 protocol: TCP selector: app: grafana