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を使ってより良いログ基盤を目指したいと思っています。