Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Continuous Delivery on the Kuberrnetes Platform
Search
Nicolas Byl
February 16, 2017
Technology
0
200
Continuous Delivery on the Kuberrnetes Platform
Nicolas Byl
February 16, 2017
Tweet
Share
More Decks by Nicolas Byl
See All by Nicolas Byl
Die Flucht aus der Prototypen-Hölle
nbyl
0
28
Lean Prototyping for Industrial-IoT Projects
nbyl
0
19
DevSecOps - Vom Unikum zur gut geölten Maschine
nbyl
0
80
Securing your software supply chain
nbyl
0
300
Keeping-Up-WithUpstream.pdf
nbyl
0
110
Dr. Kube und der Helm - Anatomie einer CD-Pipeline
nbyl
0
89
Securing the "other" supply chain
nbyl
0
210
Kubernetes - Auf die Cluster, Fertig, Los!
nbyl
0
130
Helm - Kubernetes Deployments richtig gemacht
nbyl
0
110
Other Decks in Technology
See All in Technology
【shownet.conf_】トポロジ図の歩き方
shownet
PRO
0
370
10Xでのデータ基盤の変遷とこれから: データマネジメントのリアル 〜BtoB企業3社の歩みとこれから〜
10xinc
6
1.2k
[JAWS-UG GameTech] 第6回 各種事例紹介_18TRIPにおけるAWSサービスを活用した負荷テスト・障害テスト
naoto_yasuda
0
120
OPENLOGI Company Profile
hr01
0
53k
クレジットカードを製造する技術
yutadayo
72
36k
Assisted reorganization of data structures
ennael
PRO
0
220
【shownet.conf_】多様化するネットワーク環境を柔軟に統合するルーティングテクノロジー
shownet
PRO
0
280
Consoles, printk, Nested-NMIs_ Oh my!
ennael
PRO
0
160
Renovate ではじめる運用レスなライブラリ更新 / 令和最新版 他人に自慢したいヤバいCI/CD LT会 @ yabaibuki.dev #2
ponkio_o
PRO
1
130
Oracle GoldenGate 23ai 導入Tips
oracle4engineer
PRO
1
210
リスクから学ぶKubernetesコンテナセキュリティ/k8s-risk-and-security
mochizuki875
1
280
【shownet.conf_】3Dアプローチで守るセキュリティ
shownet
PRO
0
280
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
125
18k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
327
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
231
130k
How GitHub Uses GitHub to Build GitHub
holman
473
290k
Navigating Team Friction
lara
183
14k
Into the Great Unknown - MozCon
thekraken
30
1.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
403
65k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
Learning to Love Humans: Emotional Interface Design
aarron
271
40k
Statistics for Hackers
jakevdp
796
220k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Transcript
1 CONTINUOUS DELIVERY ON THE KUBERNETES PLATFORM microXchg 2017 Nicolas
Byl, codecentric AG
2 . 1 GETTING STARTED
2 . 2 Mission Statement You can follow the pipeline
on your device. Install prequisites
2 . 3 Prequisites https://github.com/nbyl/cd-workshop-demo
2 . 4 Organisational Stuff Ask questions anytime! Breaks?
None
2 . 5 3 . 1 CONTINUOUS DELIVERY
3 . 2 Key Concepts The software is releasable at
at any time The whole process from source to production is automated Decouple technical rollout from feature rollout
3 . 3 Continuous Delivery vs. Continuous Deployment Continuous Delivery:
Software is releasable at any time Continuous Deployment: Software is released on every change
4 . 1 DOCKER
None
4 . 2
4 . 3
4 . 4
4 . 5
4 . 6 4 . 7 Dockerfile FROM java:8 MAINTAINER
Marcel Birkner <
[email protected]
> ADD target/edmp-sample-app*.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"]}
None
4 . 8 5 . 1 KUBERNETES
"Kubernetes is an open-source platform for automating deployment, scaling, and
operations of application containers across clusters of hosts, providing container- centric infrastructure."
5 . 2 portable: public, private, hybrid, multi-cloud extensible: modular,
pluggable, hookable, composable self-healing: auto-placement, auto-restart, auto- replication, auto-scaling
5 . 3
5 . 4 5 . 5 Pods & Co.
5 . 6 Pods
5 . 7 Replication Controller P P P
5 . 8 Deployment combination of pod & replication controller
edited as a unit
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: frontend spec: replicas: 3
template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: gcr.io/google-samples/gb-frontend:v4 resources: requests:
5 . 9 5 . 10 Services
5 . 11 endpoint for a set of pods an
external endpoint can be resolved using DNS environment variables
None
5 . 12 6 . 1 SHOWCASE PROJECT
6 . 2 confy microservice to manage conference talks and
speakers technology: REST-API UI using Gradle Spring Boot (Web, JPA) ng-admin https://github.com/nbyl/confy
6 . 3 Target Platform kubernetes PostgreSQL
6 . 4 Testing Requirements automatic testing using the target
database user acceptance test before exposing new versions
6 . 5 Build Pipeline build publish docker container integration
test user acceptance test production
6 . 6 Assumptions any manual interaction will be done
in reasonable period our cluster will (for now) contain of only one host
7 . 1 LAB 1: SETUP
7 . 2 Recently on this Program... Have you installed
the prerequisites?
7 . 3 Create a cluster minikube start --memory 4096
kubectl apply -f minikube/storageclass.yml
7 . 4 Install Helm helm init
7 . 5 Install Jenkins helm install stable/jenkins --set Agent.Memory=1024Mi
--name=cd minikube service cd-jenkins
8 . 1 LAB 2: CONTINUOUS INTEGRATION
8 . 2 Objectives build an artefact of the software
run all unit tests and in-tree integration tests
8 . 3 Jenkins Kubernetes Plugin creates a new pod
for every job use the pod as a temporary build slave
8 . 4 Let's Go create a new pipeline job
use as SCM source for your Jenkinsfile https://github.com/nbyl/cd-workshop-demo.git
8 . 5 caveat build cache is gone after every
build
None
8 . 6 8 . 7 persistent volumes create manually
use storageclass with auto- provisioner
kind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata: name: generic provisioner: kubernetes.io/host-path
8 . 8 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: gradle-cache
annotations: volume.beta.kubernetes.io/storage-class: "generic" spec: accessModes: - ReadWriteOnce resources: requests: storage: 8Gi
8 . 9 9 . 1 LAB 3: BUILDING A
DOCKER CONTAINER
9 . 2 Objectives build a docker container containing the
application make the container available for deployment
9 . 3 Build Pod Revisited using build pods is
scalable and reproducible the host docker daemon is not reachable
9 . 4 Docker-in-Docker Builds mount the docker sockets inside
the container /run/docker.sock /var/run/docker.sock image will be built in host docker Warning: possible security problem
10 . 1 LAB 4: INTEGRATION TESTING
10 . 2 Objectives create a deployment description for the
application deployment the application in a configuration analog to production run an integration test verifying the basic functionality
10 . 3 Helm Chart helm create helm/confy [edit] helm
upgrade --install dev-confy helm-confy
10 . 4 Configure the Application env: - name: SPRING_DATASOURCE_URL
value: {{ .Values.database.url }} - name: SPRING_DATASOURCE_DRIVER value: {{ .Values.database.driver }} - name: SPRING_DATASOURCE_USERNAME value: {{ .Values.database.username }} - name: SPRING_DATASOURCE_PASSWORD value: {{ .Values.database.password }}
10 . 5 Simulate roduction use the same database server
as in production treat system as blackbox
11 . 1 LAB 5: USER ACCEPTANCE TESTING
11 . 2 Objectives deploy the application accessible for users
allow manual testing continue to production after manual confirmation
11 . 3 Ingress
11 . 4 Ingress Controller Read Ingress state route accordingly
Implementations: NGINX traefik F5 ...
12 . 1 LAB 5: PRODUCTION DEPLOYMENT
12 . 2 Objectives make application available for end users
(nothing new to learn)
13 . 1 WRAP UP
13 . 2 Links https://kubernetes.io https://www.cncf.io/ https://www.openshift.com/promotions/kubernetes.html https://fabric8.io https://github.com/ramitsurana/awesome-kubernetes
13 . 3 The End @NicolasByl Copyright 2017