环境要求:k8s多节点集群,最好是kubesphere k8s集群,k8s需要使用StorageClass
实现:
vim es.yaml
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: elasticsearch-pdb
spec:
selector:
matchLabels:
app: elasticsearch
maxUnavailable: 1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
spec:
serviceName: elasticsearch-hs
replicas: 3
selector:
matchLabels:
app: elasticsearch
updateStrategy:
type: RollingUpdate
podManagementPolicy: Parallel
template:
metadata:
labels:
app: elasticsearch
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- elasticsearch
topologyKey: "kubernetes.io/hostname"
containers:
- name: elasticsearch
image: harbor.kp.com/keepwork/elasticsearch:7.5.0
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 0.01
memory: 2Gi
ports:
- containerPort: 9200
name: rest
protocol: TCP
- containerPort: 9300
name: inter-node
protocol: TCP
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
- name: plugins
mountPath: /usr/share/elasticsearch/plugins
env:
- name: cluster.name
value: k8s-logs
- name: node.name
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: discovery.zen.ping.unicast.hosts
value: "elasticsearch-0.elasticsearch-hs,elasticsearch-1.elasticsearch-hs,elasticsearch-2.elasticsearch-hs"
- name: discovery.zen.minimum_master_nodes
value: "2"
- name: cluster.initial_master_nodes #此参数es7以上才能设置
value: elasticsearch-0,elasticsearch-1
- name: ES_JAVA_OPTS
value: "-Xms1536m -Xmx1536m"
- name: TZ
value: "Asia/Shanghai"
initContainers:
- name: fix-permissions-data
image: registry.cn-hangzhou.aliyuncs.com/caosx-public/busybox:1.28.3
command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
securityContext:
privileged: true
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
- name: fix-permissions-plugins
image: registry.cn-hangzhou.aliyuncs.com/caosx-public/busybox:1.28.3
command: ["sh", "-c", "rm -fr /usr/share/elasticsearch/plugins/lost+found && chown -R 1000:1000 /usr/share/elasticsearch/plugins"]
securityContext:
privileged: true
volumeMounts:
- name: plugins
mountPath: /usr/share/elasticsearch/plugins
- name: increase-vm-max-map
image: registry.cn-hangzhou.aliyuncs.com/caosx-public/busybox:1.28.3
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
- name: increase-fd-ulimit
image: registry.cn-hangzhou.aliyuncs.com/caosx-public/busybox:1.28.3
command: ["sh", "-c", "ulimit -n 65536"]
securityContext:
privileged: true
volumeClaimTemplates:
- metadata:
name: data
labels:
app: elasticsearch
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: local
resources:
requests:
storage: 20Gi
- metadata:
name: plugins
labels:
app: elasticsearch
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: local
resources:
requests:
storage: 200Mi
---
kind: Service
apiVersion: v1
metadata:
name: elasticsearch-hs
labels:
app: elasticsearch
spec:
selector:
app: elasticsearch
clusterIP: None
ports:
- port: 9300
targetPort: 9300
---
kind: Service
apiVersion: v1
metadata:
name: elasticsearch-cs
labels:
app: elasticsearch
spec:
selector:
app: elasticsearch
ports:
- port: 9200
targetPort: 9200
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: elasticsearch-ingress
spec:
rules:
- host: elasticsearch.gdcattsoft2.com
http:
paths:
- path: /
backend:
serviceName: elasticsearch-cs
servicePort: 9200