78
YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

YAML is Optional Exploring an App Developer's Kubernetes Options

A link to this deck is bit.ly/2NPZTWE

Page 2: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Outline

2

1. Why containers? +/-2. The tragedy of YAML3. Summarizing dev issues4. Exploring solutions5. Summary

Page 3: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

3

V12.13.0

Page 4: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

4

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Part 1

It works on my local

Page 5: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

5

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Hell is other people

Page 6: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

6

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Hell is other people ‘s

Dev E r en

Page 7: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

7

Page 8: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

So… no more `nodemon` ?

8

Page 9: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

9

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

FROM node:6.11.5

WORKDIR /usr/src/appCOPY package.json .RUN npm install COPY . .

CMD [ "npm", "start" ]

Page 10: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

10

Page 11: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

11

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Part 2

Oh, hey there Kubernetes...

Page 12: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

12

Learningcurve

Page 13: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

13

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

YAML

Page 14: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

14

---

Page 15: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

15

Page 16: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

16

Page 17: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

17

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 18: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

18

Page 19: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

19

Page 20: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

20

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 21: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

21

kubeletkube-proxycontainerDkubectlCoreDNSmetrics-serverPodDeploymentReplica Set

JobServiceIngressConfigMapNamespaceSecretServiceAccountLabelAnnotation

StatefulSetPersistentVolumePersistentVolumeClaimsNetworkPolicyAdmissionControllerCustomResourceDefinitionTaintsTolerationsRuntimeClass

Page 22: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

22

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Space Shuttle Design

Page 23: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

23

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Human Centered Design

Page 24: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

24

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL — 24

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Part 3

Developers, Developers, Developers

Page 25: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

DockerfilesDev env setupIterative dev loopCI workflowDebugging toolsContainer patternsK8s learning curveYAML avoidance

25

Page 26: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

DockerfilesDev env setupIterative dev loopCI workflowDebugging toolsContainer patternsK8s learning curveYAML avoidance

26

V12.13.0

VS

Page 27: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

YAML is optional

27

YAML sucks less

Page 28: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

28

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL — 28

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Part 4

Ksonnet

Kustomize

Whatever, just use

sed

Page 29: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Brigade

29

Page 30: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

30

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 31: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

BrigadeSolves: integrating CI deeper with Kubernetes, and opens the door to `git push` workflows

31

Page 32: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Metaparticle

32

Page 33: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

33

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

...@containerize( 'docker.io/your-docker-user-goes-here', options={ 'replicas': 4, 'executor': 'metaparticle', 'ports': [8080], 'name': 'my-image', 'publish': True })...

Page 34: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

34

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 35: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

MetaparticleSolves: the need to learn Dockerfile and k8s YAML formats, lowering the learning curve.

35

Page 36: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Isopod

36

Page 37: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

37

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

CLUSTERS = [ onprem(env="dev", cluster="minikube"), gke( env="prod", cluster="paas-prod", location="us-west1", project="cruise-paas-prod", ),]

def clusters(ctx): if ctx.cluster != None: return [c for c in CLUSTERS if c.cluster == ctx.cluster] elif ctx.env != None: return [c for c in CLUSTERS if c.env == ctx.env] return CLUSTERS

def addons(ctx) return [ addon("ingress", "configs/ingress.ipd", ctx), ]

Page 38: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

IsopodSolves: Configs are an important part of code, and need testing. A single language used for Dockerfiles, k8s resources, and pushing code.

38

Page 39: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

CNAB

39

Page 40: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

CNAB

40

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 41: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

41

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 42: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

42

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 43: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

43

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 44: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

CNABSolves: how to organize containers into a logical app in a platform and vendor neutral way.

44

Page 45: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

OAM implemented as Rudr

45

Page 46: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

46

Page 47: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

47

Page 48: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

48

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

apiVersion: core.oam.dev/v1alpha1kind: ComponentSchematicmetadata: name: nginx-replicatedspec: workloadType: core.oam.dev/v1alpha1.Server osType: linux arch: amd64 containers: - name: server image: nginx:latest config: - name: "/etc/access/default_user.txt" - value: "admin" ports: - name: http containerPort: 80 protocol: TCP parameters: - name: poet type: string default: Yeats

Page 49: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

OAM implemented as RudrSolves: Conway’s Law. The communication structure of your org can be reflected in YAML to improve collaboration between dev and ops roles.

49

Page 50: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Buildpacks

50

Page 51: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

51

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

