KubernetesでKibanaを起動する方法

目次

概要

過去に、KubernetesでElasticsearchを起動しました。

しかしElasticsearchだけでは、毎回WebAPIを介して情報を取得しなければならなく、情報も見にくいです。

そこで、ElasticsearchのフロントエンドとしてKibanaを起動することにしました。

ここでは、Kubernetes上でKibanaを起動してElasticsearchと連携する方法について紹介します。

Kibanaとは

Kibanaは、Elasticsearchのフロントエンドとして使うことができ、Elasticsearchを作成しているElastic社が現在作成しています。

具体的なKibanaの使い方として、私の場合Elasticsearchにはログを集約しているので、Kibanaを使ってログを検索や解析したりするために使います。

ストレージ

Kibanaでは、グラフなどを作成できます。

そのため、グラフのデータなどを保存しておく場所を用意する必要があります。

Kubernetesでは、PersistentVolumesとPersistentVolumeClaimsを使ってデータを置くストレージを用意します。

私の環境ではNFSを使っているので、NFSを使った設定の例を載せておきます。

PersistentVolumesを作成するymlの例です。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kibana-pv
  labels:
    name: kibana-pv
spec:
  capacity:
    storage: "1Gi"
  accessModes:
    - ReadWriteOnce
  nfs:
    server: ********
    path: ********

PersistentVolumeClaimsを作成するymlの例です。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kibana-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: "1Gi"
  selector:
    matchLabels:
      name: kibana-pv

NFSの設定など、状況に合わせて適切に値を書き換えてください。

起動

KibanaのDockerイメージは、Elastic社が配布しているものがあるのでそれを使います。

今回、OSS版を使用しているため、イメージ名はossがついて、docker.elastic.co/kibana/kibana-oss:6.2.2になります。

Kibanaを起動するymlファイルの例は次です。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kibana
  labels:
    app: kibana
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana-oss:6.2.2
        env:
          - name: ELASTICSEARCH_URL
            value: http://********:9200
          - name: SERVER_NAME
            value: kibana.example.org
          - name: SERVER_HOST
            value: "0.0.0.0"
        resources:
          limits:
            cpu: 300m
          requests:
            cpu: 100m

Elasticsearchの場所は、環境変数のELASTICSEARCH_URLで設定します。値には適切なものを設定してください。

さらに、SERVER_NAMEではKibanaのサーバのドメインを指定します。

Kibanaを起動する上での注意として、OSS版ではない場合、起動の際にCPUリソースをたくさん使用します。もし、OSS版を使用しない場合はresourcesのcpuの値を大きくしましょう。

サービス

外部からアクセスできるようにしましょう。

Kubernetesで外部からアクセスできるようにするには、Servicewoを使います。

Serviceを作成するymlは次です。

apiVersion: v1
kind: Service
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  type: ClusterIP
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
  selector:
    app: kibana

あくまでも例なので、ClusterIPはNodePortに変更するなど適当な値で書き換えてください。

さいごに

私の場合、主にログ基盤としてElasticsearchを使っています。

ログの検索としてはElasticsearch単体ではあまりにも不便だったので、Kibanaを使ってより良いログ基盤を目指したいと思っています。