コンテンツにスキップ

リソース定義@Grafana

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. セットアップ

インストール

▼ チャートとして

チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。

$ helm repo add <チャートリポジトリ名> https://grafana.github.io/helm-charts

$ helm repo update

$ kubectl create namespace prometheus

# Prometheusと連携するために、Prometheusと同じNamespaceにインストールする。
$ helm install <Helmリリース名> <チャートリポジトリ名>/grafana -n prometheus --version <バージョンタグ>

Prometheusのコンポーネントとしてインストールしたい場合は、GitHubから全部入りのkube-prometheus-stackチャートをインストールし、リソースを作成する。

$ helm repo add <チャートリポジトリ名> https://prometheus-community.github.io/helm-charts

$ helm repo update

$ kubectl create namespace prometheus

$ helm install <Helmリリース名> <チャートリポジトリ名>/kube-prometheus-stack -n prometheus --version <バージョンタグ>


▼ ドキュメントから

Grafanaのドキュメントからyamlファイルをコピーし、grafana.yamlファイルを作成する。

これを作成する。

$ kubectl apply -f grafana.yaml


ダッシュボードの公開

Nodeの外からPrometheusのダッシュボードをネットワークに公開する場合、Node外からPrometheusサーバーにインバウンド通信が届くようにする必要がある。

*実装例*

Ingressを作成する。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: grafana
  name: foo-grafana-ingress
spec:
  ingressClassname: foo-ingress-class
  rules:
    # ドメインを割り当てる場合、Hostヘッダーの合致ルールが必要である。
    - host: foo.grafana.com
      http:
        paths:
          - backend:
              service:
                name: foo-grafana-service
                port:
                  number: 80
            path: /
            pathType: Prefix

IngressClassを作成する。

開発環境では、IngressClassとしてNginxを使用する。

本番環境では、クラウドプロバイダーのIngressClass (AWS ALB、Google Cloud CLB) を使用する。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: foo-ingress-class
spec:
  # AWSの場合、ingress.k8s.aws/alb
  controller: k8s.io/ingress-nginx

ClusterIP Serviceを作成する。

apiVersion: v1
kind: Service
metadata:
  namespace: grafana
  name: foo-grafana-service
spec:
  clusterIP: *.*.*.*
  clusterIPs:
    - *.*.*.*
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: tcp-foo
      port: 80
      protocol: TCP
      targetPort: 3000
  selector:
    app.kubernetes.io/name: foo-grafana
  sessionAffinity: None
  type: ClusterIP


接続

Grafanaのダッシュボードに接続できる。

ユーザー名はadmin、パスワードはprom-operatorがデフォルト値である。

$ kubectl port-forward svc/grafana -n prometheus 8000:80