k8s-deployment-strategies

Kubernetes deployment strategies explained

Github星跟蹤圖

Kubernetes deployment strategies

In Kubernetes there is few different way to release an application, you have
to carefully choose the right strategy to make your infrastructure resilient.

  • recreate: terminate the old version and release the new one
  • ramped: release a new version on a rolling update fashion, one
    after the other
  • blue/green: release a new version alongside the old version
    then switch traffic
  • canary: release a new version to a subset of users, then proceed
    to a full rollout
  • a/b testing: release a new version to a subset of users in a
    precise way (HTTP headers, cookie, weight, etc.). This doesn’t come out of the
    box with Kubernetes, it imply extra work to setup a smarter
    loadbalancing system (Istio, Linkerd, Traeffik, custom nginx/haproxy, etc).
  • shadow: release a new version alongside the old version. Incoming
    traffic is mirrored to the new version and doesn't impact the
    response.

deployment strategy decision diagram

Before experimenting, checkout the following resources:

Getting started

These examples were created and tested on Minikube
running with Kubernetes v1.10.0.

$ minikube start --kubernetes-version v1.10.0 --memory 8192 --cpus 2

Visualizing using Prometheus and Grafana

The following steps describe how to setup Prometheus and Grafana to visualize
the progress and performance of a deployment.

Install Helm

To install Helm, follow the instructions provided on their
website.

$ helm init

Install Prometheus

$ helm install \
    --namespace=monitoring \
    --name=prometheus \
    --version=7.0.0 \
    stable/prometheus

Install Grafana

$ helm install \
    --namespace=monitoring \
    --name=grafana \
    --version=1.12.0 \
    --set=adminUser=admin \
    --set=adminPassword=admin \
    --set=service.type=NodePort \
    stable/grafana

Setup Grafana

Now that Prometheus and Grafana are up and running, you can access Grafana:

$ minikube service grafana

To login, username: admin, password: admin.

Then you need to connect Grafana to Prometheus, to do so, add a DataSource:

Name: prometheus
Type: Prometheus
Url: http://prometheus-server
Access: Server

Create a dashboard with a Graph. Use the following query:

sum(rate(http_requests_total{app="my-app"}[5m])) by (version)

To have a better overview of the version, add {{version}} in the legend field.

Example graph

Recreate:

Kubernetes deployment recreate

Ramped:

Kubernetes deployment ramped

Blue/Green:

Kubernetes deployment blue-green

Canary:

Kubernetes deployment canary

A/B testing:

kubernetes ab-testing deployment

Shadow:

kubernetes shadow deployment

主要指標

概覽
名稱與所有者ContainerSolutions/k8s-deployment-strategies
主編程語言Go
編程語言Go (語言數: 3)
平台
許可證
所有者活动
創建於2017-09-21 08:46:42
推送於2024-04-24 08:10:01
最后一次提交2024-04-24 05:10:01
發布數0
用户参与
星數3.6k
關注者數136
派生數1.1k
提交數59
已啟用問題?
問題數4
打開的問題數1
拉請求數12
打開的拉請求數1
關閉的拉請求數2
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?