首先安装方式我们考虑了helm方式,但是在安装后按照官方文档安装插件时遇到了问题,最终我们选择直接使用yaml文件安装
yaml文件准备
---
# 外部网络
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: elasticsearch
namespace: test
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/proxy-buffering: "on"
nginx.ingress.kubernetes.io/client-body-buffer-size: 100m
nginx.ingress.kubernetes.io/proxy-buffer-size: "800k"
nginx.ingress.kubernetes.io/proxy-buffers-number: "400"
spec:
rules:
- host: elasticsearch.xxx.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: elasticsearch
port:
number: 9200
---
# 内部域名
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
namespace: test
spec:
selector:
app: elasticsearch
ports:
- protocol: TCP
port: 9200
targetPort: 9200
---
# 内部域名
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-hs
namespace: test
spec:
selector:
app: elasticsearch
ports:
- protocol: TCP
port: 9200
targetPort: 9200
name: http
- protocol: TCP
port: 9300
targetPort: 9300
name: transport
---
# 服务
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
namespace: test
labels:
app: elasticsearch
spec:
serviceName: elasticsearch
replicas: 3
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
nodeSelector:
xxx/service-type-middleware: "v"
initContainers:
- name: init-file-permission
image: "busybox:1.36"
imagePullPolicy: IfNotPresent
securityContext:
runAsUser: 0
command:
- sh
- -c
- "chown -R 1000:0 /usr/share/elasticsearch/data /usr/share/elasticsearch/plugins"
resources:
requests:
cpu: 10m
memory: 1Gi
ephemeral-storage: 1Gi
limits:
cpu: 1000m
memory: 1Gi
ephemeral-storage: 1Gi
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: elasticsearch
subPath: data
- mountPath: /usr/share/elasticsearch/plugins
name: elasticsearch
subPath: plugins
containers:
- name: elasticsearch
image: elasticsearch:7.17.7
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
env:
- name: TZ
value: Asia/Shanghai
- name: node.name
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: cluster.initial_master_nodes
value: "elasticsearch-0,elasticsearch-1,elasticsearch-2,"
- name: discovery.seed_hosts
value: "elasticsearch-hs"
- name: cluster.name
value: "elasticsearch"
- name: network.host
value: "0.0.0.0"
- name: node.data
value: "true"
- name: node.ingest
value: "true"
- name: node.master
value: "true"
- name: node.ml
value: "false"
- name: node.remote_cluster_client
value: "true"
- name: ES_JAVA_OPTS
value: -Xms1g -Xmx1g
- name: restart
value: "2"
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: elasticsearch
subPath: data
- mountPath: /usr/share/elasticsearch/plugins
name: elasticsearch
subPath: plugins
resources:
requests:
cpu: 10m
memory: 1Gi
ephemeral-storage: 1Gi
limits:
cpu: 5000m
memory: 5Gi
ephemeral-storage: 100Gi
volumeClaimTemplates:
- metadata:
name: elasticsearch
spec:
storageClassName: openebs-lvmssdpv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
以上yaml文件在我们集群是没问题的,如果要使用这份yaml文件需要修改几个地方
1.resources根据你们的需求去设置磁盘和内存大小
2.storageclass改成你们集群的我们的是openebs-lvmssdpv
3.ingress域名改成你们的,如果不需要域名访问直接将ingress这一项去掉
4.节点亲和度配置根据你们的业务调整,我们是通过label来调度集群节点的,位置在
nodeSelector: xxx/service-type-middleware: "v"
然后安装插件
```shell
kubectl -n test get pod|grep elas
```
安装插件, 安装完之后需要重启服务
```shell
kubectl -n test cp elasticsearch-analysis-ik-7.17.7 elasticsearch-0:/usr/share/elasticsearch/plugins/ik
kubectl -n test cp elasticsearch-analysis-pinyin-7.17.7 elasticsearch-0:/usr/share/elasticsearch/plugins/pinyin
kubectl -n test cp elasticsearch-analysis-stconvert-7.17.7 elasticsearch-0:/usr/share/elasticsearch/plugins/stconvert
kubectl -n test exec -it elasticsearch-0 -- bash
cd /usr/share/elasticsearch/plugins
ls ik/ pinyin/ stconvert/
curl http://127.0.0.1:9200/_cat/plugins
```
```shell
kubectl -n test cp elasticsearch-analysis-ik-7.17.7 elasticsearch-1:/usr/share/elasticsearch/plugins/ik
kubectl -n test cp elasticsearch-analysis-pinyin-7.17.7 elasticsearch-1:/usr/share/elasticsearch/plugins/pinyin
kubectl -n test cp elasticsearch-analysis-stconvert-7.17.7 elasticsearch-1:/usr/share/elasticsearch/plugins/stconvert
kubectl -n test exec -it elasticsearch-1 -- bash
cd /usr/share/elasticsearch/plugins
ls ik/ pinyin/ stconvert/
curl http://127.0.0.1:9200/_cat/plugins
```
```shell
kubectl -n test cp elasticsearch-analysis-ik-7.17.7 elasticsearch-2:/usr/share/elasticsearch/plugins/ik
kubectl -n test cp elasticsearch-analysis-pinyin-7.17.7 elasticsearch-2:/usr/share/elasticsearch/plugins/pinyin
kubectl -n test cp elasticsearch-analysis-stconvert-7.17.7 elasticsearch-2:/usr/share/elasticsearch/plugins/stconvert
kubectl -n test exec -it elasticsearch-2 -- bash
cd /usr/share/elasticsearch/plugins
ls ik/ pinyin/ stconvert/
curl http://127.0.0.1:9200/_cat/plugins
```
安装好后重启pod就成功安装es了
prod elasticsearch-0 1/1 Running 0 9d
prod elasticsearch-1 1/1 Running 0 9d
prod elasticsearch-2 1/1 Running 0 9d
elasticsearch-elasticsearch-0 Bound pvc-a71e2cf3-d882-4c24-b52f-958a5d677a48 100Gi RWO openebs-lvmpv 9d
elasticsearch-elasticsearch-1 Bound pvc-04757ff3-4794-45ef-9b8d-b30f7f22e981 100Gi RWO openebs-lvmpv 9d
elasticsearch-elasticsearch-2 Bound pvc-3ffa2f38-3866-499c-b4fb-50e59a5cf89d 100Gi RWO openebs-lvmpv 9d
运行结果