Continuous Delivery the hard way with Kubernetes
Luke Marsden, Developer Experience @lmarsden
Continuous Delivery the hard way with Kubernetes Luke Marsden, - - PowerPoint PPT Presentation
Continuous Delivery the hard way with Kubernetes Luke Marsden, Developer Experience @lmarsden Agenda 1. Why should I deliver continuously? 2. Kubernetes primer 3. GitLab primer 4. OK, so weve got these pieces, how are we going to put
Luke Marsden, Developer Experience @lmarsden
Pods
containers
Services
Container Image Docker container image, contains your application code in an isolated environment. Pod A set of containers, sharing network namespace and local volumes, co-scheduled on one machine. Mortal. Has pod IP. Has labels. Deployment Specify how many replicas of a pod should run in a cluster. Then ensures that many are running across the cluster. Has labels. Service Names things in DNS. Gets virtual IP. Two types: ClusterIP for internal services, NodePort for publishing to outside. Routes based on labels.
CI system Docker registry GitLab Version controlled code Version controlled code
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Code Docker image Kubernetes YAML
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Code Docker image Kubernetes YAML git git + shell docker registry API kubernetes API
Version controlled code CI system Docker registry Kubernetes cluster Code Docker image Kubernetes YAML
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster kubectl apply -f service.yaml
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Code Docker image
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster git push
master
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster docker build
:a1b2c3
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster docker push
:a1b2c3
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster kubectl set image
:a1b2c3
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster git checkout master git revert HEAD git push
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster docker build
:b2c3d4
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster docker push
:b2c3d4
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster kubectl set image
:b2c3d4
service
for users
for orders
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Code Docker image Kubernetes YAML Have the CI system update the yamels automatically for you
Now you can recreate your production environment from the central YAML repository even if your entire production cluster gets deleted
to rollback without pushing code)
remember to update the central configuration repo as well
checkout and git push (need a global lock)
pinning, automation for some envs and manual gating for others, and your
Code versions (branches, tags) Environments & releases
conflating per- service code branches with environments in each repo is a hack, and doesn’t scale well
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
rollback!
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
rollback!
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
rollback!
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
rollback!
Version controlled code
Version controlled code CI system Docker registry Kubernetes cluster Version controlled config Release manager Code Docker image Kubernetes YAML
p u s h i m a g e push config pull image list images p u l l , m
i f y , p u s h c
f i g push code
policy
rollback!
This is how we deploy Weave Cloud Weave Cloud helps devops iterate faster with:
monitoring
firewalls Weave Flux is a release manager for Kubernetes
Check out Flux on GitHub: github.com/weaveworks/flux