initial commit
This commit is contained in:
commit
6ddd5c4d32
20
LICENSE
Normal file
20
LICENSE
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2024 Shane Wadleigh
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
5
README.md
Normal file
5
README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# ansible-role-elasticsearch-k8s
|
||||||
|
|
||||||
|
Ansible role for deploying a statefulset for elasticsearch cluster
|
||||||
|
|
||||||
|
- https://www.elastic.co/
|
116
defaults/main.yml
Normal file
116
defaults/main.yml
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
---
|
||||||
|
elasticsearch_deployment_name: elasticsearch
|
||||||
|
elasticsearch_namespace: "{{ elasticsearch_deployment_name }}"
|
||||||
|
|
||||||
|
# elasticsearch_image: docker.elastic.co/elasticsearch/elasticsearch-wolfi
|
||||||
|
elasticsearch_image: docker.elastic.co/elasticsearch/elasticsearch
|
||||||
|
elasticsearch_image_tag: latest
|
||||||
|
|
||||||
|
# KUBERNETES SETTINGS
|
||||||
|
elasticsearch_replicas: 3
|
||||||
|
elasticsearch_min_available: 2
|
||||||
|
elasticsearch_max_skew: 1
|
||||||
|
elasticsearch_max_unavailable: 1
|
||||||
|
|
||||||
|
# only update pods N-1..2; leave 0..1 untouched
|
||||||
|
# elasticsearch_rollout_partition: 2
|
||||||
|
|
||||||
|
# requiredDuringSchedulingIgnoredDuringExecution,preferredDuringSchedulingIgnoredDuringExecution
|
||||||
|
elasticsearch_anti_affinity_type: preferredDuringSchedulingIgnoredDuringExecution
|
||||||
|
|
||||||
|
# DoNotSchedule, ScheduleAnyway
|
||||||
|
elasticsearch_topology_constraint: ScheduleAnyway
|
||||||
|
|
||||||
|
elasticsearch_labels:
|
||||||
|
app.kubernetes.io/name: "{{ elasticsearch_deployment_name }}"
|
||||||
|
app.kubernetes.io/managed-by: ansible
|
||||||
|
|
||||||
|
elasticsearch_selector:
|
||||||
|
app.kubernetes.io/name: "{{ elasticsearch_deployment_name }}"
|
||||||
|
|
||||||
|
elasticsearch_strategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
rollingUpdate:
|
||||||
|
maxUnavailable: "{{ elasticsearch_max_unavailable }}"
|
||||||
|
|
||||||
|
elasticsearch_container_resources:
|
||||||
|
requests:
|
||||||
|
cpu: "500m"
|
||||||
|
memory: "2Gi"
|
||||||
|
limits:
|
||||||
|
cpu: "2"
|
||||||
|
memory: "4Gi"
|
||||||
|
|
||||||
|
elasticsearch_health_check:
|
||||||
|
- curl
|
||||||
|
- -u
|
||||||
|
- "elastic:${ELASTIC_PASSWORD}"
|
||||||
|
- --insecure
|
||||||
|
- https://localhost:9200/_cluster/health
|
||||||
|
|
||||||
|
# security and resource limits
|
||||||
|
# elasticsearch_pod_security_context:
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# fsGroup: 1000
|
||||||
|
# seccompProfile: { type: RuntimeDefault }
|
||||||
|
|
||||||
|
# elasticsearch_container_security_context:
|
||||||
|
# allowPrivilegeEscalation: false
|
||||||
|
# readOnlyRootFilesystem: true
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# seccompProfile: { type: RuntimeDefault }
|
||||||
|
|
||||||
|
# ELASTICSEARCH SETTINGS
|
||||||
|
elasticsearch_http_port: 9200
|
||||||
|
elasticsearch_transport_port: 9300
|
||||||
|
elasticsearch_cluster_name: elasticsearch-cluster
|
||||||
|
elasticsearch_java_opts: "-Xms1g -Xmx1g"
|
||||||
|
elasticsearch_security: "true"
|
||||||
|
elasticsearch_storage_class: local-path
|
||||||
|
elasticsearch_storage_size: "10Gi"
|
||||||
|
|
||||||
|
elasticsearch_cluster_nodes:
|
||||||
|
- "elasticsearch-0"
|
||||||
|
- "elasticsearch-1"
|
||||||
|
- "elasticsearch-2"
|
||||||
|
|
||||||
|
elasticsearch_seed_hosts:
|
||||||
|
- "elasticsearch-0.elasticsearch-transport.{{ elasticsearch_namespace }}.svc.cluster.local"
|
||||||
|
- "elasticsearch-1.elasticsearch-transport.{{ elasticsearch_namespace }}.svc.cluster.local"
|
||||||
|
- "elasticsearch-2.elasticsearch-transport.{{ elasticsearch_namespace }}.svc.cluster.local"
|
||||||
|
|
||||||
|
elasticsearch_cert_names:
|
||||||
|
- "elasticsearch-http.{{ elasticsearch_namespace }}.svc.cluster.local"
|
||||||
|
- "elasticsearch-transport.{{ elasticsearch_namespace }}.svc.cluster.local"
|
||||||
|
- "*.elasticsearch-http.{{ elasticsearch_namespace }}.svc.cluster.local"
|
||||||
|
- "*.elasticsearch-transport.{{ elasticsearch_namespace }}.svc.cluster.local"
|
||||||
|
|
||||||
|
elasticsearch_node_roles:
|
||||||
|
- data
|
||||||
|
- master
|
||||||
|
|
||||||
|
# /usr/share/elasticsearch/config/certs/elastic-stack-ca.p12
|
||||||
|
elasticsearch_configs:
|
||||||
|
ES_JAVA_OPTS: "{{ elasticsearch_java_opts }}"
|
||||||
|
network.host: "0.0.0.0"
|
||||||
|
cluster.name: "{{ elasticsearch_cluster_name }}"
|
||||||
|
cluster.initial_master_nodes: "{{ elasticsearch_cluster_nodes | join(',') }}"
|
||||||
|
discovery.seed_hosts: "{{ elasticsearch_seed_hosts | join(',') }}"
|
||||||
|
node.roles: "{{ elasticsearch_node_roles | join(',') }}"
|
||||||
|
node.store.allow_mmap: "false"
|
||||||
|
|
||||||
|
xpack.license.self_generated.type: "basic"
|
||||||
|
xpack.security.enabled: "{{ elasticsearch_security | ternary('true', 'false') }}"
|
||||||
|
xpack.security.enrollment.enabled: "false"
|
||||||
|
|
||||||
|
xpack.security.http.ssl.enabled: "true"
|
||||||
|
xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
|
||||||
|
xpack.security.http.ssl.keystore.password: "{{ elastic_cert_password | d(omit) }}"
|
||||||
|
|
||||||
|
xpack.security.transport.ssl.enabled: "true"
|
||||||
|
xpack.security.transport.ssl.verification_mode: certificate
|
||||||
|
xpack.security.transport.ssl.client_authentication: required
|
||||||
|
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
|
||||||
|
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
|
||||||
|
xpack.security.transport.ssl.keystore.password: "{{ elastic_cert_password | d(omit) }}"
|
||||||
|
xpack.security.transport.ssl.truststore.password: "{{ elastic_cert_password | d(omit) }}"
|
28
handlers/main.yml
Normal file
28
handlers/main.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
- name: ELASTICSEARCH HANDLER check for existing deployment {{ elasticsearch_deployment_name }}
|
||||||
|
listen: elasticsearch-restart
|
||||||
|
kubernetes.core.k8s_info:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
name: "{{ elasticsearch_deployment_name }}"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
register: elasticsearch_deploy_info
|
||||||
|
failed_when: false
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH HANDLER restart deployment {{ elasticsearch_deployment_name }}
|
||||||
|
listen: elasticsearch-restart
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
name: "{{ elasticsearch_deployment_name }}"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
state: patched
|
||||||
|
definition:
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kubectl.kubernetes.io/restartedAt: "{{ lookup('pipe', 'date -u +%Y-%m-%dT%H:%M:%SZ') }}"
|
||||||
|
when:
|
||||||
|
- elasticsearch_deploy_info.resources | length > 0
|
40
meta/main.yml
Normal file
40
meta/main.yml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
dependencies: []
|
||||||
|
|
||||||
|
galaxy_info:
|
||||||
|
role_name: elasticsearch_k8s
|
||||||
|
author: srw
|
||||||
|
description: Ansible role for deploying elasticsearch cluster to kubernetes
|
||||||
|
company: "NMD, LLC"
|
||||||
|
license: "license (BSD, MIT)"
|
||||||
|
min_ansible_version: "2.10"
|
||||||
|
platforms:
|
||||||
|
- name: Fedora
|
||||||
|
versions:
|
||||||
|
- all
|
||||||
|
- name: Debian
|
||||||
|
versions:
|
||||||
|
- buster
|
||||||
|
- bullseye
|
||||||
|
- bookworm
|
||||||
|
- trixie
|
||||||
|
- name: Ubuntu
|
||||||
|
versions:
|
||||||
|
- bionic
|
||||||
|
- focal
|
||||||
|
- jammy
|
||||||
|
- name: Alpine
|
||||||
|
version:
|
||||||
|
- all
|
||||||
|
- name: ArchLinux
|
||||||
|
versions:
|
||||||
|
- all
|
||||||
|
galaxy_tags:
|
||||||
|
- server
|
||||||
|
- system
|
||||||
|
- containers
|
||||||
|
- kubernetes
|
||||||
|
- k8s
|
||||||
|
- k3s
|
||||||
|
- rke2
|
||||||
|
- elasticsearch
|
130
tasks/deploy.yml
Normal file
130
tasks/deploy.yml
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
---
|
||||||
|
- name: ELASTICSEARCH DEPLOY
|
||||||
|
tags:
|
||||||
|
- elasticsearch
|
||||||
|
- elasticsearch-deploy
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH DEPLOY create PodDisruptionBudget
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: "{{ elasticsearch_state | d('present') }}"
|
||||||
|
definition:
|
||||||
|
apiVersion: policy/v1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: "{{ elasticsearch_deployment_name }}"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
spec:
|
||||||
|
minAvailable: "{{ elasticsearch_min_available }}"
|
||||||
|
selector:
|
||||||
|
matchLabels: "{{ elasticsearch_selector }}"
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH DEPLOY create StatefulSet
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: "{{ elasticsearch_state | d('present') }}"
|
||||||
|
server_side_apply:
|
||||||
|
field_manager: ansible
|
||||||
|
force_conflicts: true
|
||||||
|
wait: true
|
||||||
|
wait_timeout: 600
|
||||||
|
definition:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: "{{ elasticsearch_deployment_name }}"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
spec:
|
||||||
|
serviceName: elasticsearch-transport
|
||||||
|
replicas: "{{ elasticsearch_replicas }}"
|
||||||
|
strategy: "{{ elasticsearch_strategy }}"
|
||||||
|
updateStrategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
podManagementPolicy: Parallel
|
||||||
|
selector:
|
||||||
|
matchLabels: "{{ elasticsearch_selector }}"
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
annotations:
|
||||||
|
rollout.elasticsearch/token: "{{ elasticsearch_rollout_token | d(omit) }}"
|
||||||
|
spec:
|
||||||
|
topologySpreadConstraints:
|
||||||
|
- maxSkew: "{{ elasticsearch_max_skew }}"
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
whenUnsatisfiable: "{{ elasticsearch_topology_constraint }}"
|
||||||
|
labelSelector:
|
||||||
|
matchLabels: "{{ elasticsearch_selector }}"
|
||||||
|
affinity:
|
||||||
|
podAntiAffinity:
|
||||||
|
"{{ elasticsearch_anti_affinity_type }}":
|
||||||
|
- labelSelector:
|
||||||
|
matchLabels: "{{ elasticsearch_selector }}"
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
securityContext: "{{ elasticsearch_pod_security_context | d(omit) }}"
|
||||||
|
initContainers:
|
||||||
|
- name: increase-fd-ulimits
|
||||||
|
image: busybox:1.36
|
||||||
|
command: ["sh","-c","ulimit -n 65536 || true"]
|
||||||
|
containers:
|
||||||
|
|
||||||
|
- name: elasticsearch
|
||||||
|
image: "{{ elasticsearch_image }}:{{ elasticsearch_image_tag }}"
|
||||||
|
securityContext: "{{ elasticsearch_container_security_context | d(omit) }}"
|
||||||
|
resources: "{{ elasticsearch_container_resources | d(omit) }}"
|
||||||
|
env:
|
||||||
|
- name: node.name
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
ports:
|
||||||
|
- name: transport
|
||||||
|
containerPort: "{{ elasticsearch_transport_port }}"
|
||||||
|
- name: http
|
||||||
|
containerPort: "{{ elasticsearch_http_port }}"
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /usr/share/elasticsearch/data
|
||||||
|
- name: logs
|
||||||
|
mountPath: /usr/share/elasticsearch/logs
|
||||||
|
- name: certs
|
||||||
|
mountPath: /usr/share/elasticsearch/config/certs
|
||||||
|
readOnly: true
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command: "{{ elasticsearch_health_check }}"
|
||||||
|
initialDelaySeconds: 60
|
||||||
|
periodSeconds: 20
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 6
|
||||||
|
readinessProbe:
|
||||||
|
exec:
|
||||||
|
command: "{{ elasticsearch_health_check }}"
|
||||||
|
initialDelaySeconds: 20
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 12
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: "{{ elasticsearch_deployment_name }}-configs"
|
||||||
|
- secretRef:
|
||||||
|
name: "{{ elasticsearch_deployment_name }}-secrets"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- name: logs
|
||||||
|
emptyDir: {}
|
||||||
|
- name: certs
|
||||||
|
secret:
|
||||||
|
secretName: "{{ elasticsearch_certs_secret_name | d('elasticsearch-certs') }}"
|
||||||
|
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: data
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
spec:
|
||||||
|
accessModes: ["ReadWriteOnce"]
|
||||||
|
storageClassName: "{{ elasticsearch_storage_class }}"
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ elasticsearch_storage_size }}"
|
105
tasks/environment.yml
Normal file
105
tasks/environment.yml
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
---
|
||||||
|
- name: ELASTICSEARCH ENVIRONMENT SETUP
|
||||||
|
tags:
|
||||||
|
- elasticsearch
|
||||||
|
- elasticsearch-env
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH ENVIRONMENT create configmaps
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: "{{ elasticsearch_state | d('present') }}"
|
||||||
|
server_side_apply:
|
||||||
|
field_manager: ansible
|
||||||
|
force_conflicts: true
|
||||||
|
definition:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: "{{ elasticsearch_deployment_name }}-configs"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
data: "{{ elasticsearch_configs }}"
|
||||||
|
notify:
|
||||||
|
- elasticsearch-restart
|
||||||
|
when:
|
||||||
|
- elasticsearch_configs is defined
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH ENVIRONMENT base64 encode secrets
|
||||||
|
no_log: true
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
elasticsearch_secrets_b64: "{{ elasticsearch_secrets_b64 | default({}) | combine({item.key: (item.value | b64encode)}) }}"
|
||||||
|
loop: "{{ elasticsearch_secrets | dict2items }}"
|
||||||
|
|
||||||
|
# - name: elasticsearch ENVIRONMENT verify secrets
|
||||||
|
# debug:
|
||||||
|
# msg:
|
||||||
|
# - "{{ elasticsearch_secrets }}"
|
||||||
|
# - "{{ elasticsearch_secrets_b64 }}"
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH ENVIRONMENT create secrets
|
||||||
|
no_log: true
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: "{{ elasticsearch_state | d('present') }}"
|
||||||
|
server_side_apply:
|
||||||
|
field_manager: ansible
|
||||||
|
force_conflicts: true
|
||||||
|
definition:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: "{{ elasticsearch_deployment_name }}-secrets"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
type: Opaque
|
||||||
|
data: "{{ elasticsearch_secrets_b64 }}"
|
||||||
|
notify:
|
||||||
|
- elasticsearch-restart
|
||||||
|
when:
|
||||||
|
- elasticsearch_secrets is defined
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH CERTGEN (OpenSSL local)
|
||||||
|
when: elasticsearch_cert_secret.resources | length == 0
|
||||||
|
tags:
|
||||||
|
- elasticsearch
|
||||||
|
- elasticsearch-certs
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH CERTGEN create temporary directory for cert generation
|
||||||
|
ansible.builtin.tempfile:
|
||||||
|
state: directory
|
||||||
|
register: temp_dir
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH CERTGEN create CA and certificates via local podman
|
||||||
|
ansible.builtin.shell: >
|
||||||
|
podman run --rm --user $(id -u) --userns keep-id -v {{ temp_dir.path }}:/certs "{{ elasticsearch_image }}:{{ elasticsearch_image_tag }}" /bin/sh -c '
|
||||||
|
elasticsearch-certutil ca --silent --out /certs/elastic-stack-ca.p12 --pass "{{ elastic_cert_password | d(omit) }}" &&
|
||||||
|
elasticsearch-certutil cert --silent --ca /certs/elastic-stack-ca.p12 --ca-pass "{{ elastic_cert_password | d(omit) }}" --out /certs/elastic-certificates.p12 --pass "{{ elastic_cert_password | d(omit) }}" {% for dns_name in elasticsearch_cert_names %}--dns "{{ dns_name }}" {% endfor %}&&
|
||||||
|
echo "Cert generation complete"'
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH CERTGEN read generated cert files
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "{{ item }}"
|
||||||
|
register: cert_files
|
||||||
|
loop:
|
||||||
|
- "{{ temp_dir.path }}/elastic-stack-ca.p12"
|
||||||
|
- "{{ temp_dir.path }}/elastic-certificates.p12"
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH CERTGEN create cert secret
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: present
|
||||||
|
definition:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: "{{ elasticsearch_certs_secret_name | d('elasticsearch-certs') }}"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
elastic-stack-ca.p12: "{{ cert_files.results[0].content }}"
|
||||||
|
elastic-certificates.p12: "{{ cert_files.results[1].content }}"
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH CERTGEN clean up temporary directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ temp_dir.path }}"
|
||||||
|
state: absent
|
43
tasks/main.yml
Normal file
43
tasks/main.yml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
- name: ELASTICSEARCH KUBERNETES DEPLOYMENT
|
||||||
|
delegate_to: localhost
|
||||||
|
connection: local
|
||||||
|
become: false
|
||||||
|
tags: never
|
||||||
|
block:
|
||||||
|
- name: ELASTICSEARCH create namespace {{ elasticsearch_namespace }}
|
||||||
|
tags: [elasticsearch, elasticsearch-env, elasticsearch-certs, elasticsearch-services, elasticsearch-deploy]
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: present
|
||||||
|
definition:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: "{{ elasticsearch_namespace }}"
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH check if certs exist
|
||||||
|
tags: [elasticsearch, elasticsearch-env, elasticsearch-certs, elasticsearch-services, elasticsearch-deploy]
|
||||||
|
kubernetes.core.k8s_info:
|
||||||
|
api_version: v1
|
||||||
|
kind: Secret
|
||||||
|
name: "{{ elasticsearch_certs_secret_name | d('elasticsearch-certs') }}"
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
register: elasticsearch_cert_secret
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH setup environment
|
||||||
|
ansible.builtin.include_tasks: environment.yml
|
||||||
|
tags:
|
||||||
|
- elasticsearch
|
||||||
|
- elasticsearch-env
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH create services
|
||||||
|
ansible.builtin.include_tasks: services.yml
|
||||||
|
tags:
|
||||||
|
- elasticsearch
|
||||||
|
- elasticsearch-services
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH create statefulset
|
||||||
|
ansible.builtin.include_tasks: deploy.yml
|
||||||
|
tags:
|
||||||
|
- elasticsearch
|
||||||
|
- elasticsearch-deploy
|
43
tasks/services.yml
Normal file
43
tasks/services.yml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
- name: ELASTICSEARCH SERVICES
|
||||||
|
tags:
|
||||||
|
- elasticsearch
|
||||||
|
- elasticsearch-services
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH SERVICES create headless transport service
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: "{{ elasticsearch_state | d('present') }}"
|
||||||
|
definition:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: elasticsearch-transport
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
publishNotReadyAddresses: true
|
||||||
|
selector: "{{ elasticsearch_selector }}"
|
||||||
|
ports:
|
||||||
|
- name: transport
|
||||||
|
port: "{{ elasticsearch_transport_port }}"
|
||||||
|
targetPort: "{{ elasticsearch_transport_port }}"
|
||||||
|
|
||||||
|
- name: ELASTICSEARCH SERVICES create http service
|
||||||
|
kubernetes.core.k8s:
|
||||||
|
state: "{{ elasticsearch_state | d('present') }}"
|
||||||
|
definition:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: elasticsearch-http
|
||||||
|
namespace: "{{ elasticsearch_namespace }}"
|
||||||
|
labels: "{{ elasticsearch_labels }}"
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector: "{{ elasticsearch_selector }}"
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: "{{ elasticsearch_http_port }}"
|
||||||
|
targetPort: "{{ elasticsearch_http_port }}"
|
Loading…
Reference in New Issue
Block a user