Fix Sonobuoy systemd-image for k8 1.18
[validation.git] / docker / README.rst
1 .. ############################################################################
2 .. Copyright (c) 2019 AT&T, ENEA AB, Nokia and others                         #
3 ..                                                                            #
4 .. Licensed under the Apache License, Version 2.0 (the "License");            #
5 .. you maynot use this file except in compliance with the License.            #
6 ..                                                                            #
7 .. You may obtain a copy of the License at                                    #
8 ..       http://www.apache.org/licenses/LICENSE-2.0                           #
9 ..                                                                            #
10 .. Unless required by applicable law or agreed to in writing, software        #
11 .. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
12 .. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
13 .. See the License for the specific language governing permissions and        #
14 .. limitations under the License.                                             #
15 .. ############################################################################
16
17
18 Overview
19 ========
20
21 The Makefile in this directory is used to build and push all
22 the validation containers. The default registry is **akraino** on
23 dockerhub, but only CI jenkins slaves are authorized to push
24 images to that registry. If you want to push to your own test registry, set
25 the REGISTRY variables as in the commands below.
26
27 To build and push the images:
28
29 .. code-block:: console
30
31     make all [ REGISTRY=<dockerhub_registry> ]
32
33 To just build the containers, use the command:
34
35 .. code-block:: console
36
37     make build-all [ REGISTRY=<dockerhub_registry> ]
38
39 The k8s container
40 =================
41
42 Building and pushing the container
43 ----------------------------------
44
45 To build just the k8s container, use the command:
46
47 .. code-block:: console
48
49     make k8s-build [ REGISTRY=<dockerhub_registry> ]
50
51 To both build and push the container, use the command:
52
53 .. code-block:: console
54
55     make k8s [ REGISTRY=<dockerhub_registry> ]
56
57 Using the container
58 -------------------
59
60 The k8s image is meant to be ran from a server that has access to the
61 kubernetes cluster (jenkins slave, jumpserver, etc).
62
63 Before running the image, copy the folder ~/.kube from your kubernetes
64 master node to a local folder (e.g. /home/jenkins/k8s_access).
65
66 Container needs to be started with the kubernetes access folder mounted.
67 Optionally, the results folder can be mounted as well; this way the logs are
68 stored on the local server.
69
70 .. code-block:: console
71
72     docker run -ti -v /home/jenkins/k8s_access:/root/.kube/ \
73     -v /home/jenkins/k8s_results:/opt/akraino/results/ \
74     akraino/validation:k8s-latest
75
76 By default, the container will run the k8s conformance test. If you want to
77 enter the container, add */bin/sh* at the end of the command above
78
79 The mysql container
80 =====================
81
82 Building and pushing the container
83 ----------------------------------
84
85 To build just the mysql container, use the command:
86
87 .. code-block:: console
88
89    make mysql-build [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
90
91 To both build and push the container, use the command:
92
93 .. code-block:: console
94
95    make mysql [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
96
97 Using the container
98 -------------------
99 In order for the container to be easily created, the deploy.sh script has been developed. This script accepts the following as input parameters:
100
101 CONTAINER_NAME, name of the container, default value is akraino-validation-mysql
102 MYSQL_ROOT_PASSWORD, the desired mysql root user password, this variable is required
103 MYSQL_USER, the desired mysql user, the default value is 'akraino'
104 MYSQL_PASSWORD, the desired mysql user password, this variable is required
105 REGISTRY, registry of the mysql image, default value is akraino
106 NAME, name of the mysql image, default value is validation
107 TAG_PRE, first part of the image version, default value is mysql
108 TAG_VER, last part of the image version, default value is latest
109
110 In order to deploy the container, this script can be executed with the appropriate parameters.
111
112 Example (assuming the default variables have been utilized for building the image using the make command):
113
114 .. code-block:: console
115
116     cd validation/docker/mysql
117     ./deploy.sh --MYSQL_ROOT_PASSWORD root_password --MYSQL_PASSWORD akraino_password
118
119 Also, in order to re-deploy the database (it is assumed that the corresponding mysql container has been stopped and deleted) while the persistent storage already exists (currently, the 'akraino-validation-mysql' docker volume is used), a different approach should be used after the image building process.
120
121 To this end, another script has been developed, namely deploy_with_existing_storage.sh which easily deploys the container. This script accepts the following items as input parameters:
122
123 CONTAINER_NAME, the name of the container, default value is akraino-validation-mysql
124 REGISTRY, the registry of the mysql image, default value is akraino
125 NAME, the name of the mysql image, default value is validation
126 TAG_PRE, the first part of the image version, default value is mysql
127 TAG_VER, the last part of the image version, default value is latest
128
129 In order to deploy the container, this script can be executed with the appropriate parameters.
130
131 Example (assuming the default variables have been utilized for building the image using the make command):
132
133 .. code-block:: console
134
135     cd validation/docker/mysql
136     ./deploy_with_existing_persistent_storage.sh
137
138 More info can be found at the UI README file.
139
140 The ui container
141 ================
142
143 Building and pushing the container
144 ----------------------------------
145
146 To build just the UI container, use the command:
147
148 .. code-block:: console
149
150     make ui-build [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
151
152 To both build and push the container, use the command:
153
154 .. code-block:: console
155
156     make ui [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
157
158 Using the container
159 -------------------
160 In order for the container to be easily created, the deploy.sh script has been developed. This script accepts the following as input parameters:
161
162 CONTAINER_NAME, the name of the contaner, default value is akraino-validation-ui
163 DB_IP_PORT, the IP and port of the mysql instance, this variable is required
164 MYSQL_USER, the mysql user, the default value is 'akraino'
165 MYSQL_PASSWORD, the mysql user password, this variable is required
166 REGISTRY, the registry of the mysql image, default value is akraino
167 NAME, the name of the mysql image, default value is validation
168 TAG_PRE, the first part of the image version, default value is ui
169 TAG_VER, the last part of the image version, default value is latest
170 JENKINS_URL, the URL of the Jenkins instance (http or https must be defined), the default value is 'https://jenkins.akraino.org/'
171 JENKINS_USERNAME, the Jenkins user name, the default value is 'demo' (in the context of UI full control loop mode, this parameter must be changed to include a real Jenkins user)
172 JENKINS_USER_PASSWORD, the Jenkins user password, the default value is 'demo' (in the context of UI full control loop mode, this parameter must be changed to include a real Jenkins user password)
173 JENKINS_JOB_NAME, the name of Jenkins job capable of executing the blueprint validation tests, the default value is 'validation' (in the context of UI full control loop mode, this parameter must be changed to include a real Jenkins job name)
174 NEXUS_PROXY, the needed proxy in order for the Nexus server to be reachable, default value is none
175 JENKINS_PROXY, the needed proxy in order for the Jenkins server to be reachable, default value is none
176 CERTDIR, the directory where the SSL certificates can be found, default value is the working directory where self signed certificates exist only for demo purposes
177 ENCRYPTION_KEY, the key that should be used by the AES algorithm for encrypting passwords stored in database, this variable is required
178 UI_ADMIN_PASSWORD, the desired Blueprint Validation UI password for the admin user, this variable is required
179 TRUST_ALL, the variable that defines whether the UI should trust all certificates or not, default value is false
180 USE_NETWORK_HOST, the variable that defines whether the UI container should run in 'network host' mode or not, default value is "false"
181
182 Note that, for a functional UI, the following prerequisites are needed:
183
184 - The mysql container in up and running state
185 - A Jenkins instance capable of running the blueprint validation test (this is optional and is needed only for UI full control loop mode)
186 - A Nexus repo in which all the test results are stored.
187
188 More info can be found at the UI README file.
189
190 In order to deploy the container, the aforementioned script can be executed with the appropriate parameters.
191
192 Example (assuming the default variables have been utilized for building the image using the make command):
193
194 .. code-block:: console
195
196     cd validation/docker/ui
197     ./deploy.sh --DB_IP_PORT 172.17.0.3:3306 --MYSQL_PASSWORD akraino_password --ENCRYPTION_KEY AGADdG4D04BKm2IxIWEr8o== --UI_ADMIN_PASSWORD admin
198
199 The kube-conformance container
200 ==============================
201
202 The current kube-conformance image used is being pulled from k8s.gcr.io
203 based on the kubernetes version the cluster is running on.
204
205 For more information refer to https://sonobuoy.io/docs/v0.50.0/
206
207 The sonobuoy-plugin-systemd-logs container
208 ==========================================
209
210 The current sonobuoy-plugin-systemd-logs image used is being pulled from
211 gcr.io/heptio-images repo with latest tag.
212
213 For more information refer to https://sonobuoy.io/docs/v0.50.0/
214
215
216 The openstack container
217 =======================
218
219 Building and pushing the container
220 ----------------------------------
221
222 To build just the openstack container, use the command:
223
224 .. code-block:: console
225
226     make openstack-build [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
227
228 To both build and push the container, use the command:
229
230 .. code-block:: console
231
232     make openstack [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
233
234 Using the container
235 -------------------
236
237 The openstack image is meant to be ran from a server that has access to the
238 openstack deployment (jenkins slave, jumpserver, etc).
239
240 Before running the image, copy openstack deployment environment variables
241 (openrc) to a local folder (e.g. /root/openrc).
242
243 Container needs to be started with the openrc file mounted. Optionally, test
244 cases can be excluded from execution via a mounted blacklist file.
245
246 The results folder can be mounted as well; this way the logs are
247 stored on the local server.
248
249 .. code-block:: console
250
251     docker run -ti -v /home/jenkins/openrc:/root/openrc \
252     -v /home/jenkins/blacklist.txt:/opt/akraino/validation/tests/openstack/tempest/blacklist.txt \
253     -v /home/jenkins/openstack_results:/opt/akraino/results/ \
254     akraino/validation:openstack-latest
255
256 The helm container
257 ==================
258
259 Building and pushing the container
260 ----------------------------------
261
262 To build just the helm container, use the command:
263
264 .. code-block:: console
265
266     make helm-build [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
267
268 To both build and push the container, use the command:
269
270 .. code-block:: console
271
272     make helm [ REGISTRY=<dockerhub_registry> NAME=<image_name>]
273
274 Using the container
275 -------------------
276
277 Container needs to be started with the SSH key file mounted. Users
278 credentials can be provided via a mounted variables.yaml file.
279
280 The results folder can be mounted as well; this way the logs are
281 stored on the local server.
282
283 .. code-block:: console
284
285     docker run -ti -v /home/jenkins/openrc:/root/openrc \
286     -v /home/foobar/.ssh/id_rsa:/root/.ssh/id_rsa \
287     -v /home/foobar/variables.yaml:/opt/akraino/validation/tests/variables.yaml \
288     -v /home/foobar/helm_results:/opt/akraino/results/ \
289     akraino/validation:helm-latest