Slide 1

Slide 1 text

PHP IN THE CONTAINER CLOUD MARTIN HELMICH MITTWALD CM SERVICE GmbH & Co. KG SLAC2018, BERLIN MAY 7th, 2018

Slide 2

Slide 2 text

This work is licensed under a Creative Commons Attribution- ShareAlike 4.0 International License. http://creativecommons.org/licenses/by-sa/4.0/

Slide 3

Slide 3 text

MARTIN HELMICH SOFTWARE & SYSTEMS ARCHITECT @ MITTWALD CM SERVICE LECTURER @ PHWT VECHTA http://stackoverflow.com/story/martinhelmich https://github.com/martin-helmich https://www.martin-helmich.de

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

CC-BY-SA, Atomic Taco https://www.flickr.com/photos/atomictaco/25016033688

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

catdoc pdftotext

Slide 10

Slide 10 text

catdoc pdftotext

Slide 11

Slide 11 text

WHY DOCKER?

Slide 12

Slide 12 text

WHY DOCKER? - EFFICIENCY - STANDARDIZED - STRONG COMMUNITY - DEVOPS SPIRIT & AUTOMATION

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

KUBERNETES

Slide 16

Slide 16 text

KUBERNETES - KUBER-WHAT!? - „GOOGLE SCALE“ - DEVOPS‘ DREAM

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

POD - 1(ISH) CONTAINER - SHORT-LIVED - DISPOSABLE KUBERNETES CORE CONCEPTS

Slide 19

Slide 19 text

apiVersion: v1 kind: Pod metadata: name: some-pod spec: containers: - name: web image: nginx ports: - containerPort: 80

Slide 20

Slide 20 text

$ kubectl apply -f pod.yaml pod "some-pod" created $ kubectl get pods NAME READY STATUS some-pod 1/1 Running apiVersion: v1 kind: Pod metadata: name: some-pod spec: containers: - name: web image: nginx ports: - containerPort: 80

Slide 21

Slide 21 text

KUBERNETES CORE CONCEPTS POD - 1(ISH) CONTAINER - SHORT-LIVED - DISPOSABLE REPLICA SET - MANAGES MULTIPLE PODS DEPLOYMENT - MANAGES MULTIPLE VERSIONS OF REPLICA SETS - ROLLING UPDATES/ ROLLBACKS SERVICE - STABLE DNS/ IP ADDRESS

Slide 22

Slide 22 text

SPACES CONTAINER ARCHITECTURE DATABASE PODS (STATEFUL SET) CACHING PODS (REDIS; STATEFUL SET) APPLICATION PODS (CUSTOM IMAGE; DEPLOYMENT) LOGGING POD (NXLOG; DEPLOYMENT) MANAGEMENT (SALTSTACK; DEPLOYMENT) NETWORK FILESYSTEM (PERSISTENT VOLUME)

Slide 23

Slide 23 text

$ kubectl scale deployment my-app --replicas=32 deployment "my-app" scaled $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-app 32 32 32 15 30m $ kubectl get pods NAME READY STATUS RESTARTS AGE my-app-2035384211-7ci7o 1/1 Running 0 18s my-app-2035384211-kzszj 1/1 Running 0 18s my-app-2035384211-qqcnn 1/1 Running 0 18s …

Slide 24

Slide 24 text

$ kubectl autoscale deployment my-app \ --min=4 --max=128 --cpu-percent=80 deployment "my-app" autoscaled

Slide 25

Slide 25 text

BENEFITS CUSTOMER + PROVIDER • EFFICIENT RESOURCE UTILIZATION (NO OVERPROVISIONING) • FAST SCALE-UP & SCALE-DOWN • „ZERO-CONF“

Slide 26

Slide 26 text

CHALLENGES

Slide 27

Slide 27 text

PHP ON SCALE SLAC 2017: „PHP ON SCALE“ https://speakerdeck.com/martinhelmich/slac17-php-on-scale

Slide 28

Slide 28 text

SHARED FILESYSTEM /fileadmin /typo3conf /typo3temp /uploads SOLUTION #1: CONFIGURE APPLICATION TO USE OBJECT STORE (S3, CEPH, …) AND CENTRALIZED CACHES SOLUTION #2: USE NETWORK FILESYSTEM (NFS, GLUSTER, CEPHFS, …)

Slide 29

Slide 29 text

SCALING PHP APPS IS EASY… SCALING DATABASES IS NOT

Slide 30

Slide 30 text

SCALABLE CACHING LAYER (RELATIVELY) FIXED-SCALE DATABASE

Slide 31

Slide 31 text

DATABASE CLUSTER ORCHESTRATED BY VITESS VTGATE

Slide 32

Slide 32 text

SIZING & SCHEDULING

Slide 33

Slide 33 text

8 CPUS 64 GiB RAM KUBERNETES SCHEDULING THE NODE THE PODS REQUESTS LIMIT .5 CPU / 1 CPU 128 MiB/ 256 MiB LIMITS = REQUESTS -> GUARANTEED POD LIMITS > REQUESTS -> OVERCOMITTMENT SCHEDULING POD REQUESTS MUST FIT NODE POD LIMITS MAY BE LARGER THAN NODE CAPACITY LIMITS > CAPACITY -> OK

Slide 34

Slide 34 text

KUBERNETES SETUP STORAGE ARCHITECTURE NETWORKING/ INGRESS APPLICATION ARCHITECTURE APPLICATION LIFECYCLE THE KUBERNETES ICEBERG

Slide 35

Slide 35 text

QUESTIONS?

Slide 36

Slide 36 text

No content