271 lines
7.9 KiB
YAML
271 lines
7.9 KiB
YAML
---
|
|
# Source: elasticsearch/templates/poddisruptionbudget.yaml
|
|
apiVersion: policy/v1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: "elasticsearch-master-pdb"
|
|
spec:
|
|
maxUnavailable: 1
|
|
selector:
|
|
matchLabels:
|
|
app: "elasticsearch-master"
|
|
---
|
|
# Source: elasticsearch/templates/secret.yaml
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: elasticsearch-master-credentials
|
|
labels:
|
|
heritage: "Helm"
|
|
release: "elasticsearch"
|
|
chart: "elasticsearch"
|
|
app: "elasticsearch-master"
|
|
type: Opaque
|
|
data:
|
|
username: ZWxhc3RpYw==
|
|
password: R1RSTlpIQ0pUaUdKMkNmWQ==
|
|
---
|
|
# Source: elasticsearch/templates/service.yaml
|
|
kind: Service
|
|
apiVersion: v1
|
|
metadata:
|
|
name: elasticsearch-master
|
|
labels:
|
|
heritage: "Helm"
|
|
release: "elasticsearch"
|
|
chart: "elasticsearch"
|
|
app: "elasticsearch-master"
|
|
annotations:
|
|
{}
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
release: "elasticsearch"
|
|
chart: "elasticsearch"
|
|
app: "elasticsearch-master"
|
|
publishNotReadyAddresses: false
|
|
ports:
|
|
- name: http
|
|
protocol: TCP
|
|
port: 9200
|
|
- name: transport
|
|
protocol: TCP
|
|
port: 9300
|
|
---
|
|
# Source: elasticsearch/templates/service.yaml
|
|
kind: Service
|
|
apiVersion: v1
|
|
metadata:
|
|
name: elasticsearch-master-headless
|
|
labels:
|
|
heritage: "Helm"
|
|
release: "elasticsearch"
|
|
chart: "elasticsearch"
|
|
app: "elasticsearch-master"
|
|
annotations:
|
|
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
|
|
spec:
|
|
clusterIP: None # This is needed for statefulset hostnames like elasticsearch-0 to resolve
|
|
# Create endpoints also if the related pod isn't ready
|
|
publishNotReadyAddresses: true
|
|
selector:
|
|
app: "elasticsearch-master"
|
|
ports:
|
|
- name: http
|
|
port: 9200
|
|
- name: transport
|
|
port: 9300
|
|
---
|
|
# Source: elasticsearch/templates/statefulset.yaml
|
|
apiVersion: apps/v1
|
|
kind: StatefulSet
|
|
metadata:
|
|
name: elasticsearch-master
|
|
labels:
|
|
heritage: "Helm"
|
|
release: "elasticsearch"
|
|
chart: "elasticsearch"
|
|
app: "elasticsearch-master"
|
|
annotations:
|
|
esMajorVersion: "8"
|
|
spec:
|
|
serviceName: elasticsearch-master-headless
|
|
selector:
|
|
matchLabels:
|
|
app: "elasticsearch-master"
|
|
replicas: 1
|
|
podManagementPolicy: Parallel
|
|
updateStrategy:
|
|
type: RollingUpdate
|
|
volumeClaimTemplates:
|
|
- apiVersion: v1
|
|
kind: PersistentVolumeClaim
|
|
metadata:
|
|
name: elasticsearch-master
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
resources:
|
|
requests:
|
|
storage: 30Gi
|
|
template:
|
|
metadata:
|
|
name: "elasticsearch-master"
|
|
labels:
|
|
release: "elasticsearch"
|
|
chart: "elasticsearch"
|
|
app: "elasticsearch-master"
|
|
annotations:
|
|
|
|
spec:
|
|
securityContext:
|
|
fsGroup: 1000
|
|
runAsUser: 1000
|
|
automountServiceAccountToken: true
|
|
affinity:
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchExpressions:
|
|
- key: app
|
|
operator: In
|
|
values:
|
|
- "elasticsearch-master"
|
|
topologyKey: kubernetes.io/hostname
|
|
terminationGracePeriodSeconds: 120
|
|
volumes:
|
|
enableServiceLinks: true
|
|
initContainers:
|
|
- name: configure-sysctl
|
|
securityContext:
|
|
runAsUser: 0
|
|
privileged: true
|
|
image: "docker.io/library/elasticsearch:9.1.3"
|
|
imagePullPolicy: "IfNotPresent"
|
|
command: ["sysctl", "-w", "vm.max_map_count=262144"]
|
|
resources:
|
|
{}
|
|
|
|
containers:
|
|
- name: "elasticsearch"
|
|
securityContext:
|
|
capabilities:
|
|
drop:
|
|
- ALL
|
|
runAsNonRoot: true
|
|
runAsUser: 1000
|
|
image: "docker.io/library/elasticsearch:9.1.3"
|
|
imagePullPolicy: "IfNotPresent"
|
|
readinessProbe:
|
|
exec:
|
|
command:
|
|
- bash
|
|
- -c
|
|
- |
|
|
set -e
|
|
|
|
# Exit if ELASTIC_PASSWORD in unset
|
|
if [ -z "${ELASTIC_PASSWORD}" ]; then
|
|
echo "ELASTIC_PASSWORD variable is missing, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
# If the node is starting up wait for the cluster to be ready (request params: "wait_for_status=green&timeout=1s" )
|
|
# Once it has started only check that the node itself is responding
|
|
START_FILE=/tmp/.es_start_file
|
|
|
|
# Disable nss cache to avoid filling dentry cache when calling curl
|
|
# This is required with Elasticsearch Docker using nss < 3.52
|
|
export NSS_SDB_USE_CACHE=no
|
|
|
|
http () {
|
|
local path="${1}"
|
|
local args="${2}"
|
|
set -- -XGET -s
|
|
|
|
if [ "$args" != "" ]; then
|
|
set -- "$@" $args
|
|
fi
|
|
|
|
set -- "$@" -u "elastic:${ELASTIC_PASSWORD}"
|
|
|
|
curl --output /dev/null -k "$@" "http://127.0.0.1:9200${path}"
|
|
}
|
|
|
|
if [ -f "${START_FILE}" ]; then
|
|
echo 'Elasticsearch is already running, lets check the node is healthy'
|
|
HTTP_CODE=$(http "/" "-w %{http_code}")
|
|
RC=$?
|
|
if [[ ${RC} -ne 0 ]]; then
|
|
echo "curl --output /dev/null -k -XGET -s -w '%{http_code}' \${BASIC_AUTH} http://127.0.0.1:9200/ failed with RC ${RC}"
|
|
exit ${RC}
|
|
fi
|
|
# ready if HTTP code 200, 503 is tolerable if ES version is 6.x
|
|
if [[ ${HTTP_CODE} == "200" ]]; then
|
|
exit 0
|
|
elif [[ ${HTTP_CODE} == "503" && "8" == "6" ]]; then
|
|
exit 0
|
|
else
|
|
echo "curl --output /dev/null -k -XGET -s -w '%{http_code}' \${BASIC_AUTH} http://127.0.0.1:9200/ failed with HTTP code ${HTTP_CODE}"
|
|
exit 1
|
|
fi
|
|
|
|
else
|
|
echo 'Waiting for elasticsearch cluster to become ready (request params: "wait_for_status=green&timeout=1s" )'
|
|
if http "/_cluster/health?wait_for_status=green&timeout=1s" "--fail" ; then
|
|
touch ${START_FILE}
|
|
exit 0
|
|
else
|
|
echo 'Cluster is not yet ready (request params: "wait_for_status=green&timeout=1s" )'
|
|
exit 1
|
|
fi
|
|
fi
|
|
failureThreshold: 3
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 10
|
|
successThreshold: 3
|
|
timeoutSeconds: 5
|
|
ports:
|
|
- name: http
|
|
containerPort: 9200
|
|
- name: transport
|
|
containerPort: 9300
|
|
resources:
|
|
limits:
|
|
cpu: 1000m
|
|
memory: 3Gi
|
|
requests:
|
|
cpu: 100m
|
|
memory: 2Gi
|
|
env:
|
|
- name: node.name
|
|
valueFrom:
|
|
fieldRef:
|
|
fieldPath: metadata.name
|
|
- name: cluster.initial_master_nodes
|
|
value: "elasticsearch-master-0,"
|
|
- name: node.roles
|
|
value: "master,data,data_content,data_hot,data_warm,data_cold,ingest,ml,remote_cluster_client,transform,"
|
|
- name: discovery.seed_hosts
|
|
value: "elasticsearch-master-headless"
|
|
- name: cluster.name
|
|
value: "elasticsearch"
|
|
- name: network.host
|
|
value: "0.0.0.0"
|
|
- name: ELASTIC_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: elasticsearch-master-credentials
|
|
key: password
|
|
- name: ES_JAVA_OPTS
|
|
value: "-Xms2g -Xmx2g"
|
|
- name: xpack.security.enabled
|
|
value: "false"
|
|
- name: http.cors.enabled
|
|
value: "true"
|
|
- name: http.cors.allow-origin
|
|
value: '*'
|
|
volumeMounts:
|
|
- name: "elasticsearch-master"
|
|
mountPath: /usr/share/elasticsearch/data
|