Upload
tranthu
View
223
Download
2
Embed Size (px)
Citation preview
DevOps WorkflowFrom 0 to kube in 60 min
Christian Kniep, v2018-02-20Technical Account Manager, Docker Inc.http://qnib.org/devops-workflow
ClusterLaptop
Works on my Laptop!Why is DevOps not enough.
ProdDevelopment
DevArtifact: code
Env: interactive
OpsArtifact: pkg/imgEnv: automated
DevOps
Release/Integration
ReleaseArtifact: pkg/imgEnv: automated
DevRelOps
Prod
OpsArtifact: pkg/imgEnv: automated
Development
DevArtifact: code
Env: interactive
DevRel*Ops
Prod
OpsArtifact: pkg/imgEnv: automated
Development
DevArtifact: codeEnv: interactive
Q&
A
Perform
ance
Release/Integration
ReleaseArtifact: pkg/imgEnv: automated
Experiment
Experiment
Experiment
● Ship the image using a (private) Docker Registry
● Orchestrate the Image: docker-compose.yml
Build, Ship & RunWhere ‘Run’ == ‘Orchestrate’
● Build the image: Dockerfile + context -> Docker Image
For the developer the orchestration should be transparent and out of scope.Artifacts are: 1. Dockerfile + context (git repository)2. docker-compose.yml (git repository)
Application ContainerizationPortability, Reproducibility
As a developer I want to work on a
webapp for DockerCon EU, which
represents a simple three tier stack.
● web: JS app I am working on
● words: API serving business logic
● db: Database backend
web
api
db
api
Prerequisite for Workshophttp://qnib.org/devops-workflow
Docker Desktop
- Docker4Mac / Docker4Win edge-channel (provides kubernetes)
- DockerCE for Linux
Git Repository
git clone [email protected]:ChristianKniep/k8s-wordsmith-demo.git
cd k8s-wordsmith-demo.git
git checkout -b update/container_to_kube
docker-compose pull
cd swarmprom ; docker-compose pull
docker-compose build
$ export TAG=$(date +%s)$ docker-compose buildWARNING: Some services (api) use the 'deploy' key, which will be ignored.Building webStep 1/12 : FROM golang:1.9.1-alpine3.6 as builder*snip*Successfully tagged qnib/k8s-wordsmith-web:1518955537Building api*snip*Successfully tagged qnib/k8s-wordsmith-api:1518955537Building db*snip*Successfully tagged qnib/k8s-wordsmith-db:1518955537
docker-compose build
$ docker-compose upWARNING: Some services (api) use the 'deploy' key, which will be ignored. Creating network "k8swordsmithdemo_default" with the default driverCreating k8swordsmithdemo_web_1 ... doneCreating k8swordsmithdemo_api_1 ... doneCreating k8swordsmithdemo_db_1 ... doneAttaching to k8swordsmithdemo_db_1, k8swordsmithdemo_api_1, k8swordsmithdemo_web_1db_1 | The files belonging to this database system will be owned by user "postgres".db_1 | This user must also own the server process.
$ cd swarmprom$ docker stack deploy -c docker-compose.yml promCreating network prom_netCreating config prom_service_rulesCreating config prom_node_nameCreating config prom_caddy_configCreating config prom_dockerd_configCreating config prom_node_rulesCreating config prom_task_rulesCreating service prom_caddyCreating service prom_dockerd-exporterCreating service prom_cadvisorCreating service prom_grafanaCreating service prom_node-exporterCreating service prom_prometheus
Deploy Auxiliary Stack to Monitor SWARMFork of: https://github.com/stefanprodan/swarmprom
Docker stack deployUsing the Docker SWARM API
$ docker stack deploy -c docker-compose.yml wordsIgnoring unsupported options: build
Creating network words_defaultCreating service words_webCreating service words_dbCreating service words_api$ docker service ls --format="{{.Name}}\t{{.Replicas}}\t{{.Image}}\t{{.Ports}}"words_api 5/5 qnib/k8s-wordsmith-api:1518955537words_db 1/1 qnib/k8s-wordsmith-db:1518955537words_web 1/1 qnib/k8s-wordsmith-web:1518955537 *:8080->80/tcp$
$ docker stack deploy -c docker-compose.yml words #2>dev/nullUpdating service words_web (id: fv7z1lryqmysxhzobdjrbgecl)image qnib/k8s-wordsmith-web:1518955537 could not be accessed on a registry to record its digest. Each node will access qnib/k8s-wordsmith-web:1518955537 independently, possibly leading to different nodes running different versions of the image.
Docker stack deploy #2Using the docker-CRD within Kube
$ docker stack rm wordsRemoving service words_apiRemoving service words_dbRemoving service words_webRemoving network words_default$ export DOCKER_ORCHESTRATOR=kubernetes$ docker stack deploy -c docker-compose.yml wordsStack words was createdWaiting for the stack to be stable and running... - Service api has one container running - Service db has one container running - Service web has one container runningStack words is stable and running$
Kubectl deploy #2Using the kubectl CLI
$ export DOCKER_ORCHESTRATOR=kubernetes$ kubectl apply -f .deployment "kube-api" createdservice "kube-api" createddeployment "kube-db" createdservice "kube-db" createddeployment "kube-web" createdservice "kube-web" created$
THANK YOU :)[email protected]