Slide 1

Slide 1 text

Platforms Demystified: Cloud Foundry, Kubernetes, Eirini, and Knative October 7–10, 2019 Austin Convention Center Matthias Haeussler, Novatec Consulting GmbH & Dr. Nic Williams, Stark & Wayne LLC

Slide 2

Slide 2 text

Hype & Reality

Slide 3

Slide 3 text

Hype & Reality

Slide 4

Slide 4 text

Apps Services Push Start/ Stop Scale Delete Routes Create/Delete Map/Unmap Create/Delete Bind/Unbind Minimal Concepts

Slide 5

Slide 5 text

Deployment s Services NetworkPolici es LoadBalancer NodePort ReplicaSet StatefulSet Bind/Unbind Ingress Pods Container IngressControllers HPA ConfigMaps Secrets apply YAML YAML YAML Minimal Concepts Docker Image

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Speakers Dr. Nic Williams, CEO, Stark & Wayne @drnic Matthias Haeussler, Principal Advocate, Novatec @maeddes

Slide 8

Slide 8 text

LXC Container/Platform history 2018 2017 2014 2013 2011 2008 1979 …. … … 2012 chroot Virtualization and isolation in subsystems. Examples: FreeBSD Jails, Linux VServer cgroups (2007) namespaces (2002) garden eirini warden diego istio knative kubernetes cf push

Slide 9

Slide 9 text

App Dev DB Systems Admin PivNet Platform Admin Secrets/Config Source Code Build Artifact Buildpacks / Images Containers Git CI/CD

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Agenda Extending with Databases Deploy Building from Source Running a Platform How to choose? ?

Slide 12

Slide 12 text

Agenda Extending with Databases Deploy Building from Source Running a Platform How to choose? ?

Slide 13

Slide 13 text

cf push $ cf push sample-app $ cf scale sample-app-java -i 4 $ cf ssh sample-app-java

Slide 14

Slide 14 text

$ cf push sample-app $ kubectl get pods -n scf-eirini NAME READY STATUS sample-app-dev-bb89da1431-0 1/1 Running $ cf scale sample-app-java -i 4 $ kubectl get pods -n scf-eirini NAME READY STATUS sample-app-dev-bb89da1431-0 1/1 Running sample-app-dev-bb89da1431-1 0/1 ContainerCreating sample-app-dev-bb89da1431-2 0/1 ContainerCreating sample-app-dev-bb89da1431-3 1/1 Running $ kubectl exec -ti -n scf-eirini \ sample-app-dev-bb89da1431-0 bash cf push eirini

Slide 15

Slide 15 text

$ cf scale sample-app-java -i 10 cf scale eirini

Slide 16

Slide 16 text

$ cf scale sample-app-java -i 10 cf scale eirini

Slide 17

Slide 17 text

$ kubectl get pods -n scf NAME READY STATUS cf-operator-894886ff9-5s4zx 1/1 Running scf-adapter-v1-0 5/5 Running scf-api-v1-0 17/17 Running scf-bits-v1-0 7/7 Running scf-cc-worker-v1-0 5/5 Running scf-database-v1-0 5/5 Running scf-diego-api-v1-0 6/6 Running scf-doppler-v1-0 11/11 Running scf-eirini-v1-0 6/6 Running scf-log-api-v1-0 8/8 Running scf-nats-v1-0 5/5 Running scf-router-v1-0 6/6 Running scf-scheduler-v1-0 10/10 Running scf-singleton-blobstore-v1-0 7/7 Running scf-uaa-v1-0 7/7 Running update-all-cf-buildpacks-8d9lb 0/1 Completed cf push quarks

Slide 18

Slide 18 text

kn service create $ kn service create \ sample-app-nodejs -n test-app \ --image starkandwayne/sample-app-nodejs $ bootstrap-system-knative kwt test-app $ curl http://sample-app-nodejs.test-app.example.com Hello World! $ kubectl get pods -n test-app NAME READY STATUS kwt-net 1/1 Running sample-app-nodejs-1-deployment-nbg2j 2/2 Running … wait… $ kubectl get pods -n test-app NAME READY STATUS kwt-net 1/1 Running sample-app-nodejs-1-deployment-nbg2j 2/2 Terminating

Slide 19

Slide 19 text

istio knative $ kubectl get pods -n istio-system NAME READY STATUS cluster-local-gateway-5c566fd544-86wfw 1/1 Running cluster-local-gateway-5c566fd544-tx2p7 1/1 Running istio-ingressgateway-6c6cbf558b-kh6l8 2/2 Running istio-ingressgateway-6c6cbf558b-r6vpb 2/2 Running istio-pilot-7b6d979db8-vtmj9 1/1 Running $ kubectl get pods -n knative-serving NAME READY STATUS activator-68d9f95cd-9z4nz 1/1 Running autoscaler-5655c9fcfd-6x4jp 1/1 Running autoscaler-hpa-8668fc6f68-9vsfr 1/1 Running controller-5b77c5596c-qckcm 1/1 Running networking-istio-6d7d44d879-gz6j6 1/1 Running webhook-75b4fc9999-gwrp9 1/1 Running

