Kubernetes上に簡易的なElasticSearchとKibanaを立てる

Kubernetes上に簡易的なElasticSearchとKibanaを立てる

March 2, 2020
Kubernetes
kubernetes, elasticsearch, kibana

データの損失とか気にせず、とりあえず動かしたいだけの場合

manifest

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch
  labels:
    app: elasticsearch
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.5.1
        ports:
        - containerPort: 9200
        env:
        - name: "discovery.type"
          value: "single-node"
        - name: "node.master"
          value: "true"
        - name: "node.data"
          value: "true"
        - name: "xpack.security.enabled"
          value: "false"
        - name: "bootstrap.memory_lock"
          value: "true"
        - name: "ES_JAVA_OPTS"
          value: "-Xms1024m -Xmx1024m"
        volumeMounts:
        - mountPath: /usr/share/elasticsearch/data
          name: es-data
      volumes:
      - name: es-data
---
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
spec:
  selector:
    app: elasticsearch
  ports:
  - protocol: TCP
    port: 9200
    targetPort: 9200
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.5.1
        ports:
        - containerPort: 5601
        env:
        - name: ELASTICSEARCH_HOSTS
          value: http://elasticsearch:9200
---
apiVersion: v1
kind: Service
metadata:
  name: kibana
spec:
  selector:
    app: kibana
  ports:
  - protocol: TCP
    port: 5601
    targetPort: 5601
---

接続方法

ローカル端末から kubectl を打てるのであれば、port-forward で繋がります

## elasticsearchへアクセスしたい場合
$ kubectl port-forward <elasticsearchのpod名> 9200

## kibanaへアクセスしたい場合
$ kubectl port-forward <kibanaのpod名> 5601

それぞれ

  • http://localhost:9200
  • http://localhost:5601

でアクセスできます。

ローカル PC から kubectl を打てない場合は、各サービスの Type を LoadBalancer に変えるなど すると良いでしょう

その他

ちゃんと動かしたい場合は、kubernetes が公式で提供しているマニフェストか、helm チャート使ったりすると良いと思います。(そもそも ES みたいなステートフルなもの k8s の外で動かした方がいいかもですが..)