Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan...

40
Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Transcript of Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan...

Page 1: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Becoming a PlumberBuilding Deployment Pipelines

Dan [email protected]

Page 2: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes
Page 3: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Why?

Page 4: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

The current data center is...challenging...

RHEL 7.4Dev

RHEL 7.3

Test

RHEL 7.1

Prod

Dev Test Prod

RHEL 7.2Dev

Admin Admin Admin Admin Admin Admin

Dev

RHEL 7.2Dev

RHEL 7.1Dev

RHEL 7.3Dev

Ubuntu Trusty

RHEL 7.4Dev

RHEL 6.6Dev

Ubuntu Trusty

RHEL 7.3

TestRHEL

7.4Test

RHEL 7.2

Test

Ubuntu Trusty

RHEL 6.9

Test

RHEL 7.1

Test

RHEL 7.4

ProdRHEL

7.1Prod

RHEL 7.3

Prod

Ubuntu Trusty

RHEL 6.9

Prod

RHEL 7.2

Prod

@barkerd427

Page 5: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes
Page 6: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

The new data center is understandable and usable.

Developer Access Production Controlled

NetworkStorage

ComputePlatform

Deployment Pipeline

RHEL 7.4

App1

RHEL 7.4

App1

RHEL 7.4

App1

RHEL 7.4

App1

RHEL 7.4

App1

RHEL 7.4

App1

RHEL 7.4

App2

RHEL 7.4

App2

RHEL 7.4

App2

RHEL 7.4

App2

RHEL 7.4

App2

RHEL 7.4

App2

@barkerd427

Page 7: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

The value of Pipelines

● Abstract audit and compliance● Trivialities eliminated● Security checks occur early/often● Test all the things!

@barkerd427

Page 8: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

The value of Pipelines

● Nimble security● Common artifact repositories● Standardized approval system● Apps become secure by default

@barkerd427

Page 9: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Jenkins Pipelines

Page 10: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Two types of pipelines

Scripted:

● Very Groovy!● More powerful● Provides greatest level

of flexibility

Declarative:

● Only a little Groovy● Simpler to maintain● Easier to read and

understand

Page 11: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Shared Libraries

● Global or local● Groovy● Third-party

● Src● Var● Resources

Page 12: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Fabric8

● Shared Library○ Kubernetes○ Fabric8 Jenkins○ Specialized

● Pipelines○ Golang○ Node○ .Net

Page 13: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Alternatives?

Page 14: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes
Page 15: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Screwdriver

● No orange juice● Yahoo!● Distributed system● Independently

scalable

● Components○ ReST API○ Web UI○ Launcher○ Execution Engine○ Datastore

Page 16: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Screwdriver Architecture

http://screwdriver.cd/

Page 17: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Concourse

● Immutable architecture

● Ephemeral architecture

● Tasks● Resources● Jobs● Builds

Page 18: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Concourse Architecture

Page 19: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Deployment Pipeline’s have fallen behind

@barkerd427

Page 20: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Config Pipeline

App 1 Config

App 2 Config

App 3 Config

Message Queue

Combined Config Repo

Pipeline Config

Build Config

Deploy Config

MR

Trigger

Page 21: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Pipeline Config Flow

Pipeline Config

Message Queue

Jenkins Deployer

Combined Config Repo

Jenkins

GitLab MR Splunk

Nexus

GitLab Repo

Page 22: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Build Config Flow

Build Config Service

Message Queue

OpenShift Deployer

Combined Config Repo

OpenShift

OpenShift ListenerGitLab Repo

Page 23: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Deploy Config Flow

Deploy Config

Message Queue

OpenShift Deployer

Combined Config Repo

OpenShift

OpenShift ListenerGitLab Repo

Page 24: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Pipelines

● Stages● Steps● Environments

@barkerd427

● Application● PipelineTemplate● PipelineConfig

Page 25: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

An Application includes a Pipeline, based on an opinionated PipelineTemplate. These combine as a PipelineConfig.

apiVersion: v1kind: Applicationname: app1cap: template: name: approvedTemplates/Tomcat8.yaml pipeline: notifications: mattermost: team: cloud channel: general on_success: never on_failure: always dependencies: - name: authn dnsName: authn - name: key-management username: reference_to_username password: reference_to_password stages: - name: build steps: - action: build baseImage: version: 8.0.41 - name: dev approvers: - role: app1-dev steps: - action: deploy params: environment: dev