Slide 20

Slide 20 text

kubectl apply !!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # kubectl apply -f deployment.yaml !!!-!!!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1 # apiVersion: apps/v1 2 # kind: Deployment 3 # metadata: 4 # name: sample-app-nodejs 5 # spec: 6 # selector: 7 # matchLabels: 8 # app: sample-app-nodejs 9 # replicas: 3 10 # template: 11 # metadata: 12 # labels: 13 # app: sample-app-nodejs 14 # spec: 15 # containers: 16 # - name: sample-app-nodejs 17 # image: index.docker.io/starkandwayne/sample-app-nodejs:latest 18 # --- 19 # apiVersion: v1 20 # kind: Service 21 # metadata: 22 # name: sample-app-nodejs 23 # spec: 24 # selector: 25 # app: sample-app-nodejs 26 # type: LoadBalancer 27 # ports: 28 # - protocol: TCP 29 # port: 80 30 # targetPort: 8080 !!!!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Slide 21

Slide 21 text

Agenda Extending with Databases Deploy Building from Source Running a Platform How to choose? ?

Slide 22

Slide 22 text

pack build $ pack build starkandwayne/sample-app-java ===> DETECTING [detector] skip: org.cloudfoundry.archiveexpanding@1.0.0-RC02 [detector] pass: org.cloudfoundry.openjdk@1.0.0-RC02 [detector] pass: org.cloudfoundry.buildsystem@1.0.0-RC02 [detector] pass: org.cloudfoundry.jvmapplication@1.0.0-RC02 [detector] pass: org.cloudfoundry.tomcat@1.0.0-RC02 [detector] pass: org.cloudfoundry.springboot@1.0.0-RC02 [detector] skip: org.cloudfoundry.jdbc@1.0.0-RC02 [detector] skip: org.cloudfoundry.jmx@1.0.0-RC02 [detector] Resolving plan... (try #1) [detector] Success! (7) … [builder] Cloud Foundry OpenJDK Buildpack 1.0.0-RC02 [builder] OpenJDK JDK 11.0.4: Contributing to layer $ docker run -ti -p 8080:8080 \ starkandwayne/sample-app-java

Slide 23

Slide 23 text

@d kpack image kP pack build starkandwayne/sample-app-nodejs --builder cloudfoundry/cnb:cflinufs3 \ --path sample-app-nodejs/ \ --publish Similar to:

Slide 24

Slide 24 text

Agenda Extending with Databases Deploy Building from Source Running a Platform How to choose? ?

Slide 25

Slide 25 text

@d cf bind-service $ cf create-service smtp shared outbound-email $ cf bind-service my-node-app outbound-email $ cf env my-node-app "VCAP_SERVICES": { "smtp": [ { "binding_name": null, "credentials": { "host": "mail.authsmtp.com", "password": "special-secret", "port": 2525, "username": "ac123456" }, "instance_name": "outbound-email", "label": "smtp", "name": "outbound-email", "plan": "shared",

Slide 26

Slide 26 text

$ kn service update \ sample-app-nodejs -n test-app \ --image starkandwayne/sample-app-nodejs:latest $ curl http://sample-app-nodejs.test-app.example.com Hello S1P! $ kn service list -n test-app NAME GENERATION CONDITIONS READY sample-app-nodejs 2 3 OK / 3 True $ kubectl get pods -n test-app NAME READY STATUS kwt-net 1/1 Running sample-app-nodejs-1-deployment-nbg2j 2/2 Terminating sample-app-nodejs-2-deployment-c6mrm 2/2 Running kn service update

Slide 27

Slide 27 text

knative secrets kubectl create secret generic smtp -n test-app \ --from-literal=SMTP_USER=devuser \ --from-literal=SMTP_PASSWORD='S!B\*d$zDsb' \ --from-literal=SMTP_HOST=10.11.12.14 kn service update show-env \ --image lhitchon/show-env:latest \ --namespace test-app \ --env-from secret:smtp

Slide 28

Slide 28 text

Agenda Extending with Databases Deploy Building from Source Running a Platform How to choose? ?

Slide 29

Slide 29 text

Not Invented Here Platform Just because you didn't buy it doesn't mean its not a Platform If you start with Kubernetes you will build a bespoke Platform No one else will know how your K8s environment should work Enjoy someone else's standardised Platform

Slide 30

Slide 30 text

Try at home up --google --cf github.com/starkandwayne/ bootstrap-kubernetes-demos up --google up --google --knative up --google --kpack

Slide 31

Slide 31 text

Buy for work $ Pivotal Function Service Pivotal Container Service Pivotal Application Service for Kubernetes Pivotal Build Service

Slide 32

Slide 32 text

We help build and run your platforms We help build and run your applications How to choose?