Update document: Installation and User Guide
[vfc/nfvo/lcm.git] / docs / platform / installation / installation / vfc-over-oom.rst
1 .. contents::
2    :depth: 3
3 ..
4
5    **VFC Installation over OOM**
6    **V0.1**
7
8 1 **Scope**
9 =============
10
11 This is a guide to help developer or tester to try to install VF-C over OOM
12
13 2 **Component & function**
14 ==========================
15
16 Repos:
17 ~~~~~~
18
19 Now VF-C have the following repos in https://gerrit.onap.org/r/admin/repos/q/filter:vfc
20
21 .. list-table::
22    :widths: 30 60 10
23    :header-rows: 1
24
25    * - URL
26      - Method
27      - Description
28    * - vfc/nfvo/lcm
29      - NS life cycle management
30      -
31    * - vfc/nfvo/driver/vnfm/svnfm
32      - Specific VNFM drivers
33      -
34    * - vfc/nfvo/driver/vnfm/gvnfm
35      - Generic VNFM drivers
36      -
37    * - vfc/nfvo/db
38      - Stand-alone database microservice, provides the database service for each VF-C component
39      -
40    * - vfc/nfvo/driver/ems
41      - VNF fcaps collect
42      - Deprecated
43    * - vfc/nfvo/driver/sfc
44      - SFC Driver
45      - Deprecated
46    * - vfc/nfvo/resmanagement
47      - NS Resource Management
48      - Deprecated
49    * - vfc/nfvo/wfengine
50      - Work flow engine
51      - Deprecated
52    * - vfc/nfvo/multivimproxy
53      - Multi-vim proxy provides the multivim indirect mode proxy
54      - Deprecated
55    * - vfc/gvnfm/vnflcm
56      - Generic VNFM VNF LCM
57      -
58    * - vfc/gvnfm/vnfmgr
59      - Generic VNFM VNF Mgr
60      -
61    * - vfc/gvnfm/vnfres
62      - Generic VNFM VNF Resource Management
63      -
64
65 VF-C Docker Images:
66 ~~~~~~~~~~~~~~~~~~~~~~~~
67
68 ::
69
70   nexus3.onap.org:10001/onap/vfc/nslcm
71   nexus3.onap.org:10001/onap/vfc/db
72   nexus3.onap.org:10001/onap/vfc/gvnfmdriver
73   nexus3.onap.org:10001/onap/vfc/nfvo/svnfm/huawei
74   nexus3.onap.org:10001/onap/vfc/ztevnfmdriver
75   nexus3.onap.org:10001/onap/vfc/vnflcm
76   nexus3.onap.org:10001/onap/vfc/vnfmgr
77   nexus3.onap.org:10001/onap/vfc/vnfres
78
79
80 Deprecated from Guilin Release:
81 ::
82
83   nexus3.onap.org:10001/onap/vfc/nfvo/svnfm/nokia
84   nexus3.onap.org:10001/onap/vfc/nfvo/svnfm/nokiav2
85   nexus3.onap.org:10001/onap/vfc/emsdriver
86   nexus3.onap.org:10001/onap/vfc/jujudriver
87   nexus3.onap.org:10001/onap/vfc/multivimproxy
88   nexus3.onap.org:10001/onap/vfc/resmanagement
89   nexus3.onap.org:10001/onap/vfc/wfengine-activiti
90   nexus3.onap.org:10001/onap/vfc/wfengine-mgrservice
91   nexus3.onap.org:10001/onap/vfc/ztesdncdriver
92
93
94 **3 VF-C Deployment**
95 =====================
96
97 For initialization of docker there are 2 deployment options currently used in ONAP:
98 - using heat template
99 - using OOM
100
101 From Casablanca release, OOM is the recommended way, so here mainly give the steps for OOM based deployment
102
103 For OOM deployment you can refer to the below links:
104
105 * https://docs.onap.org/projects/onap-oom/en/latest/oom_user_guide.html#oom-user-guide
106
107 * https://docs.onap.org/projects/onap-oom/en/latest/oom_quickstart_guide.html#oom-quickstart-guide
108
109 1. First ensure VF-C is marked true against field enabled in the oom/kubernetes/onap/values.yaml for successful deployment.
110
111 ::
112
113         vfc:
114                 enabled: true
115         vid:
116                 enabled: true
117         vnfsdk:
118                 enabled: true
119         vvp:
120                 enabled: false
121
122
123
124 2. Upgrade Images in OOM charts
125
126 Ensure the component version is right, you should check the respective component image version in VF-C charts.
127 If you need update the version, please modify values.yaml
128
129 eg.
130
131 ::
132         
133     oom/kubernetes/vfc/charts/vfc-nslcm/values.yaml
134
135     #################################################################
136     # Application configuration defaults.
137     #################################################################
138     # application image
139     flavor: small
140
141     repository: nexus3.onap.org:10001
142     image: onap/vfc/nslcm:1.4.1
143     pullPolicy: Always
144         
145
146 3. Rebuild all repos in helm
147
148 Every time you change the charts, you need to rebuild all repos to ensure the change can take effect.
149
150 Step1: Build vfc repo
151
152 ::
153
154         cd oom/kubernetes
155         make vfc 
156
157 Step2: Build ONAP repo
158
159 ::
160
161         cd oom/kubernetes
162         make onap(here can also execute make all)
163
164 Step3: Delete the release already deployed
165
166 ::
167
168         cd oom/kubernetes
169         helm delete dev-vfc --purge
170
171 Step4: Deploy the new pods
172
173 ::
174
175         cd oom/kubernetes
176         helm install local/vfc --namespace onap --name dev-vfc
177
178
179 Now VF-C will be upgraded with the new image version 
180
181 You will see all the pods are running
182         
183 ::
184
185     dev-vfc-generic-vnfm-driver-6fcf454665-6pmfv       2/2     Running            0          11d
186     dev-vfc-huawei-vnfm-driver-6f6c465c76-ktpch        2/2     Running            0          11d
187     dev-vfc-mariadb-0                                  2/2     Running            0          11d
188     dev-vfc-mariadb-1                                  2/2     Running            2          11d
189     dev-vfc-mariadb-2                                  2/2     Running            0          11d
190     dev-vfc-nslcm-6dd99f94f4-vxdkc                     2/2     Running            0          11d
191     dev-vfc-redis-5d7d494fdf-crv8c                     1/1     Running            0          11d
192     dev-vfc-vnflcm-5497c66465-f5mh7                    2/2     Running            0          11d
193     dev-vfc-vnfmgr-5459b488d9-6vg75                    2/2     Running            0          11d
194     dev-vfc-vnfres-5577d674cf-g9fz7                    2/2     Running            0          11d
195     dev-vfc-zte-vnfm-driver-6685b74f95-r5phc           2/2     Running            2          11d
196
197
198 **4 VF-C health check**
199 ========================
200
201 When VF-C pods are up, if you want to check the service status, you can visit the following APIs in K8S cluster to check.
202 These swagger API will also show the APIs VF-C provided.
203
204 +--------------------------+---------------------------------------------------------------------------+
205 |     **Component Name**   |     health check API                                                      |
206 +==========================+===========================================================================+
207 |     vfc/nfvo/lcm         |     http://ClusterIP:8403/api/nslcm/v1/swagger.yaml                       |
208 +--------------------------+---------------------------------------------------------------------------+
209 |vfc/gvnfm/vnflcm          |     http://ClusterIP:8801/api/vnflcm/v1/swagger.yaml                      |
210 +--------------------------+---------------------------------------------------------------------------+
211 |vfc/gvnfm/vnfmgr          |     http://ClusterIP:8803/api/vnfmgr/v1/swagger.yaml                      |
212 +--------------------------+---------------------------------------------------------------------------+
213 |vfc/gvnfm/vnfres          |     http://ClusterIP:8802/api/vnfres/v1/swagger.yaml                      |
214 +--------------------------+---------------------------------------------------------------------------+
215
216 Here are only a few components as an example.
217
218 Take vnflcm as an example, you can visit the API as follow:
219
220 ::
221
222     ubuntu@oom-mr01-rancher:~$ kubectl -n onap get svc|grep vnflcm
223     vfc-vnflcm                         ClusterIP      10.43.71.4      <none>                                 8801/TCP                                                      87d
224     ubuntu@oom-mr01-rancher:~$ curl http://10.43.71.4:8801/api/vnflcm/v1/swagger.json
225     {"swagger": "2.0", "info": {"title": "vnflcm API", "description": "\n\nThe `swagger-ui` view can be found [here](/api/vnflcm/v1/swagger).\n
226     The `ReDoc` view can be found [here](/api/vnflcm/v1/redoc).\nThe swagger YAML document can be found [here](/api/vnflcm/v1/swagger.yaml).\n
227     The swagger JSON document can be found [here](/api/vnflcm/v1/swagger.json)."........
228         
229         
230 Because VF-C expose service by ClusterIP, so that you can only visit the APIs in K8S cluster.
231
232 If you want to visit VF-C APIs outside of K8S cluster, you can visit these APIs via MSB, because all VF-C APIs have been registered to MSB.
233
234 You can execute the following steps:
235
236 ::
237
238         ubuntu@oom-mr01-rancher:~$ kubectl -n onap get pod -o wide|grep msb-iag
239         dev-msb-msb-iag-6fbb5b4dbd-pxs8z                              2/2       Running            4          28d       10.42.72.222    mr01-node1   <none>
240         ubuntu@oom-mr01-rancher:~$ cat /etc/hosts |grep mr01-node1
241         172.60.2.39   mr01-node1
242         ubuntu@oom-mr01-rancher:~$ kubectl -n onap get svc|grep msb-iag
243         msb-iag                            NodePort       10.43.213.250   <none>                                 80:30280/TCP,443:30283/TCP                                    87d
244         ubuntu@oom-mr01-rancher:~$ curl http://172.60.2.39:30280/api/vnflcm/v1/swagger.json
245         {"swagger": "2.0", "info": {"title": "vnflcm API", "description": "\n\nThe `swagger-ui` view can be found [here](/api/vnflcm/v1/swagger).\n
246         The `ReDoc` view can be found [here](/api/vnflcm/v1/redoc).\nThe swagger YAML document can be found [here](/api/vnflcm/v1/swagger.yaml).\n
247         The swagger JSON document can be found [here](/api/vnflcm/v1/swagger.json)."........
248
249
250 You can visit the http://172.60.2.39:30280/api/vnflcm/v1/swagger.json in the browser
251
252
253 **5 Debug and Testing in running Pod**
254 ======================================
255
256 When you are doing the testing and would like to replace some new file like binary or some script and want to check the new result.
257
258 Take vfc-nslcm pod as an example:
259
260 ::
261
262     kubectl -n onap edit deployment dev-vfc-nslcm
263
264     spec:
265       containers:
266       - args:
267         - -c
268         - MYSQL_AUTH=${MYSQL_ROOT_USER}:${MYSQL_ROOT_PASSWORD} ./docker-entrypoint.sh
269         command:
270         - sh
271         env:
272         - name: MSB_HOST
273           value: https://msb-iag:443
274         - name: SSL_ENABLED
275           value: "false"
276         - name: MYSQL_ADDR
277           value: vfc-mariadb:3306
278         - name: MYSQL_ROOT_USER
279           value: root
280         - name: MYSQL_ROOT_PASSWORD
281           valueFrom:
282             secretKeyRef:
283               key: password
284               name: dev-vfc-db-root-pass
285         - name: REDIS_HOST
286           value: vfc-redis
287         - name: REDIS_PORT
288           value: "6379"
289         - name: REG_TO_MSB_WHEN_START
290           value: "false"
291         image: 192.168.235.22:10001/onap/vfc/nslcm:1.4.1
292         imagePullPolicy: IfNotPresent
293         livenessProbe:
294           failureThreshold: 3
295           initialDelaySeconds: 120
296           periodSeconds: 10
297           successThreshold: 1
298           tcpSocket:
299             port: 8403
300           timeoutSeconds: 1
301         name: vfc-nslcm
302         ports:
303         - containerPort: 8403
304           protocol: TCP
305         readinessProbe:
306
307 Then you can replace the value into the pod.
308
309
310 **6 Kubectl basic command**
311 ======================================
312
313 Basic operation of kubernests cluster(Take the namespace of onap in linux client as an example)
314
315 * Check the cluster node
316
317 ::
318             
319     kubectl  get node
320                  
321 * Check cluster namespace
322
323 ::
324                
325     kubectl  get ns
326                 
327 * View the pod information and the pod on which the node is located, under the namespace specified (for example, namespace on onap)
328
329 ::
330                      
331     kubectl get pod -o wide -n onap
332
333 * Connected to the docker in pod
334
335 ::
336       
337     Check the docker's name , return two dockers' name after execution, -c specifie the docker that needed ti go in.     
338             
339     kubectl -n onap get pod dev-vfc-nslcm-68cb7c9878-v4kt2 -o jsonpath={.spec.containers[*].name}
340                 
341     kubectl -n onap exec -it dev-vfc-nslcm-68cb7c9878-v4kt2 -c vfc-nslcm /bin/bash
342             
343 * Copy files (take the catalog example). When the data copy is lost after the pod is restarted or migrated, the multi-copy pod copy operation only exists for the current pod
344
345 ::
346     
347     Copy from local to dockers in pod
348
349     kubectl -n onap cp copy_test.sh  dev-vfc-nslcm-68cb7c9878-v4kt2: -c vfc-nslcm
350                 
351     Copy pod's content to local machine
352                 
353     kubectl -n onap cp dev-vfc-nslcm-68cb7c9878-v4kt2:copy_test.sh -c vfc-nslcm /tmp/copy_test.sh
354                 
355 * Remote command (to see the current path of the container as an example)
356
357 ::
358     
359     kubectl -n onap exec -it dev-vfc-nslcm-68cb7c9878-v4kt2 -c vfc-nslcm pwd
360                 
361 * View pod basic information and logs (no -c parameter added for single container pod)
362
363 ::
364                 
365     kubectl -n onap describe pod dev-vfc-nslcm-68cb7c9878-v4kt2
366                   
367     kubectl -n onap logs dev-vfc-nslcm-68cb7c9878-v4kt2 -c vfc-nslcm
368   
369 * Check the service listening port and manually expose the port, which is commonly used for testing, such as nginx under test namespace
370
371 ::
372                  
373     1>Build namespace
374         
375         kubectl create namespace test
376                   
377     2>create pod with 3 replication
378         
379         kubectl run nginx --image=nginx --replicas=3 -n test
380                   
381     3>Pod exposed ports for nginx (target port, source port target-port)
382                         
383         kubectl expose deployment nginx --port=88 --target-port=80 --type=LoadBalancer -n test
384                   
385         or
386                   
387         kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort -n test
388
389     4> Check svc(ports that pod exposed , The cluster internally accesses this pod via port 88., external access to the cluster using floatingip+30531)
390                   
391         kubectl get svc -n test
392                   
393         NAME      TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
394         nginx     LoadBalancer   10.43.45.186   10.0.0.3      88:30531/TCP   3m
395                    
396         NAME      TYPE           CLUSTER-IP     EXTERNAL-IP              PORT(S)                    AGE
397         nginx     NodePort       10.43.45.186                               88:30531/TCP   3m
398                    
399                    
400         Nodes within the CLUSTER can be accessed via cluster-ip +88 port
401         Outside the cluster, it is accessible via either EXTERNAL IP or the Floating IP+30531, which is the node name of the pod
402         The floatingip corresponding to the node name can be viewed in the /etc/hosts of the rancher machine or in the documentation
403
404                                
405 * Modify the container image and pod strategy (deployment, statefulset), the completion of modification will trigger the rolling update
406
407 ::
408                   
409     1>To determine whether the pod is a stateful application (efullset) or a stateful application (deployment)
410                     
411         kubectl  -n onap describe  pod dev-vfc-nslcm-68cb7c9878-v4kt2 |grep Controlled
412                     
413     2>Stateless application deployment              
414                     
415         kubectl  -n onap get deploy |grep  nslcm
416                     
417         kubectl -n onap edit deploy  dev-vfc-nslcm-68cb7c9878-v4kt2
418             
419     3>Stateful application statefulset
420                     
421         kubectl  -n onap get statefulset |grep cassandra
422                         
423         kubectl -n onap edit statefulset dev-aai-cassandra                    
424                     
425               
426 * Restart pod(After removing the pod, deployment will recreate a same pod and randomly assign it to any node.)
427
428 ::
429                  
430     kubectl -n onap delete pod dev-vfc-nslcm-68cb7c9878-v4kt2 -c vfc-nslcm
431               
432
433 * View the virtual machine where the portal-app resides in order to add host resolution          
434
435 ::
436       
437     10.0.0.13 corresponding Floating IP is 172.30.3.36
438                     
439     kubectl -n onap get svc  |grep portal-app  
440                     
441     portal-app                 LoadBalancer   10.43.181.163   10.0.0.13     8989:30215/TCP,8403:30213/TCP,8010:30214/TCP,8443:30225/TCP
442                     
443 * Pod expansion and shrinkage
444
445   pod expansion::
446
447     kubectl scale deployment nginx --replicas=3
448
449   pod shrinkage::
450
451     kubectl scale deployment nginx --replicas=1