Kubernetes上に簡易的なElasticSearchとKibanaを立てる
March 2, 2020
データの損失とか気にせず、とりあえず動かしたいだけの場合
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 の外で動かした方がいいかもですが..)