此为单实例部署,切勿用于生产环境。 |
1. 说明
Elastic Search 部署需要镜像 docker.elastic.co/elasticsearch/elasticsearch:8.3.2
。部署完成后,集群内部地址为:
1
svc-elastic.core-middle.svc.cluster.local:9200
2. 创建 PVC
导入以下配置,创建PVC。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-elastic-data
namespace: core-middle
labels:
app: elastic
spec:
storageClassName: 'sc-nfs-share'
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
3. 创建 Elastic 配置
Elastic 运行时需要一些默认配置,导入以下配置即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
apiVersion: v1
kind: ConfigMap
metadata:
name: conf-elastic
namespace: core-middle
labels:
app: elastic
data:
xpack.security.enabled: 'true'
jvm.ops: '-Xms1g -Xmx1g' (1)
---
apiVersion: v1
kind: Secret
metadata:
name: secret-elastic
namespace: core-middle
annotations:
reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "kube-system,default,core-system,core-middleware,core-app,share-app,monitor-app,dev-ops"
reflector.v1.k8s.emberstack.com/reflection-allowed: "true"
reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true"
reflector.v1.k8s.emberstack.com/reflection-auto-namespaces: "kube-system,default,core-system,core-middleware,core-app,share-app,monitor-app,dev-ops"
labels:
app: elastic
type: Opaque
stringData:
username: 'elastic'
password: 'elastic-admin-password' (2)
其中
1 | Elastic 配置: 指定运行时大小 |
2 | 你需要为管理员用户配置更为复杂的密码 |
4. 创建 Elastic Master 启动配置
使用以下配置创建 Elastic Master 启动配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sts-elastic
namespace: core-middle
labels:
app: elastic
spec:
serviceName: svc-elastic
selector:
matchLabels:
app: elastic
replicas: 1
template:
metadata:
labels:
app: elastic
spec:
containers:
- name: elastic
image: docker.elastic.co/elasticsearch/elasticsearch:8.3.2
volumeMounts:
- name: elastic-data
mountPath: /usr/share/elasticsearch/data
ports:
- containerPort: 9200
name: api
- containerPort: 9300
name: cluster-port
env:
- name: discovery.type
value: single-node
- name: ES_JAVA_OPTS
valueFrom:
configMapKeyRef:
name: conf-elastic
key: jvm.ops
- name: ELASTICSEARCH_USERNAME
valueFrom:
secretKeyRef:
name: secret-elastic
key: username
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: secret-elastic
key: password
- name: 'xpack.security.enabled'
valueFrom:
configMapKeyRef:
name: conf-elastic
key: 'xpack.security.enabled'
volumes:
- name: elastic-data
persistentVolumeClaim:
claimName: pvc-elastic-data
5. 关联Service
将 Elastic Master 服务关联到 Service 下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Service
metadata:
labels:
app: elastic
name: svc-elastic
namespace: core-middle
spec:
ports:
- name: api
protocol: TCP
port: 9200
- name: cluster-port
protocol: TCP
port: 9300
selector:
app: elastic
6. 测试
使用以下命令查看实例部署情况:
1
kubectl get pods,configmap,secrets,services,deployments,pvc -n core-middle -l app=elastic
如果一切无误的话可使用以下命令测试 Elastic Search ,输出结果如下所示 (有输出即可)。
测试命令
1
2
3
ES_USER=$(kubectl get secrets -n core-middle secret-elastic -o jsonpath='{.data.username}' | base64 -d)
ES_PASSWD=$(kubectl get secrets -n core-middle secret-elastic -o jsonpath='{.data.password}' | base64 -d)
kubectl exec -it -n core-middle pods/sts-elastic-0 -- curl http://svc-elastic.core-middle.svc.cluster.local:9200/_cat/nodes -u "$ES_USER:$ES_PASSWD"
输出结果
1
192.168.1.97 27 96 0 0.14 0.16 0.14 cdfhilmrstw * elastic-server-0