Automated Image Builds in OpenShift and Kubernetes

43
Automated Image Builds in OpenShift and Kubernetes Graham Dumpleton - Red Hat @GrahamDumpleton

Transcript of Automated Image Builds in OpenShift and Kubernetes

Automated Image Builds in OpenShift and

KubernetesGraham Dumpleton - Red Hat

@GrahamDumpleton

OpenShift Stack

Access and Control

Namespace

Pods

Persistent Volumes

Networking

Deployments

Builds

Docker Build

apiVersion: v1 kind: BuildConfig metadata: name: myimage spec: strategy: type: Docker dockerStrategy: from: kind: ImageStreamTag name: centos:7 source: type: Git git: uri: https://github.com/demo/myimage.git output: to: kind: ImageStreamTag name: myimage:latest

BuildConfig (Docker Strategy)

apiVersion: v1 kind: ImageStream metadata: name: centos spec: tags: - from: kind: DockerImage name: centos:7 name: 7 apiVersion: v1 kind: ImageStream metadata: name: myimage

ImageStream(s)

Loading the Resources

oc create -f myimage-build-configuration.yaml

Short Cut for Creating Docker Build

oc new-build https://github.com/demo/myimage.git

Manually Trigger a Rebuild

oc start-build myimage

apiVersion: v1 kind: BuildConfig metadata: name: myimage spec: strategy: type: Docker … source: type: Git git: uri: https://github.com/demo/myimage.git triggers: - type: ConfigChange - type: ImageChange - type: GitHub github: secret: kkDMDki2O40wtqDd_cxA

Build Triggers

Build ConfigChange Trigger

oc set env bc/myimage --env DEBUG=1

ImageChange Trigger

oc import-image centos:7

GitHub Trigger

Deployment

apiVersion: v1 kind: DeploymentConfig metadata: name: myimage spec: replicas: 1 selector: app: myimage template: metadata: labels: app: myimage spec: containers: - image: 172.30.240.125:5000/demo/myimage:latest name: myimage ports: - containerPort: 8080 protocol: TCP

Deployment Configuration

apiVersion: v1 kind: Service metadata: name: myimage spec: ports: - name: 8080-tcp port: 8080 protocol: TCP targetPort: 8080 selector: app: myimage

Service

Short Cut for Deploy

oc new-app myimage

Short Cut for Build/Deploy

oc new-app https://github.com/demo/myimage.git

apiVersion: v1 kind: DeploymentConfig metadata: name: myimage spec: … triggers: - type: ConfigChange - type: ImageChange imageChangeParams: containerNames: - myimage from: kind: ImageStreamTag name: myimage:latest namespace: demo

Deployment Triggers

Deployment ConfigChange Trigger

oc set env dc/myimage --env DEBUG=1

apiVersion: v1 kind: Route metadata: name: myimage spec: host: "" port: targetPort: 8080-tcp to: name: myimage

Route

Short Cut for Exposing Service

oc expose svc/myimage

Source Build

apiVersion: v1 kind: BuildConfig metadata: name: myapp spec: strategy: type: Source sourceStrategy: from: kind: ImageStreamTag namespace: openshift name: python:2.7 source: type: Git git: uri: https://github.com/demo/myapp.git output: to: kind: ImageStreamTag name: myapp:latest

BuildConfig (Source Strategy)

apiVersion: v1 kind: ImageStream metadata: name: python namespace: openshift spec: tags: - from: kind: DockerImage name: centos/python-27-centos7:latest name: "2.7"

Builder ImageStream

Short Cut for Source Build/Deploy

oc new-app python:2.7~https://github.com/demo/myapp.git

S2I Execution Steps

S2I Application Image

cat /tmp/files.tar | docker run -i --name mybuild \ centos/python-27-centos7:latest \ bash -c "tar -C /tmp -xf - && \ /usr/libexec/s2i/bin/assemble"

docker commit mybuild myapp:latest

Assemble Script

#!/bin/bash WARPDRIVE_APP_ROOT=/opt/app-root WARPDRIVE_SRC_ROOT=$WARPDRIVE_APP_ROOT/srccp -Rf /tmp/src/. $WARPDRIVE_SRC_ROOT rm -rf /tmp/src warpdrive build chmod -Rf g+w $WARPDRIVE_SRC_ROOT || true

Running Image

docker run -p 8080:8080 myapp

Run Script

#!/bin/bash exec warpdrive start

Using S2I Outside of OpenShift

s2i build https://github.com/demo/myapp.git \ centos/python-27-centos7:latest myapp docker run -p 8080:8080 myapp

Source to Image Project

• https://github.com/openshift/source-to-image

Demo/Questions

OpenShift Resources

• OpenShift Originhttps://www.openshift.org

• OpenShift Enterprise/Dedicated https://www.openshift.com

• OpenShift Commonshttp://commons.openshift.org

Try OpenShift

• OpenShift TestDrive Lab on Amazon Web Services https://www.openshift.com/dedicated/test-drive.html

• All-In-One Vagrant VM box https://www.openshift.org/vm/

• Free Red Hat Container Development Kit (CDK) http://developers.redhat.com/products/cdk/overview/