SlideShare a Scribd company logo
Adventures with Laravel and Kubernetes
at superbalist.com
William Stewart
 zatech


 zoidbergwill basically everywhere
1 / 28
Intro
Who am I?
What do I do?
2 / 28
Overview
Docker
What is Docker?
Why do we use it?
Kubernetes
What is Kubernetes?
Why do we use it?
Some extra tools
A quick demo
War stories
Logging
Signal propagation
Long running processes
Schema changes
3 / 28
Docker
4 / 28
What is Docker?
5 / 28
How does it help?
Language agnostic build artifact
FROM composer:alpine
COPY composer.json composer.lock /app
RUN composer install --ansi --no-interaction --no-scripts --no-dev --no-autoloader
COPY . /app
RUN composer install
or
FROM node:alpine
COPY package.json /app
RUN npm install
COPY . /app
6 / 28
How does it help?
No more "works on my machine", because they're the same images locally and on production
Smaller shippable artifacts than full machine images, and easier to independently scale components
A lot of useful services already in the Docker registry:
MySQL
Redis
Memcached
Elastic Search
RabbitMQ
7 / 28
Running Docker in production
8 / 28
How does it help?
- Container hosting
- Con g changes
- Supervision
- Monitoring
- Rolling deployments
- Networking / Service discovery
- and more...
9 / 28
Automate the boring stu f
“Automation is a force multiplier, not a panacea”
Value of automation
Consistency
Extensibility
MTTR (Mean Time To Repair)
Faster non-repair actions
Time savings
Dan Luu's Notes on Google's Site Reliability Engineering book
10 / 28
What is Kubernetes?
an open source container
cluster manager
11 / 28
How does it help?
Faster/smarter builds than a .tar.gz
Reliable rolling updates (safer than a symlink swap)
Similar build/deploy scripts for all languages and services
Autoscaling (based on CPU usage)
Fine-grained healthchecking
Accurate resource monitoring and better usage
12 / 28
Helps us to easily move towards SOA,
Easily start new projects in any language, that can rely on the same service discovery (using DNS)
Discovery via DNS (curl http://elasticsearch/) or automatically set Kubernetes environment
variables (env('ELASTICSEARCH_SERVICE_HOST')), that balances load over a collection of Elastic Search
clients, all automatically updated by Kubernetes.
A huge collection of base Docker les on hub.docker.com and quay.io
13 / 28
Avoid "works on my machine" issues
Accurately replicate most of our production environment locally (other than a mocked Google Loadbalancer)
Using:
minikube, which behaves like a single-node Kubernetes cluster
docker, moving towards rocker, to better utilise global Composer/NPM cache
NFS, to allow faster feedback when developing
some bash glue
14 / 28
Easily implement monitoring, logging, and LetsEncrypt
Simply implement metrics monitoring and LetsEncrypt using Kubernetes annotations:
annotations:
prometheus.io/port: "9150"
prometheus.io/scrape: "true"
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: gce
kubernetes.io/tls-acme: "true"
name: general-ingress
spec:
rules:
- host: tasks.zoidbergwill.com
http:
paths:
- backend:
serviceName: tasks-app
servicePort: 80
path: /
tls:
- hosts:
- tasks.zoidbergwill.com
secretName: tasks-tls
15 / 28
Demo tools
Minikube
Rocker
Kube-lego
16 / 28
DEMO
DEMO
17 / 28
War stories
18 / 28
Logging
Logging to a le worked great on compute engine with uentd
Gcloud Stackdriver Logging is pretty amazing, but with container engine it wants stdout
± ag log tasks/config/app.php
112: | Logging Configuration
115: | Here you may configure the log settings for your application. Out of
116: | the box, Laravel uses the Monolog PHP logging library. This gives
117: | you a variety of powerful log handlers / formatters to utilize.
119: | Available Settings: "single", "daily", "syslog", "errorlog"
123: 'log' => env('APP_LOG', 'single'),
125: 'log_level' => env('APP_LOG_LEVEL', 'debug'),
212: 'Log' => IlluminateSupportFacadesLog::class,
19 / 28
Logging Monolog/Laravel options
single/daily le:
doesn't go to stdout and get consumed by fluentd-cloud-logging
syslog:
another dependency, and we'd need to install syslog and tail it, or talk to an external syslog daemon
errorlog:
php-fpm logs have a pre x you can't get rid of
Bubbling them to the nginx container also has a gross pre x and means you can't separate the logs for each container
20 / 28
Upstream php images also do some gross logging stu f
FROM php:7-fpm
[global]
error_log = /proc/self/fd/2
[www]
access.log = /proc/self/fd/2
Access logs are junk for Laravel:
:: - 07/Feb/2017:13:57:57 +0000 "GET /index.php" 200 (x 1337)
error_log can be pretty crap too:
[07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: "NOTICE: PHP message: Array"
[07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: "("
[07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: " [6] => 363"
[07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: ")"
[07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: ""
21 / 28
Going full circle
Let's try single again:
> cat entrypoint.sh
# Tail a log file, and background that process
tail -f /var/www/html/storage/logs/laravel.log &
# Now run the more important piece
php-fpm7
22 / 28
Signal propagation
Linux relies on PID 1 doing important stuff, that an init system does
Most Docker entrypoints use exec to become the main process, but this kills anything running in the script.
Shells (like bash) don't propagate signals, like SIGTERM or SIGQUIT, which messes with graceful shutting down.
When a pod dies:
PID 1 in the container gets a SIGTERM and given a grace period (default: 30s) to shutdown by default
Once the grace period has expired then a SIGKILL signal is sent
dumb-init and lifecycle hooks to the rescue!
dumb-init wraps your ENTRYPOINT shell script and makes sure signals propagate to child processes
lifecycle:
preStop:
exec:
# SIGTERM triggers a quick exit; gracefully terminate instead
command: ["/usr/sbin/nginx","-s","quit"] # or php artisan queue:restart
23 / 28
Cron
If you run plain old cron it runs processes in a separate env, so we dump our Kubernetes environment for phpdotenv to
read:
# Cron is a bastard that has sub processes with different env vars.
env > .env
sed -i -e "s/=(.*)$/="1"/g" .env
24 / 28
Long running processes
The max "grace period" for a pod is 5 minutes.
Easy steps in the right direction:
Break tasks up as small as possible
Put most tasks on queues
Use Kubernetes "Jobs" when forced to
25 / 28
Database migrations
Three step DB Migrations
Migrating before starting a rolling update
26 / 28
Superbalist.com and Takealot.com are hiring!!!
Source
https://github.com/zoidbergwill/kubernetes-php-examples
Slides: zoidergwill.github.io/presentations/2017/kubernetes-php/
Links on the next slide!
27 / 28
Links
O'Reilly's Site Reliability Engineering: How Google Runs Production Systems Amazon
Dan Luu's notes are good too
Borg, Omega, and Kubernetes Lessons learned from three container-management systems over a decade. Essay
kubernetes-dashboard
Cloud Native Computing Foundation
Kubernetes-Anywhere: An of cial Kubernetes repo with some documentation on running Kubernetes with Docker
for Mac beta
minikube: The of cial Go binary for running a simpler local cluster.
awesome-kubernetes list on GitHub, cuz it has some neat things.
Docker and the PID 1 reaping problem
Containers really are the future
28 / 28

More Related Content

PPTX
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
PDF
Docker to the Rescue of an Ops Team
PDF
Pluggable Infrastructure with CI/CD and Docker
PDF
Configuration Management and Transforming Legacy Applications in the Enterpri...
PDF
Docker for Java Developers - Fabiane Nardon and Arun gupta
PDF
Docker for any type of workload and any IT Infrastructure
PDF
Mirantis Contributions to Kubernetes Ecosystem
PDF
DockerCon EU 2015: Trading Bitcoin with Docker
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Docker to the Rescue of an Ops Team
Pluggable Infrastructure with CI/CD and Docker
Configuration Management and Transforming Legacy Applications in the Enterpri...
Docker for Java Developers - Fabiane Nardon and Arun gupta
Docker for any type of workload and any IT Infrastructure
Mirantis Contributions to Kubernetes Ecosystem
DockerCon EU 2015: Trading Bitcoin with Docker

What's hot (20)

PDF
Automatically Renew Certificated In Your Kubernetes Cluster
PPTX
Monitoring, Logging and Tracing on Kubernetes
PPTX
KubeCon EU 2016: Multi-Tenant Kubernetes
PDF
Docker Platform Internals: Taking runtimes and image creation to the next lev...
PDF
Tales of Training: Scaling CodeLabs with Swarm Mode and Docker-Compose
PDF
Deep dive in container service discovery
PDF
Zero downtime-java-deployments-with-docker-and-kubernetes
PDF
What’s New in Docker - Victor Vieux, Docker
PDF
LinuxKit Deep Dive
PDF
Kubernetes and Hybrid Deployments
PDF
Moby and Kubernetes entitlements
PDF
Beyond Ingresses - Better Traffic Management in Kubernetes
PDF
My kubernetes toolkit
PDF
From Code to Kubernetes
PDF
Effective Data Pipelines with Docker & Jenkins - Brian Donaldson
PDF
Orchestrating Microservices with Kubernetes
PDF
Understanding Kubernetes
PPTX
Docker Meetup 08 03-2016
PDF
Kubelet with no Kubernetes Masters | DevNation Tech Talk
PDF
Developing Microservices Directly in AKS/Kubernetes
Automatically Renew Certificated In Your Kubernetes Cluster
Monitoring, Logging and Tracing on Kubernetes
KubeCon EU 2016: Multi-Tenant Kubernetes
Docker Platform Internals: Taking runtimes and image creation to the next lev...
Tales of Training: Scaling CodeLabs with Swarm Mode and Docker-Compose
Deep dive in container service discovery
Zero downtime-java-deployments-with-docker-and-kubernetes
What’s New in Docker - Victor Vieux, Docker
LinuxKit Deep Dive
Kubernetes and Hybrid Deployments
Moby and Kubernetes entitlements
Beyond Ingresses - Better Traffic Management in Kubernetes
My kubernetes toolkit
From Code to Kubernetes
Effective Data Pipelines with Docker & Jenkins - Brian Donaldson
Orchestrating Microservices with Kubernetes
Understanding Kubernetes
Docker Meetup 08 03-2016
Kubelet with no Kubernetes Masters | DevNation Tech Talk
Developing Microservices Directly in AKS/Kubernetes
Ad

Viewers also liked (20)

PDF
Kubernetes - Starting with 1.2
PDF
Microservices at scale with docker and kubernetes - AMS JUG 2017
PDF
Welcome talk for Moscow Kubernetes Meetup 1
PPTX
Deploy your favorite apps on Kubernetes
PDF
GitLab, Prometheus и Grafana с Kubernetes
PDF
Teaching Apache Spark Clusters to Manage Their Workers Elastically: Spark Sum...
PDF
Deploying deep learning models with Docker and Kubernetes
PPTX
RackN DevOps meetup NYC
PDF
Net core, mssql, container und kubernetes
PDF
Opening: builderscon tokyo 2016
PPTX
Microservices summit talk 1/31
PPTX
Keeping up with Tech
PPTX
Ростислав Фридман: “Kubernetes как средство управления микросервисами"
PDF
Docker Containers in Azure
PPTX
Kubernetes as Orchestrator for A10 Lightning Controller
PDF
Google Cloud Computing compares GCE, GAE and GKE
PDF
Kubernetes API - deep dive into the kube-apiserver
PDF
Bangalore Container Conference - Sponsor Deck
PPTX
Running Docker in Production - The Good, the Bad and The Ugly
PPTX
Introduction to container mangement
Kubernetes - Starting with 1.2
Microservices at scale with docker and kubernetes - AMS JUG 2017
Welcome talk for Moscow Kubernetes Meetup 1
Deploy your favorite apps on Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
Teaching Apache Spark Clusters to Manage Their Workers Elastically: Spark Sum...
Deploying deep learning models with Docker and Kubernetes
RackN DevOps meetup NYC
Net core, mssql, container und kubernetes
Opening: builderscon tokyo 2016
Microservices summit talk 1/31
Keeping up with Tech
Ростислав Фридман: “Kubernetes как средство управления микросервисами"
Docker Containers in Azure
Kubernetes as Orchestrator for A10 Lightning Controller
Google Cloud Computing compares GCE, GAE and GKE
Kubernetes API - deep dive into the kube-apiserver
Bangalore Container Conference - Sponsor Deck
Running Docker in Production - The Good, the Bad and The Ugly
Introduction to container mangement
Ad

Similar to Kubernetes laravel and kubernetes (20)

PPTX
Laravel, docker, kubernetes
PDF
Scaleable PHP Applications in Kubernetes
PDF
Dockerize your Symfony application - Symfony Live NYC 2014
PDF
Docker in Production: Reality, Not Hype
PDF
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
PDF
Killer Docker Workflows for Development
PDF
Preparing your dockerised application for production deployment
PDF
Converting Your Dev Environment to a Docker Stack - php[world]
PDF
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
PDF
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
ODP
Docker for Developers - php[tek] 2017
PPTX
Kubernetes: від знайомства до використання у CI/CD
PDF
Converting Your Dev Environment to a Docker Stack - Cascadia
PDF
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
PDF
Kubernetes
PDF
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
PDF
Introduction to Docker, December 2014 "Tour de France" Edition
PPTX
Docker for Developers - PNWPHP 2016 Workshop
PDF
Docker and Kubernetes 101 workshop
PDF
Docker Essentials Workshop— Innovation Labs July 2020
Laravel, docker, kubernetes
Scaleable PHP Applications in Kubernetes
Dockerize your Symfony application - Symfony Live NYC 2014
Docker in Production: Reality, Not Hype
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
Killer Docker Workflows for Development
Preparing your dockerised application for production deployment
Converting Your Dev Environment to a Docker Stack - php[world]
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
Docker for Developers - php[tek] 2017
Kubernetes: від знайомства до використання у CI/CD
Converting Your Dev Environment to a Docker Stack - Cascadia
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Kubernetes
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Introduction to Docker, December 2014 "Tour de France" Edition
Docker for Developers - PNWPHP 2016 Workshop
Docker and Kubernetes 101 workshop
Docker Essentials Workshop— Innovation Labs July 2020

Recently uploaded (20)

PDF
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
PPTX
Fluid Mechanics, Module 3: Basics of Fluid Mechanics
PPTX
Geodesy 1.pptx...............................................
PPT
Drone Technology Electronics components_1
PPTX
web development for engineering and engineering
PPTX
CH1 Production IntroductoryConcepts.pptx
PDF
Operating System & Kernel Study Guide-1 - converted.pdf
PDF
Arduino robotics embedded978-1-4302-3184-4.pdf
PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
PPTX
Internship_Presentation_Final engineering.pptx
PDF
Queuing formulas to evaluate throughputs and servers
PPT
Project quality management in manufacturing
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PPTX
Road Safety tips for School Kids by a k maurya.pptx
PPTX
KTU 2019 -S7-MCN 401 MODULE 2-VINAY.pptx
PPTX
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
PPTX
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
PDF
composite construction of structures.pdf
PPTX
Strings in CPP - Strings in C++ are sequences of characters used to store and...
PPTX
MET 305 MODULE 1 KTU 2019 SCHEME 25.pptx
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
Fluid Mechanics, Module 3: Basics of Fluid Mechanics
Geodesy 1.pptx...............................................
Drone Technology Electronics components_1
web development for engineering and engineering
CH1 Production IntroductoryConcepts.pptx
Operating System & Kernel Study Guide-1 - converted.pdf
Arduino robotics embedded978-1-4302-3184-4.pdf
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
Internship_Presentation_Final engineering.pptx
Queuing formulas to evaluate throughputs and servers
Project quality management in manufacturing
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
Road Safety tips for School Kids by a k maurya.pptx
KTU 2019 -S7-MCN 401 MODULE 2-VINAY.pptx
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
composite construction of structures.pdf
Strings in CPP - Strings in C++ are sequences of characters used to store and...
MET 305 MODULE 1 KTU 2019 SCHEME 25.pptx

Kubernetes laravel and kubernetes

  • 1. Adventures with Laravel and Kubernetes at superbalist.com William Stewart  zatech    zoidbergwill basically everywhere 1 / 28
  • 2. Intro Who am I? What do I do? 2 / 28
  • 3. Overview Docker What is Docker? Why do we use it? Kubernetes What is Kubernetes? Why do we use it? Some extra tools A quick demo War stories Logging Signal propagation Long running processes Schema changes 3 / 28
  • 6. How does it help? Language agnostic build artifact FROM composer:alpine COPY composer.json composer.lock /app RUN composer install --ansi --no-interaction --no-scripts --no-dev --no-autoloader COPY . /app RUN composer install or FROM node:alpine COPY package.json /app RUN npm install COPY . /app 6 / 28
  • 7. How does it help? No more "works on my machine", because they're the same images locally and on production Smaller shippable artifacts than full machine images, and easier to independently scale components A lot of useful services already in the Docker registry: MySQL Redis Memcached Elastic Search RabbitMQ 7 / 28
  • 8. Running Docker in production 8 / 28
  • 9. How does it help? - Container hosting - Con g changes - Supervision - Monitoring - Rolling deployments - Networking / Service discovery - and more... 9 / 28
  • 10. Automate the boring stu f “Automation is a force multiplier, not a panacea” Value of automation Consistency Extensibility MTTR (Mean Time To Repair) Faster non-repair actions Time savings Dan Luu's Notes on Google's Site Reliability Engineering book 10 / 28
  • 11. What is Kubernetes? an open source container cluster manager 11 / 28
  • 12. How does it help? Faster/smarter builds than a .tar.gz Reliable rolling updates (safer than a symlink swap) Similar build/deploy scripts for all languages and services Autoscaling (based on CPU usage) Fine-grained healthchecking Accurate resource monitoring and better usage 12 / 28
  • 13. Helps us to easily move towards SOA, Easily start new projects in any language, that can rely on the same service discovery (using DNS) Discovery via DNS (curl http://elasticsearch/) or automatically set Kubernetes environment variables (env('ELASTICSEARCH_SERVICE_HOST')), that balances load over a collection of Elastic Search clients, all automatically updated by Kubernetes. A huge collection of base Docker les on hub.docker.com and quay.io 13 / 28
  • 14. Avoid "works on my machine" issues Accurately replicate most of our production environment locally (other than a mocked Google Loadbalancer) Using: minikube, which behaves like a single-node Kubernetes cluster docker, moving towards rocker, to better utilise global Composer/NPM cache NFS, to allow faster feedback when developing some bash glue 14 / 28
  • 15. Easily implement monitoring, logging, and LetsEncrypt Simply implement metrics monitoring and LetsEncrypt using Kubernetes annotations: annotations: prometheus.io/port: "9150" prometheus.io/scrape: "true" apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: gce kubernetes.io/tls-acme: "true" name: general-ingress spec: rules: - host: tasks.zoidbergwill.com http: paths: - backend: serviceName: tasks-app servicePort: 80 path: / tls: - hosts: - tasks.zoidbergwill.com secretName: tasks-tls 15 / 28
  • 19. Logging Logging to a le worked great on compute engine with uentd Gcloud Stackdriver Logging is pretty amazing, but with container engine it wants stdout ± ag log tasks/config/app.php 112: | Logging Configuration 115: | Here you may configure the log settings for your application. Out of 116: | the box, Laravel uses the Monolog PHP logging library. This gives 117: | you a variety of powerful log handlers / formatters to utilize. 119: | Available Settings: "single", "daily", "syslog", "errorlog" 123: 'log' => env('APP_LOG', 'single'), 125: 'log_level' => env('APP_LOG_LEVEL', 'debug'), 212: 'Log' => IlluminateSupportFacadesLog::class, 19 / 28
  • 20. Logging Monolog/Laravel options single/daily le: doesn't go to stdout and get consumed by fluentd-cloud-logging syslog: another dependency, and we'd need to install syslog and tail it, or talk to an external syslog daemon errorlog: php-fpm logs have a pre x you can't get rid of Bubbling them to the nginx container also has a gross pre x and means you can't separate the logs for each container 20 / 28
  • 21. Upstream php images also do some gross logging stu f FROM php:7-fpm [global] error_log = /proc/self/fd/2 [www] access.log = /proc/self/fd/2 Access logs are junk for Laravel: :: - 07/Feb/2017:13:57:57 +0000 "GET /index.php" 200 (x 1337) error_log can be pretty crap too: [07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: "NOTICE: PHP message: Array" [07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: "(" [07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: " [6] => 363" [07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: ")" [07-Feb-2015 11:46:44] WARNING: [pool www] child 32465 said into stderr: "" 21 / 28
  • 22. Going full circle Let's try single again: > cat entrypoint.sh # Tail a log file, and background that process tail -f /var/www/html/storage/logs/laravel.log & # Now run the more important piece php-fpm7 22 / 28
  • 23. Signal propagation Linux relies on PID 1 doing important stuff, that an init system does Most Docker entrypoints use exec to become the main process, but this kills anything running in the script. Shells (like bash) don't propagate signals, like SIGTERM or SIGQUIT, which messes with graceful shutting down. When a pod dies: PID 1 in the container gets a SIGTERM and given a grace period (default: 30s) to shutdown by default Once the grace period has expired then a SIGKILL signal is sent dumb-init and lifecycle hooks to the rescue! dumb-init wraps your ENTRYPOINT shell script and makes sure signals propagate to child processes lifecycle: preStop: exec: # SIGTERM triggers a quick exit; gracefully terminate instead command: ["/usr/sbin/nginx","-s","quit"] # or php artisan queue:restart 23 / 28
  • 24. Cron If you run plain old cron it runs processes in a separate env, so we dump our Kubernetes environment for phpdotenv to read: # Cron is a bastard that has sub processes with different env vars. env > .env sed -i -e "s/=(.*)$/="1"/g" .env 24 / 28
  • 25. Long running processes The max "grace period" for a pod is 5 minutes. Easy steps in the right direction: Break tasks up as small as possible Put most tasks on queues Use Kubernetes "Jobs" when forced to 25 / 28
  • 26. Database migrations Three step DB Migrations Migrating before starting a rolling update 26 / 28
  • 27. Superbalist.com and Takealot.com are hiring!!! Source https://github.com/zoidbergwill/kubernetes-php-examples Slides: zoidergwill.github.io/presentations/2017/kubernetes-php/ Links on the next slide! 27 / 28
  • 28. Links O'Reilly's Site Reliability Engineering: How Google Runs Production Systems Amazon Dan Luu's notes are good too Borg, Omega, and Kubernetes Lessons learned from three container-management systems over a decade. Essay kubernetes-dashboard Cloud Native Computing Foundation Kubernetes-Anywhere: An of cial Kubernetes repo with some documentation on running Kubernetes with Docker for Mac beta minikube: The of cial Go binary for running a simpler local cluster. awesome-kubernetes list on GitHub, cuz it has some neat things. Docker and the PID 1 reaping problem Containers really are the future 28 / 28