blob: 1135536f8005b6e15e4ba4f8a646c8aee9b6f779 [file] [log] [blame]
Andy Bavierf73c3d22021-08-30 10:29:06 -07001.. vim: syntax=rst
2
3Setting Up Aether-in-a-Box
4==========================
5
Andy Bavier840e0b42021-09-16 17:10:23 -07006Aether-in-a-Box (AiaB) provides an easy way to deploy Aether's SD-CORE and ROC
7components, and then run basic tests to validate the installation.
8This guide describes the steps to set up AiaB.
Andy Bavierf73c3d22021-08-30 10:29:06 -07009
Andy Bavier840e0b42021-09-16 17:10:23 -070010AiaB can be set up with a 4G or 5G SD-CORE. In either case, SD-CORE configuration
11can be done with or without the ROC. The ROC
12provides an interactive GUI for examining and changing the configuration, and is used to
13manage the production Aether; it can be deployed to test the integration between
14ROC and SD-CORE. If the ROC is not deployed, a simple tool called SimApp
15is used to configure the required state in SD-CORE for testing core functionality.
16
17Helm charts are the primary method of installing the SD-CORE and ROC resources.
18AiaB offers a great deal of flexibility regarding which Helm chart versions to install:
19
20* Local definitions of charts (for testing Helm chart changes)
21* Latest published charts (for deploying a development version of Aether)
22* Specified versions of charts (for deploying a specific Aether release)
23
24AiaB can be run on a bare metal machine or VM. System prerequisites:
Andy Bavierf73c3d22021-08-30 10:29:06 -070025
Andy Bavier296bfa52022-02-10 17:48:37 -070026* Ubuntu 18.04 clean install
Andy Bavierf73c3d22021-08-30 10:29:06 -070027* Kernel 4.15 or later
28* Haswell CPU or newer
Andy Bavier72547672022-02-03 14:45:16 -070029* At least 4 CPUs and 12GB RAM
Andy Bavier296bfa52022-02-10 17:48:37 -070030* Ability to run "sudo" without a password. Due to this requirement, AiaB is most suited to disposable environments like a VM or a `CloudLab <https://cloudlab.us>`_ machine.
Andy Bavierf73c3d22021-08-30 10:29:06 -070031
32Clone Repositories
33------------------
34
Andy Bavier296bfa52022-02-10 17:48:37 -070035To initialize the AiaB environment, first clone the following repository::
Andy Bavierf73c3d22021-08-30 10:29:06 -070036
Andy Bavier840e0b42021-09-16 17:10:23 -070037 cd ~
Andy Bavier296bfa52022-02-10 17:48:37 -070038 git clone "https://gerrit.opencord.org:29418/aether-in-a-box"
Andy Bavier840e0b42021-09-16 17:10:23 -070039
40If you are going to install AiaB using published Helm charts, you can proceed to the
41next section.
42
43If you wish to install SD-CORE from local Helm charts, clone these additional repositories::
44
45 mkdir -p ~/cord
46 cd ~/cord
Andy Bavier296bfa52022-02-10 17:48:37 -070047 git clone "https://gerrit.opencord.org:29418/sdcore-helm-charts"
48 git clone "https://gerrit.opencord.org:29418/aether-helm-charts"
Andy Bavierf73c3d22021-08-30 10:29:06 -070049
Andy Bavier112a33c2021-11-11 11:13:49 -070050If you wish to install the ROC from local Helm charts, clone this::
Andy Bavier840e0b42021-09-16 17:10:23 -070051
52 mkdir -p ~/cord
53 cd ~/cord
Andy Bavier296bfa52022-02-10 17:48:37 -070054 git clone "https://gerrit.opencord.org:29418/roc-helm-charts"
Andy Bavier840e0b42021-09-16 17:10:23 -070055
56Now change to *~/aether-in-a-box* directory.
Andy Bavierf73c3d22021-08-30 10:29:06 -070057
58Set up Authentication Tokens
59----------------------------
60
Andy Bavier840e0b42021-09-16 17:10:23 -070061Edit the file *configs/authentication*.
Andy Bavierf73c3d22021-08-30 10:29:06 -070062
63Fill out REGISTRY_USERNAME and REGISTRY_CLI_SECRET as follows:
64
65* Log into the `Aether Harbor Registry <https://registry.aetherproject.org>`_ using your Crowd credentials
66* Select *User Profile* from the drop-down menu in the upper right corner
67* For REGISTRY_USERNAME, use the *Username* in your profile
68* Copy the *CLI secret* to the clipboard and paste to REGISTRY_CLI_SECRET
69
Andy Bavier840e0b42021-09-16 17:10:23 -070070If you have already set up AiaB but you used incorrect credentials, first clean up AiaB as described
Andy Bavier296bfa52022-02-10 17:48:37 -070071in the `Cleanup`_ section, and also run::
Andy Bavier72547672022-02-03 14:45:16 -070072
73 kubectl -n omec delete secret aether.registry
Andy Bavier72547672022-02-03 14:45:16 -070074
75Then edit *configs/authentication* and re-build AiaB.
Andy Bavierf73c3d22021-08-30 10:29:06 -070076
Andy Bavier840e0b42021-09-16 17:10:23 -070077Installing the ROC
78------------------
Andy Bavierf73c3d22021-08-30 10:29:06 -070079
Andy Bavier840e0b42021-09-16 17:10:23 -070080Note that you must install the ROC *before* installing SD-CORE.
81If you are not using the ROC to configure SD-CORE, you can skip this step.
Andy Bavierf73c3d22021-08-30 10:29:06 -070082
Andy Bavier840e0b42021-09-16 17:10:23 -070083First choose whether you will install the 4G or 5G SD-CORE. To install the ROC to
84configure the 4G SD-CORE::
Andy Bavierf73c3d22021-08-30 10:29:06 -070085
Andy Bavier840e0b42021-09-16 17:10:23 -070086 make roc-4g-models
87
88To install the ROC to configure the 5G SD-CORE::
89
90 make roc-5g-models
91
92By default the above commands install the ROC from the local charts in the Git repos cloned
93earlier. In order to install the ROC using the latest published charts, add *CHARTS=latest*
94to the command, e.g.,::
95
96 CHARTS=latest make roc-4g-models
97
Andy Bavier1d631762022-01-10 15:47:51 -080098To install the Aether 1.6 release, add *CHARTS=release-1.6*::
Andy Bavier840e0b42021-09-16 17:10:23 -070099
Andy Bavier1d631762022-01-10 15:47:51 -0800100 CHARTS=release-1.6 make roc-4g-models
Andy Bavier840e0b42021-09-16 17:10:23 -0700101
Andy Bavier4d27e4e2022-02-07 14:49:45 -0700102The ROC has successfully initialized when you see output like this::
103
104 echo "ONOS CLI pod: pod/onos-cli-5b947f8f6-4r5nm"
105 ONOS CLI pod: pod/onos-cli-5b947f8f6-4r5nm
106 until kubectl -n aether-roc exec pod/onos-cli-5b947f8f6-4r5nm -- \
107 curl -s -f -L -X PATCH "http://aether-roc-api:8181/aether-roc-api" \
108 --header 'Content-Type: application/json' \
109 --data-raw "$(cat /root/aether-in-a-box//roc-5g-models-v4.json)"; do sleep 5; done
110 command terminated with exit code 22
111 command terminated with exit code 22
112 command terminated with exit code 22
113 "9513ea10-883d-11ec-84bf-721e388172cd"
114
115Don't worry if you see a few lines of *command terminated with exit code 22*; that command is trying to
116load the ROC models, and the message appears if the ROC isn't ready yet. However if you see that message
117more than 10 times then something is probably wrong with the ROC or its models.
118
Andy Bavier840e0b42021-09-16 17:10:23 -0700119Start the 4G SD-CORE
120--------------------
121
122If you are installing the 5G SD-CORE, you can skip this step.
123
124To deploy the 4G SD-CORE and run a simple ping test::
125
126 make test
127
128By default the above commands install the 4G SD-CORE from the local charts in the Git repos cloned
129earlier. In order to install the SD-CORE using the latest published charts, add *CHARTS=latest*
130to the command, e.g.,::
131
132 CHARTS=latest make test
133
Andy Bavier1d631762022-01-10 15:47:51 -0800134To install the Aether 1.6 release, add *CHARTS=release-1.6*::
Andy Bavierf73c3d22021-08-30 10:29:06 -0700135
Andy Bavier1d631762022-01-10 15:47:51 -0800136 CHARTS=release-1.6 make test
Andy Bavierf73c3d22021-08-30 10:29:06 -0700137
Andy Bavier840e0b42021-09-16 17:10:23 -0700138Start the 5G SD-CORE
139--------------------
Andy Bavierf73c3d22021-08-30 10:29:06 -0700140
Andy Bavier840e0b42021-09-16 17:10:23 -0700141If you have already installed the 4G SD-CORE, you must skip this step. Only one version of
142the SD-CORE can be installed at a time.
Andy Bavierf73c3d22021-08-30 10:29:06 -0700143
Andy Bavier1d631762022-01-10 15:47:51 -0800144To deploy the 5G SD-CORE and run a test with gNBSim that performs Registration + UE-initiated
145PDU Session Establishment + sends User Data packets::
Andy Bavierf73c3d22021-08-30 10:29:06 -0700146
Andy Bavier1d631762022-01-10 15:47:51 -0800147 make 5g-test
Andy Bavierf73c3d22021-08-30 10:29:06 -0700148
Andy Bavier840e0b42021-09-16 17:10:23 -0700149By default the above commands install the 5G SD-CORE from the local charts in the Git repos cloned
150earlier. In order to install the SD-CORE using the latest published charts, add *CHARTS=latest*
151to the command, e.g.,::
Andy Bavierf73c3d22021-08-30 10:29:06 -0700152
Andy Bavier1d631762022-01-10 15:47:51 -0800153 CHARTS=latest make 5g-test
Andy Bavierf73c3d22021-08-30 10:29:06 -0700154
Andy Bavier1d631762022-01-10 15:47:51 -0800155To install the Aether 1.6 release, add *CHARTS=release-1.6*::
Andy Bavierf73c3d22021-08-30 10:29:06 -0700156
Andy Bavier4cda1402022-02-15 15:33:31 -0700157 CHARTS=release-1.6 make 5gc
158
159NOTE: The *5g-test* target is not supported in Aether-1.6, but you can use the *5gc* target
160to build the 5G core.
Andy Bavierf73c3d22021-08-30 10:29:06 -0700161
Andy Bavier1d631762022-01-10 15:47:51 -0800162To change the behavior of the test run by gNBSim, change the contents of *gnb.conf*
Andy Bavier4cda1402022-02-15 15:33:31 -0700163in *sd-core-5g-values.yaml*. Consult the
Andy Bavier1d631762022-01-10 15:47:51 -0800164`gNBSim documentation <https://docs.sd-core.opennetworking.org/master/developer/gnbsim.html>`_ for more information.
Andy Bavierf73c3d22021-08-30 10:29:06 -0700165
Andy Bavier4d27e4e2022-02-07 14:49:45 -0700166Exploring AiaB
167--------------
168
169The *kubectl* tool is the best way to get familiar with the pods and other Kubernetes objects installed by AiaB.
170The SD-CORE services, UPF, and simulated edge devices run in the *omec* namespace, while the ROC is running
171in the *aether-roc* namespace.
172
173The ROC GUI is available on port 31194 on the host running AiaB.
174
Andy Bavier840e0b42021-09-16 17:10:23 -0700175Cleanup
176-------
Andy Bavierf73c3d22021-08-30 10:29:06 -0700177
Andy Bavier840e0b42021-09-16 17:10:23 -0700178The first time you build AiaB, it takes a while because it sets up the Kubernetes cluster.
179Subsequent builds will be much faster if you follow these steps to clean up the Helm charts without
180destroying the Kubernetes cluster.
Andy Bavierf73c3d22021-08-30 10:29:06 -0700181
Andy Bavier840e0b42021-09-16 17:10:23 -0700182* Clean up the 4G SD-CORE: *make reset-test*
Andy Bavier72547672022-02-03 14:45:16 -0700183* Reset the 4G UE / eNB in order to re-run the 4G test: *make reset-ue*
Andy Bavier840e0b42021-09-16 17:10:23 -0700184* Clean up the 5G SD-CORE: *make reset-5g-test*
185* Clean up the ROC: *make roc-clean*
186
187It's normal for the above commands to take a minute or two to complete.
188
189As an example, suppose that you want to test the 4G SD-CORE with the ROC, and then the 5G SD-CORE
190with the ROC. You could run these commands::
191
192 CHARTS=latest make roc-4g-models # Install ROC with 4G configuration
193 CHARTS=latest make test # Install 4G SD-CORE and run ping test
194 make reset-test
195 make roc-clean
196 CHARTS=latest make roc-5g-models # Install ROC with 5G configuration
Andy Bavier1d631762022-01-10 15:47:51 -0800197 CHARTS=latest make 5g-test # Install 5G SD-CORE and run gNB Sim test
Andy Bavier840e0b42021-09-16 17:10:23 -0700198 make reset-5g-test
199 make roc-clean
200
201Developer Loop
202--------------
203
204Suppose you wish to test a new build of a 5G SD-CORE services. You can deploy custom images
Andy Bavier4cda1402022-02-15 15:33:31 -0700205by editing `~/aether-in-a-box/sd-core-5g-values.yaml`, for example::
Andy Bavierf73c3d22021-08-30 10:29:06 -0700206
Andy Bavier4cda1402022-02-15 15:33:31 -0700207 omec-control-plane:
208 images:
209 tags:
210 webui: registry.aetherproject.org/omecproject/5gc-webui:onf-release3.0.5-roc-935305f
211 pullPolicy: IfNotPresent
Andy Bavierf73c3d22021-08-30 10:29:06 -0700212
Andy Bavier840e0b42021-09-16 17:10:23 -0700213To upgrade a running 5G SD-CORE with the new image, or to deploy the 5G SD-CORE with the image::
Andy Bavierf73c3d22021-08-30 10:29:06 -0700214
Andy Bavier4cda1402022-02-15 15:33:31 -0700215 make reset-5g-test; make 5g-test
Andy Bavier840e0b42021-09-16 17:10:23 -0700216
217Troubleshooting / Known Issues
218------------------------------
219
220If you suspect a problem, first verify that all pods are in Running state::
221
222 kubectl -n omec get pods
223 kubectl -n aether-roc get pods
224
Andy Bavier72547672022-02-03 14:45:16 -0700225Pods in ImagePullBackOff State
226^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
227If the pods are stuck in ImagePullBackOff state, then it's likely an issue with credentials. To verify this,
228run *kubectl describe* on a pod in that state, for example::
229
230 kubectl -n omec describe pod gnbsim-0
231
232Look in the *Events* section for more information about why the image pull failed. If you see *unauthorized to
233access repository* then it's probably a credentials issue; see `Set up Authentication Tokens`_ above.
Andy Bavier840e0b42021-09-16 17:10:23 -0700234
2354G Test Fails
236^^^^^^^^^^^^^
237Occasionally *make test* (for 4G) fails for unknown reasons; this is true regardless of which Helm charts are used.
Andy Bavier72547672022-02-03 14:45:16 -0700238If this happens, first try recreating the simulated UE / eNB and re-running the test as follows::
239
240 make reset-ue
241 make test
242
243If that does not work, try cleaning up AiaB as described above and re-building it.
244
245If *make test* fails consistently, check whether the configuration has been pushed to the SD-CORE::
Andy Bavier840e0b42021-09-16 17:10:23 -0700246
247 kubectl -n omec logs config4g-0 | grep "Successfully"
248
249You should see that a device group and slice has been pushed::
250
251 [INFO][WebUI][CONFIG] Successfully posted message for device group 4g-oaisim-user to main config thread
252 [INFO][WebUI][CONFIG] Successfully posted message for slice default to main config thread
253
254Then tail the *config4g-0* log and make sure that the configuration has been successfully pushed to all
255SD-CORE components.