此为单实例部署,切勿用于生产环境。

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