Slide 1

Slide 1 text

From Containers to Kubernetes Operators Philipp Krenn̴̴̴̴@xeraa ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 2

Slide 2 text

Developer ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 3

Slide 3 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 4

Slide 4 text

Who uses containers? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 5

Slide 5 text

Who uses containers in production? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 6

Slide 6 text

Who uses stateful containers? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 7

Slide 7 text

Who uses containers from Elastic? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 8

Slide 8 text

Agenda Docker images Docker Compose Helm Chart Kubernetes Operator ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 9

Slide 9 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Docker: the world's most heavily funded college project — Internal quote from Slack ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 12

Slide 12 text

! ̴̴ ̴ Containers are the new ZIP format to distribute software ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 13

Slide 13 text

One of many… RPM, DEB, TAR.GZ, MSI Ansible, Chef, Puppet ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 14

Slide 14 text

…but not without issues ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 15

Slide 15 text

Fallacy root and chmod 777 ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 16

Slide 16 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 17

Slide 17 text

The container runs Elasticsearch as user elasticsearch using uid:gid 1000:0. https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Fallacy Host mutation ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 22

Slide 22 text

Those who do not understand Unix are condemned to reinvent it, poorly. — Henry Spencer ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 23

Slide 23 text

Fallacy :latest ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

:7 and :7.5? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 26

Slide 26 text

Fallacy Runtime mutation ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 27

Slide 27 text

Feature Request if [ -f /custom/user_init.sh ] then . /custom/user_init.sh fi Or customization through environment variables ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 28

Slide 28 text

Dockerfile ARG ELASTIC_VERSION FROM docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION} RUN bin/elasticsearch-plugin install analysis-phonetic --batch ARG ELASTIC_VERSION RUN bin/elasticsearch-plugin install \ https://github.com/spinscale/elasticsearch-ingest-langdetect/releases/download/ ${ELASTIC_VERSION}.1/ingest-langdetect-${ELASTIC_VERSION}.1.zip --batch ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 29

Slide 29 text

Generate Keystore $ docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \ -v /Users/philipp/Desktop/demo/config/:/usr/share/elasticsearch/config/ \ -it docker.elastic.co/elasticsearch/elasticsearch:7.5.2 /bin/bash [root@1006ed50b646 elasticsearch]# ./bin/elasticsearch-keystore create Created elasticsearch keystore in /usr/share/elasticsearch/config [root@1006ed50b646 elasticsearch]# ./bin/elasticsearch-keystore add test Enter value for test: [root@1006ed50b646 elasticsearch]# exit exit $ cat config/elasticsearch.keystore ??lelasticsearch.keystore?@g?o!?$?K?Lf?w?VAEŠԨm?[?a6?B??? y?,!В}??Ħ?ǣ?AU=?C?:?o? ?W?O8?}U?;p?ӷ???cQ????7?JY? 2A?:???ZUY??2V?9?ϧ??(??0?q\ ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 30

Slide 30 text

Mount Keystore Docker Compose elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION} secrets: - source: elasticsearch.keystore target: /usr/share/elasticsearch/config/elasticsearch.keystore ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 31

Slide 31 text

Fallacy Base image ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 32

Slide 32 text

Common base image since 5.4+ CentOS 7 ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 33

Slide 33 text

Upside Similar setup Shared layers ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 34

Slide 34 text

Upside JVM large anyway glibc tested ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 35

Slide 35 text

Downside Size ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 36

Slide 36 text

Does it matter? Stateful vs Stateless ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 37

Slide 37 text

Red Hat Universal Base Image (UBI) ubi-minimal:7.7 ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 38

Slide 38 text

Windows?! ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 39

Slide 39 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 40

Slide 40 text

Who uses Docker Compose? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 41

Slide 41 text

More than development / demo? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 42

Slide 42 text

--- version: '2' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:$ELASTIC_VERSION environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.type=single-node mem_limit: 1g volumes: - esdata:/usr/share/elasticsearch/data ports: - 9200:9200 kibana: image: docker.elastic.co/kibana/kibana:$ELASTIC_VERSION links: - elasticsearch ports: - 5601:5601 volumes: esdata: driver: local

Slide 43

Slide 43 text

Deprecated https://github.com/elastic/stack-docker ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 44

Slide 44 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 45

Slide 45 text

Who uses Kubernetes? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 46

Slide 46 text

Kubernetes is the answer. What was the question? — https://twitter.com/charlesfitz/status/ 1068203930683752448 ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 47

Slide 47 text

Who uses Swarm? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 48

Slide 48 text

Who uses Nomad? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 49

Slide 49 text

Who uses Mesos? ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 50

Slide 50 text

Static configuration to deploy resources to K8s ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 53

Slide 53 text

…lots of it ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 54

Slide 54 text

Fun with YAML http://www.yamllint.com ports: - 80:80 - 20:20 ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 55

Slide 55 text

Fun with YAML https://docs.docker.com/compose/compose-file/#short-syntax-1 ports: - "80:80" - 73200 ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 56

Slide 56 text

Kubernetes 1.8 allows dots in env vars https://github.com/kubernetes/kubernetes/issues/2707 ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 57

Slide 57 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 58

Slide 58 text

Advanced package management with support for templating and more complex resources ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 59

Slide 59 text

Building on existing Kubernetes primitives like StatefulSet, Service, Deployment,… ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 60

Slide 60 text

Elastic Helm Charts (Beta) Elasticsearch, Kibana, Filebeat, Metricbeat https://github.com/elastic/helm-charts ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 61

Slide 61 text

StatefulSet (STS) By default rolling upgrade Waiting for cluster health being green after each instance is updated ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 62

Slide 62 text

Tested on GKE Default storage pd-ssd (network attached) Kubernetes >=1.10 supports Local PersistentVolumes for increased performance ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 63

