b30dff39af7f4aceffc095b755657324b36eba13
[policy/parent.git] / docs / clamp / controlloop / design-impl / participants / k8s-participant.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2
3 .. _clamp-controlloop-k8s-participant:
4
5 Kubernetes Participant
6 ######################
7
8 The kubernetes participant receives a helm chart information from the CLAMP runtime and installs the helm chart in to the
9 k8s cluster on the specified namespace. It can fetch the helm chart from remote helm repositories as well as from any of the repositories
10 that are configured on the helm client. The participant acts as a wrapper around the helm client and creates the required
11 resources in the k8s cluster.
12
13 The kubernetes participant also exposes REST endpoints for onboarding, installing and uninstalling of helm charts from the
14 local chart database which facilitates the user to also use this component as a standalone application for helm operations.
15
16 In Istanbul version, the kubernetes participant supports the following methods of installation of helm charts.
17
18 - Installation of helm charts from configured helm repositories and remote repositories passed via TOSCA in CLAMP.
19 - Installation of helm charts from the local chart database via the participant's REST Api.
20
21 Prerequisites for using Kubernetes participant in Istanbul version:
22 -------------------------------------------------------------------
23
24 - A running Kubernetes cluster.
25
26   Note:
27
28   - If the kubernetes participant is deployed outside the cluster , the config file of the k8s cluster needs to be copied to the `./kube` folder of kubernetes participant's home directory to make the participant work with the external cluster.
29
30   - If the participant needs additional permission to create resources on the cluster, cluster-admin role binding can be created for the service account of the participant with the below command.
31
32     Example: `kubectl create clusterrolebinding k8s-participant-admin-binding --clusterrole=cluster-admin --serviceaccount=<k8s participant service account>`
33
34
35 .. image:: ../../images/participants/k8s-participant.png
36
37 Defining a TOSCA CL definition for kubernetes participant:
38 -------------------------------------------------------
39 A *chart* parameter map describes the helm chart parameters in tosca template for a microservice that is used by the kubernetes participant for the deployment.
40 A Control Loop element in TOSCA is mapped to the kubernetes participant and also holds the helm chart parameters for a microservice defined under the properties of the Control Loop Element.
41
42 Sample tosca template defining a participant and a control loop element for a control loop. :download:`click here <tosca/tosca-k8s-participant.yml>`
43
44
45 Configuring a Control Loop Element on the kubernetes participant for a Control Loop
46 -----------------------------------------------------------------------------------
47
48 The user configures the following properties in the TOSCA template for the kubernetes participant:
49
50 .. list-table::
51    :widths: 15 10 50
52    :header-rows: 1
53
54    * - Property
55      - Type
56      - Description
57    * - chartId
58      - ToscaConceptIdentifier
59      - The name and version of the helm chart that needs to be managed by the kubernetes participant
60    * - namespace
61      - String
62      - The namespace in the k8s cluster where the helm chart needs to be installed
63    * - releaseName
64      - String
65      - The helm deployment name that specifies the installed component in the k8s cluster
66    * - repository (optional)
67      - map
68      - A map of *<String, String>* defining the helm repository parameters for the chart
69    * - overrideParams (optional)
70      - map
71      - A map of *<String, String>* defining the helm chart parameters that needs to be overridden
72
73 Note: The repository property can be skipped if the helm chart is available in the local chart database or
74 in a repository that is already configured on the helm client. The participant does a chart lookup by default.
75
76 The *repository* type is described in the following table:
77
78 .. list-table::
79    :widths: 15 10 50
80    :header-rows: 1
81
82    * - Field
83      - Type
84      - Description
85    * - repoName
86      - String
87      - The name of the helm repository that needs to be configured on the helm client
88    * - protocol
89      - String
90      - Specifies http/https protocols to connect with repository url
91    * - address
92      - String
93      - Specifies the ip address or the host name
94    * - port (optional)
95      - String
96      - Specifies the port where the repository service is running
97    * - userName (optional)
98      - String
99      - The username to login the helm repository
100    * - password (optional)
101      - String
102      - The password to login the helm repository
103
104
105 Kubernetes participant Interactions:
106 ------------------------------------
107 The kubernetes participant interacts with Control Loop Runtime on the northbound via DMaap. It interacts with the helm client on the southbound for performing various helm operations to the k8s cluster.
108
109 The communication for the Control loop updates and state change requests are sent from the Control Loop Runtime to the participant via DMaap.
110 The participant performs appropriate operations on the k8s cluster via helm client based on the received messages from the Control Loop Runtime.
111
112
113 kubernetes participant Workflow:
114 --------------------------------
115 Once the participant is started, it sends a "REGISTER" event to the DMaap topic which is then consumed by the Control Loop Runtime to register this participant on the runtime database.
116 The user can commission the tosca definitions from the Policy Gui to the Control Loop Runtime that further updates the participant with these definitions via DMaap.
117 Once the control loop definitions are available in the runtime database, the Control Loop can be instantiated with the default state "UNINITIALISED" from the Policy Gui.
118
119 When the state of the Control Loop is changed from "UNINITIALISED" to "PASSIVE" from the Policy Gui, the kubernetes participant receives the control loop state change event from the runtime and
120 deploys the helm charts associated with each Control Loop Elements by creating appropriate namespace on the cluster.
121 If the repository of the helm chart is not passed via TOSCA, the participant looks for the helm chart in the configured helm repositories of helm client.
122 It also performs a chart look up on the local chart database where the helm charts are onboarded via the participant's REST Api.
123
124 The participant also monitors the deployed pods for the next 3 minutes until the pods comes to RUNNING state.
125 It holds the deployment information of the pods including the current status of the pods after the deployment.
126
127 When the state of the Control Loop is changed from "PASSIVE" to "UNINITIALISED" back, the participant also undeploys the helm charts from the cluster that are part of the Control Loop Element.
128
129 REST APIs on Kubernetes participant
130 -----------------------------------
131
132 Kubernetes participant can also be installed as a standalone application which exposes REST endpoints for onboarding,
133 installing, uninstalling helm charts from local chart database.
134
135
136 .. image:: ../../images/participants/k8s-rest.png
137
138 :download:`Download Kubernetes participant API Swagger <swagger/k8s-participant-swagger.json>`