Home / Keptn v1 Docs / Release 0.12.x / Operate Keptn / Multi-cluster setup
Keptn Control plane
Keptn Execution plane
To operate Keptn in a multi-cluster setup, you need obviously at least two Kubernetes clusters:
To create a Kubernetes cluster, please follow the instructions here.
The Control Plane of Keptn is responsible for orchestrating your processes for continuous delivery or automated operations.
Before starting the installation, make yourself familiar with the ways of exposing Keptn as explained here. Then come back and continue installing Keptn control plane.
To install the control plane, execute
keptn install with the option you chose for exposing Keptn:
keptn install --endpoint-service-type=[LoadBalancer, NodePort, ClusterIP]
Before continuing, please retrieve:
In this release of Keptn, the execution plane services for deployment (
helm-service) and testing (
jmeter-service) can be installed via Helm Charts.
Please find the Helm Charts here:
helm-service: GitHub Release for 0.12.0 at Assets >
jmeter-service: GitHub Release for 0.12.0 at Assets >
values.yaml from the release branch, e.g., for the jmeter-service:
values.yaml to connect the services to the Keptn control plane, identified by its endpoint and API token. Therefore, set the values (1) - (5):
remoteControlPlane: enabled: true # < (1) set to true api: protocol: "http" # < (2) set protocol: http or https hostname: "" # < (3) set Keptn endpoint (without /api) apiValidateTls: true # < (4 - optional) option to skip TLS verification token: "" # < (5) set Keptn API token
Depending on your setup of the multi-cluster environment and the approach you modeled your staging process, one stage can be for example on a separate cluster. Let’s assume the following setup:
hardening- on Cluster-A
production- on Cluster-B
To properly configure the execution plane services that run, for example, on Cluster-A, the distributor in the
values.yaml needs to be configured:
distributor: projectFilter: "" # set the project, e.g., "sockshop" to get events for this project. stageFilter: "hardening" # set the stage, e.g., "hardening" to get events for the stage. serviceFilter: "" # set the service, e.g., "carts" to get events for the service.
serviceFilter allow a comma-separated list of values.
Deploy the execution plane service (e.g., jmeter-service) from release assets with your
values.yaml and by using
helm install jmeter-service https://github.com/keptn/keptn/releases/download/0.12.0/jmeter-service-0.12.0.tgz -n keptn-exec --create-namespace --values=values.yaml
Test connection to Keptn control plane using:
helm test jmeter-service -n keptn-exec
Pod jmeter-service-test-api-connection pending Pod jmeter-service-test-api-connection succeeded NAME: jmeter-service LAST DEPLOYED: Thu Feb 25 15:55:24 2021 NAMESPACE: keptn-exec STATUS: deployed REVISION: 1 TEST SUITE: jmeter-service-test-api-connection Last Started: Thu Feb 25 15:55:40 2021 Last Completed: Thu Feb 25 15:55:42 2021 Phase: Succeeded
To uninstall an execution plane service, e.g., jmeter-service, just execute:
helm uninstall jmeter-service -n keptn-exec
See the configuration parameters of the supported execution plane services:
helm-service: Helm Chart values
jmeter-service: Helm Chart values
The important once that are used in the above example are:
||Sets the stage this service belongs to||
||Sets the service this service belongs to||
||Sets the project this service belongs to||
||Enables remote execution plane mode||
||Used protocol (http, https)||
||Hostname of the control plane cluster (and port)||
||Defines if the control plane certificate should be validated||
||Keptn API token||
If you see in the Keptn Bridge that an event was triggered but no service was reacting upon this trigger, test the connectivity from the execution plane service to the control plane. (as mentioned above) The Helm Charts for the
jmeter-service have a built in sanity check that validates whether the connection to the control plane can be established.
Test (sanity check):
Connect you to the cluster where the execution plane is running
For example, you want to test
jmeter-service that is running in
keptn-exec namespace, execute:
helm test jmeter-service -n keptn-exec
* The expected outcome should be: ```console Pod jmeter-service-test-api-connection pending Pod jmeter-service-test-api-connection succeeded NAME: jmeter-service LAST DEPLOYED: Thu Feb 25 15:55:24 2021 NAMESPACE: keptn-exec STATUS: deployed REVISION: 1 TEST SUITE: jmeter-service-test-api-connection Last Started: Thu Feb 25 15:55:40 2021 Last Completed: Thu Feb 25 15:55:42 2021 Phase: Succeeded
remoteControlPlane: enabled: true # < (1) set to true api: protocol: "http" # < (2) set protocol: http or https hostname: "" # < (3) set Keptn hostname (without /api) apiValidateTls: true # < (4 - optional) option to skip TLS verification token: "" # < (5) set Keptn API token