automated image builds in openshift and kubernetes
TRANSCRIPT
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/