Home / Keptn v1 Docs / Release 1.y.z / Define Keptn Projects / Deployment with Helm
Keptn uses Helm v3 to deploy services to a Kubernetes cluster. This is currently implemented in the helm-service. Keptn’s helm-service supports the following deployment strategies:
The explanation below is based on the Helm Chart provided for the carts microservice, see Charts for details.
If the deployment strategy of a stage in the shipyard is configured as deploymentstrategy: direct
, Helm deploys a
release called sockshop-dev-carts
as carts
in namespace sockshop-dev
.
When triggering a delivery (with a new artifact), we are updating the values.yaml file in the Helm Chart with the respective image name.
If the deployment strategy of a stage in the shipyard is configured as deploymentstrategy: 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:
When triggering a delivery (with a new artifact, e.g., 0.13.2), a canary deployment will be modified and scaled up.
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.13.2). Traffic is shifted to the canary release.
Once testing has finished, the primary deployment is upgraded to the new version (0.13.2).
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:
If the deployment strategy of a stage in the shipyard
is configured as deploymentstrategy: user_managed
, the provided Helm Chart is deployed without any modification and
applied as it is.
Assuming that your project’s shipyard file contains a stage with deploymentstrategy: user_managed
, you need to:
endpoints.yaml
where you define the host name under which your deployed service will be available:Note: This step is required, if you need the data.deployment.deploymentURIsPublic
and/or data.deployment.deploymentURIsLocal
property of the deployment.finished
event sent by the helm-service. This is the case, e.g., when the jmeter-service
, which performs the test
task needs to determine the URL for the service to be tested. The endpoints.yaml
file has the following structure:
where the content of delivery.json
looks something like:
Limitations:
keptn trigger delivery
command as you would
normally do. Hence, you need to send an event using keptn send event
as described above.