部署elasticseach集群
elasticsearch作为有状态服务,需要部署集群服务,根据kubernetes statefulset部署步骤开始:
- headless service
- statefulset
- volumeClaimTemplates
构建elasticsearch docker镜像
1 | FROM elasticsearch:6.8.13 |
2 |
|
3 | WORKDIR /usr/share/elasticsearch |
4 |
|
5 | COPY elasticsearch.yml config/ |
6 |
|
7 | RUN chown 1000 config/elasticsearch.yml |
1 | cluster.name: "elasticsearch-${NAMESPACE}" |
2 | node.name: "${POD_NAME}" |
3 | network.host: "${POD_IP}" |
4 | discovery.zen.ping.unicast.hosts: es-cluster |
5 | discovery.zen.minimum_master_nodes: 2 |
6 | bootstrap.memory_lock: false |
7 | gateway.recover_after_nodes: 2 |
8 | gateway.expected_nodes: 3 |
9 | gateway.recover_after_time: 5m |
10 | discovery.zen.fd.ping_interval: 1s |
11 | discovery.zen.fd.ping_timeout: 10s |
12 | discovery.zen.fd.ping_retries: 2 |
准备volumeClaimTemplates的pv
1 | apiVersion: v1 |
2 | kind: PersistentVolume |
3 | metadata: |
4 | name: nfs-1 |
5 | spec: |
6 | storageClassName: manual |
7 | capacity: |
8 | storage: 10Gi |
9 | accessModes: |
10 | - ReadWriteOnce |
11 | nfs: |
12 | server: 192.168.88.90 |
13 | path: /data/es_data/1 |
14 |
|
15 | --- |
16 | apiVersion: v1 |
17 | kind: PersistentVolume |
18 | metadata: |
19 | name: nfs-2 |
20 | spec: |
21 | storageClassName: manual |
22 | capacity: |
23 | storage: 10Gi |
24 | accessModes: |
25 | - ReadWriteOnce |
26 | nfs: |
27 | server: 192.168.88.90 |
28 | path: /data/es_data/2 |
29 |
|
30 | --- |
31 | apiVersion: v1 |
32 | kind: PersistentVolume |
33 | metadata: |
34 | name: nfs-3 |
35 | spec: |
36 | storageClassName: manual |
37 | capacity: |
38 | storage: 10Gi |
39 | accessModes: |
40 | - ReadWriteOnce |
41 | nfs: |
42 | server: 192.168.88.90 |
43 | path: /data/es_data/3 |
准备statefulset
1 | apiVersion: v1 |
2 | kind: Service |
3 | metadata: |
4 | name: elasticsearch |
5 | labels: |
6 | app: es |
7 | spec: |
8 | ports: |
9 | - name: restful |
10 | port: 9200 |
11 | targetPort: 9200 |
12 | nodePort: 31000 |
13 | - name: transport |
14 | port: 9300 |
15 | targetPort: 9300 |
16 | nodePort: 33000 |
17 | type: NodePort |
18 | selector: |
19 | app: es |
20 |
|
21 | --- |
22 | apiVersion: v1 |
23 | kind: Service |
24 | metadata: |
25 | name: es-cluster |
26 | labels: |
27 | app: es-cluster |
28 | spec: |
29 | ports: |
30 | - name: restful |
31 | port: 9200 |
32 | - name: transport |
33 | port: 9300 |
34 | clusterIP: None |
35 | selector: |
36 | app: es |
37 |
|
38 | --- |
39 | apiVersion: apps/v1 |
40 | kind: StatefulSet |
41 | metadata: |
42 | name: es |
43 | spec: |
44 | serviceName: es-cluster |
45 | replicas: 3 |
46 | selector: |
47 | matchLabels: |
48 | app: es |
49 | template: |
50 | metadata: |
51 | labels: |
52 | app: es |
53 | spec: |
54 | securityContext: |
55 | fsGroup: 1000 |
56 | nodeSelector: |
57 | kubernetes.io/arch: amd64 |
58 | initContainers: |
59 | - name: init |
60 | image: busybox |
61 | imagePullPolicy: IfNotPresent |
62 | command: ["/bin/sh", "-c", "sysctl -w vm.max_map_count=262144; ulimit -n 65536; ulimit -u 2048; ulimit -l ulimited"] |
63 | securityContext: |
64 | privileged: true |
65 | containers: |
66 | - name: elasticsearch |
67 | image: harbor.zjhw.com/library/elasticsearch:v2 |
68 | imagePullPolicy: Always |
69 | env: |
70 | - name: NAMESPACE |
71 | valueFrom: |
72 | fieldRef: |
73 | fieldPath: metadata.namespace |
74 | - name: POD_NAME |
75 | valueFrom: |
76 | fieldRef: |
77 | fieldPath: metadata.name |
78 | - name: POD_IP |
79 | valueFrom: |
80 | fieldRef: |
81 | fieldPath: status.podIP |
82 | ports: |
83 | - containerPort: 9200 |
84 | name: restful |
85 | - containerPort: 9300 |
86 | name: transport |
87 | volumeMounts: |
88 | - name: es-data |
89 | mountPath: /usr/share/elasticsearch/data |
90 | volumeClaimTemplates: |
91 | - metadata: |
92 | name: es-data |
93 | spec: |
94 | accessModes: ['ReadWriteOnce'] |
95 | storageClassName: "manual" |
96 | resources: |
97 | requests: |
98 | storage: 10Gi |
kibana
1 | apiVersion: apps/v1 |
2 | kind: Deployment |
3 | metadata: |
4 | name: kibana |
5 | spec: |
6 | replicas: 1 |
7 | selector: |
8 | matchLabels: |
9 | app: kibana |
10 | template: |
11 | metadata: |
12 | labels: |
13 | app: kibana |
14 | spec: |
15 | nodeSelector: |
16 | kubernetes.io/arch: amd64 |
17 | containers: |
18 | - name: kibana |
19 | image: harbor.zjhw.com/library/kibana:v2 |
20 | imagePullPolicy: Always |
21 | ports: |
22 | - containerPort: 5601 |
23 | --- |
24 | apiVersion: v1 |
25 | kind: Service |
26 | metadata: |
27 | name: kibana |
28 | labels: |
29 | app: kibana |
30 | spec: |
31 | ports: |
32 | - port: 5601 |
33 | targetPort: 5601 |
34 | nodePort: 32000 |
35 | type: NodePort |
36 | selector: |
37 | app: kibana |