Slide 63 text

Un-Opinionated Expose environment variables & mount secrets Multiple upgrade strategies ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 64

Slide 64 text

Minikube Example https://github.com/elastic/helm-charts/tree/master/elasticsearch/examples/ minikube helm repo add elastic https://helm.elastic.co helm install --name elasticsearch elastic/elasticsearch [--set imageTag=7.5.2] minikube addons enable default-storageclass minikube addons enable storage-provisioner cd examples/minikube make ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 65

Slide 65 text

--- # Permit co-located instances for solitary minikube virtual machines antiAffinity: "soft" # Shrink default JVM heap esJavaOpts: "-Xmx128m -Xms128m" # Allocate smaller chunks of memory per pod resources: requests: cpu: "100m" memory: "512M" limits: cpu: "1000m" memory: "512M" # Request smaller persistent volumes volumeClaimTemplate: accessModes: [ "ReadWriteOnce" ] storageClassName: "standard" resources: requests: storage: 100M

Slide 66

Slide 66 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 67

Slide 67 text

Expands K8s interfaces and allows to customize management of applications ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 68

Slide 68 text

Custom Resource Definition (CRD) Think: Elasticsearch, Kibana, APM Contrast: Built-in resources like Pods, Services, Secrets, StatefulSets,… ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 69

Slide 69 text

Custom Controller Brings CRDs to "life" (reconciliation loop) Upgrades, secrets, certificate management,… ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 70

Slide 70 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 71

Slide 71 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 72

Slide 72 text

Elastic Operator Elasticsearch, Kibana, APM Server https://github.com/elastic/cloud-on-k8s ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 73

Slide 73 text

Golang 1.13 Kubebuilder 2 SDK for building Kubernetes APIs using CRDs Kustomize Generate patched CRDs for specific flavors ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 74

Slide 74 text

Opinionated Encode best practices & operational knowledge Built-in certificate management, security,… ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 75

Slide 75 text

Example Opinions Scale down: Drain nodes first Upgrade: Disable shard allocation ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 76

Slide 76 text

You Can Still Shoot Yourself in the Foot Configure 0 replicas and do an upgrade for example ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 77

Slide 77 text

Running on Minikube minikube config set memory 16384 minikube config set cpus 4 minikube start ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 78

Slide 78 text

Running on Minikube # Get the current version kubectl apply -f https://download.elastic.co/downloads/eck/1.0.0/all-in-one.yaml # Monitor logs kubectl -n elastic-system logs -f statefulset.apps/elastic-operator # Deploy kubectl apply -f apm_es_kibana.yaml ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 79

Slide 79 text

--- apiVersion: elasticsearch.k8s.elastic.co/v1beta1 kind: Elasticsearch metadata: name: elasticsearch-sample spec: version: 7.5.2 nodes: - nodeCount: 1 podTemplate: spec: containers: - name: elasticsearch resources: limits: memory: 2Gi volumeClaimTemplates: - metadata: name: data spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi

Slide 80

Slide 80 text

--- apiVersion: apm.k8s.elastic.co/v1beta1 kind: ApmServer metadata: name: apm-server-sample spec: version: 7.5.2 nodeCount: 1 elasticsearchRef: name: "elasticsearch-sample" ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 81

Slide 81 text

--- apiVersion: kibana.k8s.elastic.co/v1beta1 kind: Kibana metadata: name: kibana-sample spec: version: 7.5.2 nodeCount: 1 elasticsearchRef: name: "elasticsearch-sample" ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 82

Slide 82 text

Running on Minikube # Check status kubectl get elasticsearch,kibana,apmserver # Expose Kibana kubectl port-forward service/kibana-sample-kb-http 5601 # Get the credentials echo `kubectl get secret elasticsearch-sample-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode` ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 83

Slide 83 text

Changes Instance size / number, version,… kubectl apply -f apm_es_kibana.yaml ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 84

Slide 84 text

̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 85

Slide 85 text

Support GKE (Google Cloud) EKS (AWS) AKS (Azure) OpenShift (Redhat) ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 86

Slide 86 text

StatefulSets Rolling Upgrades with Volume reuse "Standard" way to run stateful workloads — stable network ID, stable data volume that is re-attachable during rolling upgrades ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 87

Slide 87 text

Storage (1) Persistent Volumes (default) Local PV, Cloud vendor specific network attached ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 88

Slide 88 text

Storage (2) EmptyDir / HostPath Not durable, no enforceable quota, may lead to eviction ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 89

Slide 89 text

Storage (Future) Container Storage Interface (CSI) ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 90

Slide 90 text

Deployment CRDs require cluster admin level permissions to install Privileged Containers — Elasticsearch host kernel settings like vm.max_map_count ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 91

Slide 91 text

Global Namespace ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 92

Slide 92 text

Single Namespace ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 93

Slide 93 text

Other Operators MongoDB, Kafka, Redis, CockroachDB,… Operator "Marketplaces": https://operatorhub.io ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

Conclusion ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 96

Slide 96 text

"Containers are disrupting the industry!" ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 97

Slide 97 text

"Can I run Elasticsearch on Docker or Kubernetes?" ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 98

Slide 98 text

"Should I run Elasticsearch on Docker or Kubernetes?" ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 99

Slide 99 text

Kubernetes Paradox "You don't have an Operator? That's a blocker!" ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 100

Slide 100 text

Kubernetes Paradox "So you run the majority of your apps on Kubernetes?" "Actually, we are just starting with Kubernetes and have 2% of our workloads on it." ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 101

Slide 101 text

Helm Charts vs Operator ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa

Slide 102

Slide 102 text

Questions & Discussion Philipp Krenn̴@xeraa ̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴̴@xeraa