{ "name": "Start on Heroku: Node.js", "description": "A barebones Node.js app using Express 4", "repository": "https://github.com/heroku/node-js-getting-started", "logo": "https://cdn.rawgit.com/heroku/node-js-getting-started/master/public/node.svg", "keywords": ["node", "express", "heroku"], "image": "heroku/nodejs"}

Page 52: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

BuildpacksSolves: the need to learn about containers, or kubernetes resources. Git as the source of truth for your platform.

52

Page 53: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Tilt

53

Page 54: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

54

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

# tiltdemo1k8s_yaml('deployments/demoserver1.yaml')dm1_img_name = 'gcr.io/windmill-test-containers/tiltdemo/demoserver1'docker_build(dm1_img_name, '.', dockerfile='Dockerfile.server1', live_update=[ sync('cmd/demoserver1', '/go/src/github.com/windmilleng/tiltdemo/cmd/demoserver1'), run('go install github.com/windmilleng/tiltdemo/cmd/demoserver1'), restart_container(), ])

# tiltdemo2k8s_yaml('deployments/demoserver2.yaml')dm1_img_name = 'gcr.io/windmill-test-containers/tiltdemo/demoserver2'docker_build(dm1_img_name, '.', dockerfile='Dockerfile.server2', live_update=[ sync('cmd/demoserver2', '/go/src/github.com/windmilleng/tiltdemo/cmd/demoserver2'), run('go install github.com/windmilleng/tiltdemo/cmd/demoserver2'), restart_container(), ])

Page 55: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

TiltSolves: the need for fast feedback loops as devs are writing new code, or debugging existing code.

55

Page 56: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Admission Controller

56

Page 57: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

57

Page 58: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Admission ControllersSolves: reduces the number of fields devs have to remember to fill in on their YAML files.

58

Page 59: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Helm

59

Page 60: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

60

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

apiVersion: v1kind: ReplicationControllermetadata: name: deis-database namespace: deis labels: app.kubernetes.io/managed-by: deisspec: replicas: 1 selector: app.kubernetes.io/name: deis-database template: metadata: labels: app.kubernetes.io/name: deis-database spec: serviceAccount: deis-database containers: - name: deis-database image: {{.Values.imageRegistry}}/postgres:{{.Values.dockerTag}} imagePullPolicy: {{.Values.pullPolicy}} ports: - containerPort: 5432 env: - name: DATABASE_STORAGE value: {{default "minio" .Values.storage}}

Page 61: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

HelmSolves: providing a menu of options for devs to choose from, per org. Basic lifecycle.

61

Page 62: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Ksonnet

62

Page 63: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

63

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 64: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

64

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 65: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

KSonnet

65

Page 66: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

KSonnet

66

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

“I want easy things to be easy,And hard things to be possible”

Page 67: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

KsonnetSolves: how to manage multi-cluster, multi-env, multiplicatively complex config scenarios. Keep your configs DRY.

67

Page 68: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Kustomize

68

Page 69: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

69

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 70: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

70

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

# Create a directory to hold the basemkdir base# Create a base/deployment.yamlcat <<EOF > base/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: my-nginxspec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginxEOF

# Create a base/service.yaml filecat <<EOF > base/service.yamlapiVersion: v1kind: Servicemetadata: name: my-nginx labels: run: my-nginxspec: ports: - port: 80 protocol: TCP selector: run: my-nginxEOF# Create a base/kustomization.yamlcat <<EOF > base/kustomization.yamlresources:- deployment.yaml- service.yamlEOF

Page 71: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

71

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

mkdir devcat <<EOF > dev/kustomization.yamlbases:- ../basenamePrefix: dev-EOF

mkdir prodcat <<EOF > prod/kustomization.yamlbases:- ../basenamePrefix: prod-EOF

Page 72: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

72

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 73: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

73

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Page 74: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

KustomizeSolves: how to manage YAML complexity while still remaining Declarative. Keep your configs DRY.

74

Page 75: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

75

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL — 75

© 2019 NetApp, Inc. All rights reserved. — NETAPP CONFIDENTIAL —

Part 5

Why is it all so

complex?

Shut up, Jeff

Page 76: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

DEPLOY WITH A SIMPLEgit push nks master

Page 77: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

Summary

77

1. Kubernetes is a “space shuttle” design2. There are a plethora of dev-focused tools3. No one tool does it all4. Some tools reduce the amount of YAML5. Others obviate YAML altogether6. To make k8s approachable to devs we

need to combine multiple approaches

Page 78: YAML is Optional · 2019-12-20 · YAML is Optional Exploring an App Developer's Kubernetes Options A link to this deck is bit.ly/2NPZTWE

YAML is Optional Exploring an App Developer's Kubernetes Options

A link to this deck is bit.ly/2NPZTWE