blob: 480e4dbf97ea87e918e30788f18d017707037fff [file] [log] [blame]
Charles Chan4a107222020-10-30 17:23:48 -07001..
2 SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
3 SPDX-License-Identifier: Apache-2.0
4
Charles Chan770bb612022-03-02 12:34:04 -08005SD-Fabric Deployment
6====================
Charles Chan4a107222020-10-30 17:23:48 -07007
Zack Williams1ae109e2021-07-27 11:17:04 -07008Update aether-pod-configs
9-------------------------
Charles Chan4a107222020-10-30 17:23:48 -070010
Hung-Wei Chiub392a162022-02-15 11:09:33 -080011``aether-app-configs`` is a git project hosted on **gerrit.opencord.org** and
Zack Williams1ae109e2021-07-27 11:17:04 -070012we placed the following materials in it.
Charles Chan4a107222020-10-30 17:23:48 -070013
Hung-Wei Chiub392a162022-02-15 11:09:33 -080014- Rancher Fleet's configuration to install SD-Fabric applications on Rancher,
15 including ONOS, Stratum, Telegraf and PFCP-Agent.
Charles Chan4a107222020-10-30 17:23:48 -070016- Customized configuration for each application (helm values).
17- Application specific configuration files, including ONOS network configuration and Stratum chassis config.
18
19Here is an example folder structure:
20
Hung-Wei Chiub392a162022-02-15 11:09:33 -080021.. code-block:: bash
Charles Chan4a107222020-10-30 17:23:48 -070022
Hung-Wei Chiub392a162022-02-15 11:09:33 -080023 ╰─$ tree aether-dev/app/onos aether-dev/app/stratum aether-dev/app/pfcp-agent aether-dev/app/telegraf
24 ├── fleet.yaml
25 ├── kustomization.yaml
26 ├── overlays
27 │   ├── dev-pairedleaves-tucson
28 │   │   └── values.yaml
29 │   ├── dev-pdp-menlo
30 │   │   └── values.yaml
31 │   └── dev-sdfabric-menlo
32 │   └── values.yaml
33 └── registry-sealed-secret.yaml
34 aether-dev/app/stratum
35 ├── fleet.yaml
36 └── overlays
37 ├── dev-pairedleaves-tucson
38 │   ├── kustomization.yaml
39 │   ├── leaf1
40 │   ├── leaf2
41 │   ├── qos-config-leaf1.yaml
42 │   ├── qos-config-leaf2.yaml
43 │   └── values.yaml
44 └── dev-sdfabric-menlo
45 ├── kustomization.yaml
46 ├── menlo-sdfabric-leaf1
47 ├── menlo-sdfabric-leaf2
48 └── values.yaml
49 aether-dev/app/pfcp-agent
50 ├── fleet.yaml
51 └── overlays
52 ├── dev-pairedleaves-tucson
53 │   └── values.yaml
54 └── dev-sdfabric-menlo
55 └── values.yaml
56 aether-dev/app/telegraf
57 ├── fleet.yaml
58 └── overlays
59 ├── dev-pairedleaves-tucson
60 │   └── values.yaml
61 └── dev-sdfabric-menlo
62 └── values.yaml
Charles Chan4a107222020-10-30 17:23:48 -070063
Charles Chan4a107222020-10-30 17:23:48 -070064
Hung-Wei Chiub392a162022-02-15 11:09:33 -080065App folder
66""""""""""
Zack Williamsbcc4c2b2021-04-07 16:58:03 -070067
Hung-Wei Chiub392a162022-02-15 11:09:33 -080068Rancher Fleet reads ``fleet.yaml`` to know where to download the Helm Chart manifest and
69how to customize the deployment for each target clusters.
Charles Chan4a107222020-10-30 17:23:48 -070070
Hung-Wei Chiub392a162022-02-15 11:09:33 -080071Here is the example of ``fleet.yaml`` which downloads SD-Fabric(1.0.18) Helm Chart from
72**https://charts.aetherproject.org** and then use the **overlays/$cluster_name/values.yaml**
73to customize each cluster.
Charles Chan4a107222020-10-30 17:23:48 -070074
Hung-Wei Chiub392a162022-02-15 11:09:33 -080075.. code-block:: YAML
Charles Chan4a107222020-10-30 17:23:48 -070076
Hung-Wei Chiub392a162022-02-15 11:09:33 -080077 # SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
Charles Chan4a107222020-10-30 17:23:48 -070078
Hung-Wei Chiub392a162022-02-15 11:09:33 -080079 defaultNamespace: tost
80 helm:
81 releaseName: sdfabric
82 repo: https://charts.aetherproject.org
83 chart: sdfabric
84 version: 1.0.18
85 helm:
86 values:
87 import:
88 stratum:
89 enabled: false
90 targetCustomizations:
91 - name: dev-sdfabric-menlo
92 clusterSelector:
93 matchLabels:
94 management.cattle.io/cluster-display-name: dev-sdfabric-menlo
95 helm:
96 valuesFiles:
97 - overlays/dev-sdfabric-menlo/values.yaml
98 - name: dev-pairedleaves-tucson
99 clusterSelector:
100 matchLabels:
101 management.cattle.io/cluster-display-name: dev-pairedleaves-tucson
102 helm:
103 valuesFiles:
104 - overlays/dev-pairedleaves-tucson/values.yaml
105 - name: dev-pdp-menlo
106 clusterSelector:
107 matchLabels:
108 management.cattle.io/cluster-display-name: dev-pdp-menlo
109 helm:
110 valuesFiles:
111 - overlays/dev-pdp-menlo/values.yaml
Charles Chan4a107222020-10-30 17:23:48 -0700112
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800113
114
115**values.yaml** used to custom your sdfabric Helm chart values and please check
Hung-Wei Chiu3accfe92021-11-02 12:23:53 -0700116`SD-Fabric Helm chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/HEAD/sdfabric/README.md>`_
117to see how to configure it.
Charles Chan4a107222020-10-30 17:23:48 -0700118
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800119ONOS App
120""""""""
121
122For the ONOS application, the most import configuration is network configuration (netcfg)
123which is environment-dependent configuration and you should configure it properly.
124
125netcfg is configured in the Helm Value files and please check the following example.
126
127.. code-block:: bash
128
129 ╰─$ cat aether-app-configs/aether-dev/app/onos/overlays/dev-sdfabric-menlo/values.yaml 130 ↵
130 # SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
131
132 # Value file for SDFabric helm chart.
133 ...
134 onos-classic:
135 config:
136 componentConfig:
137 "org.onosproject.net.host.impl.HostManager": >
138 {
139 "monitorHosts": "true",
140 "probeRate": "10000"
141 }
142 "org.onosproject.provider.general.device.impl.GeneralDeviceProvider": >
143 {
144 "readPortId": true
145 }
146 netcfg: >
147 {
148 .....
149 }
150
151
152
153Please check
154`SD-Fabric Configuration Guide <https://docs.sd-fabric.org/master/configuration/network.html>`_
155to learn more about network configuration.
156
157
158Stratum App
159"""""""""""
160
161Stratum reads the chassis config from the Kubernetes configmap resource but it doesn't support the function
162to dynamically reload the chassis config, which means we have to restart the Stratum pod every time
163when we update the chassis config.
164
165In order to solve this problem without modifying Stratum's source code, we have introduced the Kustomize to
166the deployment process. Kustomize supports the function called configMapGenerator which generates the configmap
167with a hash suffix in its name and then inject this hash-based name to the spec section of Stratum YAML file.
168
169See the following example, you can see the configmap name isn't fixed.
170
171.. code-block: bash
172
173 ╰─$ kc -n tost get daemonset stratum -o json
174 | jq '.spec.template.spec.volumes | .[] | select(.name == "chassis-config")'
175 {
176 "configMap": {
177 "defaultMode": 484,
178 "name": "stratum-chassis-configs-7t6tt25654"
179 },
180 "name": "chassis-config"
181 }
182
183
184From the view of the Kubernetes, when it notices the spec of the YAML file is changed, it will redeploy whole
185Stratum application, which means Stratum will read the updated chassis config eventually.
186
187.. code-block:: bash
188
189 ╰─$ tree aether-dev/app/stratum
190 ├── fleet.yaml
191 └── overlays
192 ├── dev-pairedleaves-tucson
193 │   ├── kustomization.yaml
194 │   ├── leaf1
195 │   ├── leaf2
196 │   ├── qos-config-leaf1.yaml
197 │   ├── qos-config-leaf2.yaml
198 │   └── values.yaml
199 └── dev-sdfabric-menlo
200 ├── kustomization.yaml
201 ├── menlo-sdfabric-leaf1
202 ├── menlo-sdfabric-leaf2
203 └── values.yaml
204
205 ╰─$ cat aether-dev/app/stratum/overlays/dev-pairedleaves-tucson/kustomization.yaml
206 # SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
207
208 configMapGenerator:
209 - name: stratum-chassis-configs
210 files:
211 - leaf1
212 - leaf2
213
Charles Chan4a107222020-10-30 17:23:48 -0700214..
Charles Chan4a107222020-10-30 17:23:48 -0700215
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800216Check `SD-Fabric Doc <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/HEAD/sdfabric/README.md>`_
217to learn how to write the chassis config and don't forget to add the file name into the kustomization.yaml file
218once you set up your chassis config.
Charles Chan4a107222020-10-30 17:23:48 -0700219
220.. attention::
221
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800222 The switch-dependent config file should be named as **${hostname}**.
223 For example, if the host name of your Tofino switch is **my-leaf**, please name config file **my-leaf**.
Charles Chan4a107222020-10-30 17:23:48 -0700224
225..
226 TODO: Add an example based on the recommended topology
227
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800228Telegraf App
229""""""""""""
Charles Chan4a107222020-10-30 17:23:48 -0700230
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800231Below is the example directory structure of Telegraf application.
Charles Chan4a107222020-10-30 17:23:48 -0700232
233.. code-block::
234
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800235 ╰─$ tree aether-dev/app/telegraf 255 ↵
236 aether-dev/app/telegraf
237 ├── fleet.yaml
238 └── overlays
239 ├── dev-pairedleaves-tucson
240 │   └── values.yaml
241 └── dev-sdfabric-menlo
242 └── values.yaml
Charles Chan4a107222020-10-30 17:23:48 -0700243
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800244
245The **values.yaml** used to override the ONOS-Telegraf Helm Chart and its environment-dependent.
Charles Chan4a107222020-10-30 17:23:48 -0700246Please pay attention to the **inputs.addresses** section.
247Telegraf will read data from stratum so we need to specify all Tofino switch’s IP addresses here.
248Taking Menlo staging pod as example, there are four switches so we fill out 4 IP addresses.
249
250.. code-block:: yaml
251
Charles Chan4a107222020-10-30 17:23:48 -0700252 config:
253 outputs:
254 - prometheus_client:
255 metric_version: 2
256 listen: ":9273"
257 inputs:
258 - cisco_telemetry_gnmi:
259 addresses:
260 - 10.92.1.81:9339
261 - 10.92.1.82:9339
262 - 10.92.1.83:9339
263 - 10.92.1.84:9339
264 redial: 10s
265 - cisco_telemetry_gnmi.subscription:
266 name: stratum_counters
267 origin: openconfig-interfaces
268 path: /interfaces/interface[name=*]/state/counters
269 sample_interval: 5000ns
270 subscription_mode: sample
271
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000272
273Create Your Own Configs
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700274"""""""""""""""""""""""
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000275
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800276Assume we would like to deploy the SD-Fabric to the ace-example cluster in the development environment.
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000277
Hung-Wei Chiub392a162022-02-15 11:09:33 -08002781. Modify the fleet.yaml to customize your cluster with specific value file.
2792. Add your Helm Values into the overlays folder.
2803. Have to add the chassis config file into the kustomization.yaml for Stratum application.
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000281
282.. code-block:: console
283
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800284 ╰─$ git st
285 On branch master
286 Your branch is up to date with 'origin/master'.
287
288 Changes to be committed:
289 (use "git restore --staged <file>..." to unstage)
290 modified: aether-dev/app/onos/fleet.yaml
291 new file: aether-dev/app/onos/overlays/dev-my-cluster/values.yaml
292 modified: aether-dev/app/stratum/fleet.yaml
293 new file: aether-dev/app/stratum/overlays/dev-my-cluster/kustomization.yaml
294 new file: aether-dev/app/stratum/overlays/dev-my-cluster/menlo-sdfabric-leaf1
295 new file: aether-dev/app/stratum/overlays/dev-my-cluster/menlo-sdfabric-leaf2
296 new file: aether-dev/app/stratum/overlays/dev-my-cluster/values.yaml
297 modified: aether-dev/app/telegraf/fleet.yaml
298 new file: aether-dev/app/telegraf/overlays/dev-my-cluster/values.yaml
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000299
300
Charles Chan4a107222020-10-30 17:23:48 -0700301Quick recap
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700302"""""""""""
Charles Chan4a107222020-10-30 17:23:48 -0700303
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800304To recap, most of the files in **app** folder can be copied from existing examples.
Charles Chan4a107222020-10-30 17:23:48 -0700305However, there are a few files we need to pay extra attentions to.
306
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800307- ``fleet.yaml`` in each app folder
308- Chassis config in **app/stratum/overlays/$cluster_name/** folder
Zack Williams794532a2021-03-18 17:38:36 -0700309 There should be one chassis config for each switch. The file name needs to be
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800310 **${hostname}**
311- **values.yaml** in **telegraf** folder need to be updated with all switch
Zack Williams794532a2021-03-18 17:38:36 -0700312 IP addresses
Charles Chan4a107222020-10-30 17:23:48 -0700313
314Double check these files and make sure they have been updated accordingly.
315
Charles Chan4a107222020-10-30 17:23:48 -0700316Create a review request
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700317"""""""""""""""""""""""
318
Zack Williams794532a2021-03-18 17:38:36 -0700319We also need to create a gerrit review request, similar to what we have done in
320the **Aether Runtime Deployment**.
321
322Please refer to :doc:`Aether Runtime Deployment <runtime_deployment>` to
323create a review request.
Charles Chan4a107222020-10-30 17:23:48 -0700324
Hung-Wei Chiu3accfe92021-11-02 12:23:53 -0700325Deploy to ACE cluster
326"""""""""""""""""""""
327
328SD-Fabric is environment dependent application and you have to prepare correct
329configurations for both ONOS and Stratum to make it work.
330
Hung-Wei Chiu3accfe92021-11-02 12:23:53 -0700331Check below section to learn more about how we setup the Jenkins job and how it works
Charles Chan4a107222020-10-30 17:23:48 -0700332
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800333Create SD-Fabric deployment job in Jenkins
334------------------------------------------
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700335
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800336We have been using the Rancher Fleet to deploy SD-Fabric as the GitOps approach which means every change
337we push to the Git repo will be synced to the target cluster automatically.
Charles Chan4a107222020-10-30 17:23:48 -0700338
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800339However, ONOS doesn't support the incremental upgrade which means we have to delete all ONOS instance and
340then create all instance again every time we want to upgrade ONOS application.
341
342Rancher Fleet doesn't support the full recreation during the Application upgrade and that's reason we have
343created a Jenkins job to recreate the ONOSs application.
344
345You have to add the Jenkins job for new cluster by modifying ``aether-ci-management``
Zack Williams794532a2021-03-18 17:38:36 -0700346
347Download the ``aether-ci-management`` repository.
Charles Chan4a107222020-10-30 17:23:48 -0700348
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000349.. code-block:: shell
350
351 $ cd $WORKDIR
352 $ git clone "ssh://[username]@gerrit.opencord.org:29418/aether-ci-management"
353
354
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000355Create Your Own Jenkins Job
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700356"""""""""""""""""""""""""""
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000357
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800358Modify jjb/repos/sdfabric.yaml to add your cluster.
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000359
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800360For example, we want to deploy the SD-Fabric to our new cluster **my-cluster** which is on the staging environment.
361Add the following content into jjb/repo/sdfabric.yaml.
362
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000363
364.. code-block:: yaml
365
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800366 --- a/jjb/repos/sdfabric.yaml
367 +++ b/jjb/repos/sdfabric.yaml
368 @@ -50,6 +50,17 @@
369 - "deploy-sdfabric-app":
370 - "deploy-debug"
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000371
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800372 +- project:
373 + name: my-cluster
374 + disable-job: false
375 + fleet-workspace: 'aether-dev'
376 + properties:
377 + - onf-infra-onfstaff-private
378 + jobs:
379 + - "deploy-sdfabric-app":
380 + - "deploy-debug"
381 +
382 +
Hung-Wei Chiuf7cadb32020-11-19 04:49:35 +0000383
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800384If your cluster is on the production environment, you have to change both **terraform_env** and **fleet-workspace**
Hung-Wei Chiu3accfe92021-11-02 12:23:53 -0700385
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800386Trigger SD-Fabric deployment in Jenkins
Hung-Wei Chiu6ed79102021-08-24 14:27:26 -0700387---------------------------------------------------------------
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700388
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800389Whenever a change is merged into **aether-app-config**,
390the Jenkins job should be triggered automatically to (re)deploy SD-Fabric .
Charles Chan4a107222020-10-30 17:23:48 -0700391
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800392You can also manually trigger the job to redeploy SD-Fabric if needed and below
393is an example of default parameters when you run the job.
394
395.. image:: images/jenkins-sdfabric-params.png
396 :width: 480px
397
398
399If you want to capture all SD-Fabric related containers logs before redeploying them,
400please enable ``POD_LOG`` option.
401The Jenkins job helps to redeploy ONOS, Stratum and PFCP-Agent application and the default
402options is ONOS and Stratum, you can redeploy what you want by click those ``REDEPLOY_XXXX``
403options.
Charles Chan4a107222020-10-30 17:23:48 -0700404
Charles Chan2cb05c72020-12-09 16:31:20 -0800405
406Verification
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700407------------
408
Charles Chan2cb05c72020-12-09 16:31:20 -0800409Fabric connectivity should be fully ready at this point.
410We should verify that **all servers**, including compute nodes and the management server,
411have an IP address and are **able to reach each other via fabric interface** before continuing the next step.
412
413This can be simply done by running a **ping** command from one server to another server's fabric IP.
414
415
Charles Chan4a107222020-10-30 17:23:48 -0700416Troubleshooting
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700417---------------
Charles Chan4a107222020-10-30 17:23:48 -0700418
419The deployment process involves the following steps:
420
Hung-Wei Chiub392a162022-02-15 11:09:33 -08004211. Jenkins Job (For ONOS Only)
4222. Rancher Fleet upgrade application based on Git change
4233. Applications be deployed into Kubernetes cluster
4244. ONOS/Stratum will read the configuration (network config, chassis config)
4255. Pod become running
Charles Chan4a107222020-10-30 17:23:48 -0700426
427Taking ONOS as an example, here's what you can do to troubleshoot.
428
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800429You can see the log message of the first step in Jenkins console.
Charles Chan4a107222020-10-30 17:23:48 -0700430If something goes wrong, the status of the Jenkins job will be in red.
Hung-Wei Chiub392a162022-02-15 11:09:33 -0800431If Jenkins doesn't report any error message, the next step is going to Rancher Fleet's
432portal to ensure Fleet works as expected.
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700433
434Accessing the Stratum CLI
435"""""""""""""""""""""""""
436
437You can login to the Stratum container running on a switch using this script:
438
439.. code-block:: sh
440
441 #!/bin/bash
442 echo 'Attaching to Stratum container. Ctrl-P Ctrl-Q to exit'
443 echo 'Press Enter to continue...'
444 DOCKER_ID=`docker ps | grep stratum-bf | awk '{print $1}'`
445 docker attach $DOCKER_ID
446
Zack Williams1ae109e2021-07-27 11:17:04 -0700447You should then see the ``bf_sde`` prompt:
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700448
449.. code-block:: sh
450
451 bf_sde> pm
452 bf_sde.pm> show -a
453
454Accessing the ONOS CLI
455""""""""""""""""""""""
456
Hung-Wei Chiu6ed79102021-08-24 14:27:26 -0700457After setting up kubectl to access the SD-Fabric pods, run:
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700458
459.. code-block:: sh
460
461 $ kubectl get pods -n tost
462
Hung-Wei Chiu6ed79102021-08-24 14:27:26 -0700463Pick a SD-Fabric pod, and make a port forward to it, then login to it with the
Zack Williamsbcc4c2b2021-04-07 16:58:03 -0700464``onos`` CLI tool:
465
466.. code-block:: sh
467
468 $ kubectl -n tost port-forward onos-tost-onos-classic-0 8181 8101
469 $ onos karaf@localhost
470
471In some rare cases, you may need to access the ONOS master instance CLI, in
472which case you can run ``roles``:
473
474.. code-block:: sh
475
476 karaf@root > roles
477 device:devswitch1: master=onos-tost-onos-classic-1, standbys=[ onos-tost-onos-classic-0 ]
478
479Above lines show that ``onos-tost-onos-classic-1`` is the master. So switch to
480that by killing the port forward, starting a new one pointing at the master,
481then logging into that one:
482
483.. code-block:: sh
484
485 $ ps ax | grep -i kubectl
486 # returns kubectl commands running, pick the port-forward one and kill it
487 $ kill 0123
488 $ kubectl -n tost port-forward onos-tost-onos-classic-1 8181 8101
489 $ onos karaf@localhost