apiVersion: v1kind: PipelineTemplatename: Tomcat8labels: type: applicationbuild: manager: maven version: latest builderImage: java8-builder version: latest baseImage: tomcat8 version: latestdeploy: deploymentType: canary maxUnavailable: 10% maxSurge: 20%

apiVersion: v1kind: PipelineConfigname: app1-pipelinelabels: type: applicationpipeline: notifications: mattermost: team: cloud channel: general on_success: never on_failure: always dependencies: - name: authn dnsName: authn - name: key-management username: reference_to_username password: reference_to_password stages: - name: build steps: - action: build manager: maven builderImage: java8-builder baseImage: tomcat8 version: 8.0.41 - name: dev approvers: - role: app1-dev steps: - action: deploy params: environment: dev

@barkerd427

Page 26: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

An Application and PipelineTemplate also combine to create a DeploymentConfig.

apiVersion: v1kind: Applicationname: app1cap: template: name: approvedTemplates/Tomcat8.yaml pipeline: notifications: mattermost: team: cloud channel: general on_success: never on_failure: always dependencies: - name: authn dnsName: authn - name: key-management username: reference_to_username password: reference_to_password stages: - name: build steps: - action: build baseImage: version: 8.0.41 - name: dev approvers: - role: app1-dev steps: - action: deploy params: environment: dev

apiVersion: v1kind: PipelineTemplatename: Tomcat8labels: type: applicationbuild: manager: maven version: latest builderImage: java8-builder version: latest baseImage: tomcat8 version: latestdeploy: deploymentType: canary maxUnavailable: 10% maxSurge: 20%

apiVersion: v1kind: DeploymentConfigmetadata: name: app1-pipeline type: applicationspec: replicas: 2 selector: name: frontend template: { ... } triggers: - type: ConfigChange - imageChangeParams: automatic: true containerNames: - helloworld from: kind: ImageStreamTag name: hello-openshift:latest type: ImageChange strategy: type: Rolling

@barkerd427

Page 27: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

ImageStreams are an image abstraction

@barkerd427

Page 28: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

ImageStreams

● Contains images from:○ Integrated registry○ Other ImageStreams○ External registries

● Automatic event triggers

http://blog.openshift.com

@barkerd427

Page 29: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

ImageStreams - Metadata

● Commands● Entrypoint● EnvVars

@barkerd427

● Layers● Labels● Ports

Page 30: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

http://blog.openshift.com

ImageStreams

Page 31: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes
Page 32: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes
Page 33: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

CoreOS Operators are magical(not really)

@barkerd427

Page 34: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Operators

● Represents human operational knowledge in software

● CustomResource Definitions○ Extends Kubernetes API

@barkerd427

● Identical model to k8s controllers○ OODA Loop

● Now in Beta!!!

Page 35: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Operators

● Deployed into k8s cluster

● Interactions through new API

○ kubectl get prometheuses

○ kubectl get alertmanagers

@barkerd427

● Abstraction around k8s primitives

○ Users just want to use a MySQL cluster.

● Complex tasks that can be performed

○ Rotating credentials, certs, versions, backups

Page 36: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes
Page 37: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes
Page 38: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

What to take away?

This is the slide you should take a picture of...Do not take a picture of this slide!!!

No, stop!

STOP!!!

Really, STOP!!!

Security!

SECURITY!!!!

● Just Start● Start Small● Abstract Consciously● Let Others Do The

Work● Contribute Back

Page 39: Becoming a Plumber - USENIX · 2019-12-18 · Becoming a Plumber Building Deployment Pipelines Dan Barker @barkerd427 danbarker.codes

Resources

● https://github.com/jenkinsci/pipeline-examples/blob/master/global-library-examples/global-function/standardBuild.groovy

● https://github.com/jenkinsci/pipeline-examples/blob/master/global-library-examples/global-function/Jenkinsfile

● https://github.com/jenkinsci/pipeline-examples/blob/master/jenkinsfile-examples/nodejs-build-test-deploy-docker-notify/Jenkinsfile

● https://github.com/jenkinsci/pipeline-examples/blob/master/declarative-examples/jenkinsfile-examples/mavenDocker.groovy

● https://github.com/fabric8io/fabric8-pipeline-library/blob/master/src/io/fabric8/Utils.groovy● https://github.com/fabric8io/fabric8-jenkinsfile-library/blob/master/golang/ReleaseAndStage/Jenkinsfile● https://istio.io/● https://kubernetes.io/docs/getting-started-guides/minikube/● http://danbarker.codes