blob: 5274d87d9a20537f8c984d723a2eb260acd4accd [file] [log] [blame]
Larry Peterson782fec32023-10-09 12:30:57 -07001Other Blueprints
2-----------------------
3
4The previous sections describe how to deploy four Aether blueprints,
5corresponding to four variants of ``var/main.yml``. This section
6documents additional blueprints, each defined by a combination of
7Ansible components:
8
9* A ``vars/main-blueprint.yml`` file, checked into the
10 ``aether-onramp`` repo, is the "root" of the blueprint
11 specification.
12
13* A ``hosts.ini`` file, documented by example, specifies the target
14 servers required by the blueprint.
15
16* A set of Make targets, defined in a submodule and imported into
Larry Peterson87cd5772023-10-18 13:02:36 -070017 OnRamp's global Makefile, provides commands to install and uninstall
Larry Peterson782fec32023-10-09 12:30:57 -070018 the blueprint.
19
20* (Optional) A new ``aether-blueprint`` repo defines the Ansible Roles
21 and Playbooks required to deploy a new component.
22
23* (Optional) New Roles, Playbooks, and Templates, checked to existing
Larry Petersonea308752023-10-10 09:54:27 -070024 repos/submodules, customize existing components for integration with
Larry Peterson782fec32023-10-09 12:30:57 -070025 the new blueprint. To support blueprint independence, these elements
26 are intentionally kept "narrow", rather than glommed onto an
27 existing element.
28
Larry Petersonea308752023-10-10 09:54:27 -070029* A Jenkins job, added to the set of OnRamp integration tests,
Larry Peterson87cd5772023-10-18 13:02:36 -070030 verifies that the blueprint successfully deploys Aether.
Larry Peterson782fec32023-10-09 12:30:57 -070031
Larry Peterson87cd5772023-10-18 13:02:36 -070032The goal of establishing a well-defined procedure for adding new
33blueprints to OnRamp is to encourage the community to contribute (and
34maintain) new Aether configurations and deployment scenarios.\ [#]_
35The rest of this section documents community-contributed blueprints
36to-date.
Larry Peterson782fec32023-10-09 12:30:57 -070037
Larry Petersonad3c7f82023-10-10 11:37:16 -070038.. [#] Not all possible configurations of Aether require a
39 blueprint. There are other ways to add variability, for
40 example, by documenting simple ways to modify an existing
41 blueprint. Disabling ``core.standalone`` and selecting an
42 alternative ``core.values_file`` are two common examples.
43
Larry Peterson782fec32023-10-09 12:30:57 -070044Multiple UPFs
45~~~~~~~~~~~~~~~~~~~~~~
46
47The base version of SD-Core includes a single UPF, running in the same
48Kubernetes namespace as the Core's control plane. This blueprint adds
49the ability to bring up multiple UPFs (each in a different namespace),
Larry Peterson87cd5772023-10-18 13:02:36 -070050and uses ROC to establish the *UPF-to-Slice-to-Device* bindings
51required to activate end-to-end user traffic. The resulting deployment
52is then verified using gNBsim.
Larry Peterson782fec32023-10-09 12:30:57 -070053
54The Multi-UPF blueprint includes the following:
55
56* Global vars file ``vars/main-upf.yml`` gives the overall
57 blueprint specification.
58
59* Inventory file ``hosts.ini`` is identical to that used in the
60 Emulated RAN section. Minimally, SD-Core runs on one server and
Larry Peterson87cd5772023-10-18 13:02:36 -070061 gNBsim runs on a second server. (The Quick Start deployment, with
62 both SD-Core and gNBsim running in the same server, also works.)
Larry Peterson782fec32023-10-09 12:30:57 -070063
64* New make targets, ``5gc-upf-install`` and ``5gc-upf-uninstall``, to
65 be executed after the standard SD-Core installation. The blueprint
66 also reuses the ``roc-load`` target to activate new slices in ROC.
67
68* New Ansible role (``upf``) added to the ``5gc`` submodule, including
69 a new UPF-specific template (``upf-5g-values.yaml``).
70
71* New models file (``roc-5g-models-upf2.json``) added to the
72 ``roc-load`` role in the ``amp`` submodule. This models file is
73 applied as a patch *on top of* the base set of ROC models. (Since
74 this blueprint is demonstrated using gNBsim, the assumed base models
75 are given by ``roc-5g-models.json``.)
76
77To use Multi-UPF, first copy the vars file to ``main.yml``:
78
79.. code-block::
80
81 $ cd vars
82 $ cp main-upf.yml main.yml
83
84Then edit ``hosts.ini`` and ``vars/main.yml`` to match your local
85target servers, and deploy the base system (as in previous sections):
86
87.. code-block::
88
89 $ make k8s-install
Larry Peterson782fec32023-10-09 12:30:57 -070090 $ make roc-install
91 $ make roc-load
Larry Petersonea308752023-10-10 09:54:27 -070092 $ make 5gc-core-install
Larry Peterson782fec32023-10-09 12:30:57 -070093 $ make gnbsim-install
94
95You can also optionally install the monitoring subsystem. Note that
Larry Petersonad3c7f82023-10-10 11:37:16 -070096because ``main.yml`` sets ``core.standalone: "false"``, any models
Larry Petersonea308752023-10-10 09:54:27 -070097loaded into ROC are automatically applied to SD-Core.
Larry Peterson782fec32023-10-09 12:30:57 -070098
99At this point you are ready to bring up additional UPFs and bind them
100to specific slices and devices. This involves first editing the
101``upf`` block in the ``core`` section of ``vars/main.yml``:
102
103.. code-block::
104
105 upf:
106 ip_prefix: "192.168.252.0/24"
107 iface: "access"
108 helm:
109 chart_ref: aether/bess-upf
110 values_file: "deps/5gc/roles/upf/templates/upf-5g-values.yaml"
111 additional_upfs:
112 "1":
113 ip:
114 access: "192.168.252.6/24"
115 core: "192.168.250.6/24"
116 ue_ip_pool: "172.248.0.0/16"
117 # "2":
118 # ip:
119 # access: "192.168.252.7/24"
120 # core: "192.168.250.7/24"
121 # ue_ip_pool: "172.247.0.0/16"
122
Larry Peterson87cd5772023-10-18 13:02:36 -0700123As shown above, one additional UPF is enabled (beyond ``upf-0`` that
124already came up as part of SD-Core), with the spec for yet another UPF
125commented out. In this example configuration, each UPF is assigned a
126subnet on the ``access`` and ``core`` bridges, along with the IP
127address pool for UEs that the UPF serves. Once done with the edits,
128launch the new UPF(s) by typing:
Larry Peterson782fec32023-10-09 12:30:57 -0700129
130.. code-block::
131
132 $ make 5gc-upf-install
133
134At this point the new UPF(s) will be running (you can verify this
135using ``kubectl``), but no traffic will be directed to them until UEs
136are assigned to their IP address pool. Doing so requires loading the
137appropriate bindings into ROC, which you can do by editing the
138``roc_models`` line in ``amp`` section of ``vars/main.yml``. Comment
139out the original models file already loaded into ROC, and uncomment
140the new patch that is to be applied:
141
142.. code-block::
143
144 amp:
145 # roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json"
146 roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models-upf2.json"
147
148Then run the following to load the patch:
149
150.. code-block::
151
152 $ make roc-load
153
154At this point you can bring up the Aether GUI and see that a second
155slice and a second device group have been mapped onto the second UPF.
156
157Now you are ready to run traffic through both UPFs, which because the
158configuration files identified in the ``servers`` block of the
159``gnbsim`` section of ``vars/main.yml`` align with the IMSIs bound to
160each Device Group (which are bound to each slice, which are in turn
161bound to each UPF), the emulator sends data through both UPFs. To run
162the emulation, type:
163
164.. code-block::
165
166 $ make gnbsim-simulator-run
167
168