为什么要使用 Kuberentes 来部署 Elasticsearch 和 Kibana 呢,在实际的生产环境中,大部分都是使用 Kubernetes 来进行应用的托管,因为通过 Kuberentes 的一些高级功能,很轻易的实现服务发现,故障自愈,水平扩容等等的好处。
Elasticsearch
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: elasticsearch
name: elasticsearch-deployment
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch-deployment
image: 'docker.elastic.co/elasticsearch/elasticsearch:7.9.2'
env:
- name: discovery.type
value: 'single-node'
volumeMounts:
- mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
name: volume-configmap
subPath: elasticsearch.yml
- mountPath: /usr/share/elasticsearch/data
name: volume-pvc
volumes:
- name: volume-configmap
configMap:
name: elasticsearch-configmap
defaultMode: 420
- name: volume-pvc
persistentVolumeClaim:
claimName: elasticsearch-pvc
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-service
spec:
ports:
- name: elasticsearch-service-9200
port: 9200
protocol: TCP
targetPort: 9200
- name: elasticsearch-service-9300
port: 9300
protocol: TCP
targetPort: 9300
selector:
app: elasticsearch
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: elasticsearch-ingress
spec:
rules:
- host: elasticsearch
http:
paths:
- backend:
serviceName: elasticsearch-service
servicePort: 9200
path: /
---
apiVersion: v1
data:
elasticsearch.yml: |-
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: true
kind: ConfigMap
metadata:
name: elasticsearch-configmap
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: alicloud/disk
finalizers:
- kubernetes.io/pvc-protection
name: elasticsearch-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: hongkong-disk-efficiency
kibana
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: kibana
name: kibana-deployment
spec:
replicas: 1
selector:
matchLabels:
app: kibana
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: kibana
spec:
containers:
- name: kibana-deployment
image: 'kibana:7.9.2'
volumeMounts:
- mountPath: /usr/share/kibana/config/kibana.yml
name: volume-configmap
subPath: kibana.yml
volumes:
- configMap:
defaultMode: 420
name: kibana-configmap
name: volume-configmap
---
apiVersion: v1
kind: Service
metadata:
name: kibana-service
spec:
ports:
- name: kibana-service-5601
port: 5601
targetPort: 5601
selector:
app: kibana
type: ClusterIP
---
apiVersion: v1
data:
kibana.yml: |-
server.name: kibana
server.host: "0"
monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.hosts: [ "http://elasticsearch-service:9200" ]
xpack.security.enabled: true
elasticsearch.username: elastic
elasticsearch.password: mGxKyd51dStI3KEj0MhU
kind: ConfigMap
metadata:
name: kibana-configmap
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kibana-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: kibana
http:
paths:
- backend:
serviceName: kibana-service
servicePort: 5601
path: /