Home / Docs / Develop / Continuous Delivery / Deployment with Helm
Keptn uses Helm v3 for deploying onboarded services to a Kubernetes cluster. This is currently implemented in the helm-service. The helm-service supports two deployment strategies explained below:
The explanation is based on the provided Helm Chart for the carts microservice, see Charts for details.
If the deployment strategy of a stage in the shipyard is configured as deployment_strategy: direct
, Helm deploys a
release called sockshop-dev-carts
as carts
in namespace sockshop-dev
.
$ kubectl get deployments -n sockshop-dev carts -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
carts 1/1 1 1 56m carts docker.io/keptnexamples/carts:0.11.1 app=carts
When sending a new-artifact, we are updating the values.yaml file in the Helm Charts with the respective image name.
If the deployment strategy of a stage in the shipyard is configured as deployment_strategy: blue_green_service
, Helm creates two
deployments within the Kubernetes cluster: (1) the primary and (2) the canary deployment. This can be inspected using the
following command:
$ kubectl get deployments -n sockshop-staging carts carts-primary -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
carts-primary 1/1 1 1 56m carts docker.io/keptnexamples/carts:0.11.1 app=carts-primary
carts 0/0 0 0 3m carts docker.io/keptnexamples/carts:0.11.2 app=carts
When a new artifact is deployed (e.g., 0.11.2), a canary deployment will be modified and scaled up.
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
carts-primary 1/1 1 1 57m carts docker.io/keptnexamples/carts:0.11.1 app=carts-primary
carts 0/1 1 1 1m carts docker.io/keptnexamples/carts:0.11.2 app=carts
The primary deployment is always available (and called carts-primary
). The canary deployment (called carts
) gets scaled up in the case of a new-artifact event (e.g., in this case someone has sent a new-artifact for 0.11.2). Traffic is shifted to the canary release.
Once testing has finished, the primary deployment is upgraded to the new version (0.11.2).
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
carts-primary 1/1 1 1 3m carts docker.io/keptnexamples/carts:0.11.2 app=carts-primary
carts 1/1 1 1 1d carts docker.io/keptnexamples/carts:0.11.2 app=carts
After a new pod for the primary deployment has been successfully deployed, traffic is shifted to the primary deployment and the canary deployment is scaled down:
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
carts-primary 1/1 1 1 4m carts docker.io/keptnexamples/carts:0.11.2 app=carts-primary
carts 0/0 0 0 1d carts docker.io/keptnexamples/carts:0.11.2 app=carts
When executing keptn delete project, Keptn does not clean up existing deployments nor Helm releases. To do so, delete all relevant namespaces:
kubectl delete namespace PROJECTNAME-STAGENAME
, e.g.: kubectl delete namespace sockshop-dev
kubectl delete namespace sockshop-staging
kubectl delete namespace sockshop-production
Note: This will also delete the corresponding Helm releases, which are stored as Kubernetes secrets in the namespaces.