From 5ce4e885eacc22fec5f1f138db6a0aa6069364e7 Mon Sep 17 00:00:00 2001 From: Kristal Dale Date: Mon, 7 Oct 2019 14:30:02 -0700 Subject: [PATCH] Initial setup for R3 docs - Copy R2 docs into R3 (as base) and update release number - Remove unused labels from R2 (resolve conflict w/ copy) - Add note to users re R3 release status and contributing (on the R3 install guides landing page) Change-Id: Ib3d3138e93a20d11e89e7eae7bc2885c8c0b90c8 Signed-off-by: Kristal Dale --- doc/source/deploy_install_guides/index.rst | 81 +-- .../r2_release/ansible_bootstrap_configs.rst | 2 - .../bare_metal/dedicated_storage.rst | 4 +- .../r3_release/ansible_bootstrap_configs.rst | 246 ++++++++ .../r3_release/bare_metal/aio_duplex.rst | 26 + .../bare_metal/aio_duplex_extend.rst | 192 ++++++ .../bare_metal/aio_duplex_hardware.rst | 58 ++ .../aio_duplex_install_kubernetes.rst | 434 +++++++++++++ .../r3_release/bare_metal/aio_simplex.rst | 21 + .../bare_metal/aio_simplex_hardware.rst | 58 ++ .../aio_simplex_install_kubernetes.rst | 346 +++++++++++ .../bare_metal/controller_storage.rst | 22 + .../controller_storage_hardware.rst | 55 ++ .../controller_storage_install_kubernetes.rst | 586 ++++++++++++++++++ .../bare_metal/dedicated_storage.rst | 22 + .../bare_metal/dedicated_storage_hardware.rst | 60 ++ .../dedicated_storage_install_kubernetes.rst | 362 +++++++++++ .../r3_release/bare_metal/ironic.rst | 66 ++ .../r3_release/bare_metal/ironic_hardware.rst | 51 ++ .../r3_release/bare_metal/ironic_install.rst | 389 ++++++++++++ .../r3_release/bare_metal/prep_servers.txt | 17 + .../r3_release/desc_aio_duplex.txt | 23 + .../r3_release/desc_aio_simplex.txt | 18 + .../r3_release/desc_controller_storage.txt | 22 + .../r3_release/desc_dedicated_storage.txt | 17 + ...-deployment-options-controller-storage.png | Bin 0 -> 98773 bytes ...x-deployment-options-dedicated-storage.png | Bin 0 -> 111169 bytes ...ngx-deployment-options-duplex-extended.png | Bin 0 -> 101986 bytes .../starlingx-deployment-options-duplex.png | Bin 0 -> 105153 bytes .../starlingx-deployment-options-ironic.png | Bin 0 -> 129791 bytes .../starlingx-deployment-options-simplex.png | Bin 0 -> 72126 bytes .../r3_release/index.rst | 63 ++ .../r3_release/ipv6_note.txt | 10 + .../r3_release/kubernetes_access.rst | 175 ++++++ .../r3_release/kubernetes_install_next.txt | 7 + .../r3_release/openstack/access.rst | 273 ++++++++ .../r3_release/openstack/index.rst | 16 + .../r3_release/openstack/install.rst | 65 ++ .../r3_release/openstack/uninstall_delete.rst | 33 + .../r3_release/virtual/aio_duplex.rst | 21 + .../r3_release/virtual/aio_duplex_environ.rst | 52 ++ .../virtual/aio_duplex_install_kubernetes.rst | 425 +++++++++++++ .../r3_release/virtual/aio_simplex.rst | 21 + .../virtual/aio_simplex_environ.rst | 50 ++ .../aio_simplex_install_kubernetes.rst | 286 +++++++++ .../r3_release/virtual/controller_storage.rst | 21 + .../virtual/controller_storage_environ.rst | 54 ++ .../controller_storage_install_kubernetes.rst | 550 ++++++++++++++++ .../r3_release/virtual/dedicated_storage.rst | 21 + .../virtual/dedicated_storage_environ.rst | 56 ++ .../dedicated_storage_install_kubernetes.rst | 390 ++++++++++++ .../r3_release/virtual/physical_host_req.txt | 75 +++ 52 files changed, 5783 insertions(+), 59 deletions(-) create mode 100644 doc/source/deploy_install_guides/r3_release/ansible_bootstrap_configs.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_extend.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_hardware.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_hardware.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_hardware.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_hardware.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/ironic.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/ironic_hardware.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/ironic_install.rst create mode 100644 doc/source/deploy_install_guides/r3_release/bare_metal/prep_servers.txt create mode 100644 doc/source/deploy_install_guides/r3_release/desc_aio_duplex.txt create mode 100644 doc/source/deploy_install_guides/r3_release/desc_aio_simplex.txt create mode 100644 doc/source/deploy_install_guides/r3_release/desc_controller_storage.txt create mode 100644 doc/source/deploy_install_guides/r3_release/desc_dedicated_storage.txt create mode 100644 doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-controller-storage.png create mode 100644 doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-dedicated-storage.png create mode 100644 doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-duplex-extended.png create mode 100644 doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-duplex.png create mode 100644 doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-ironic.png create mode 100644 doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-simplex.png create mode 100644 doc/source/deploy_install_guides/r3_release/index.rst create mode 100644 doc/source/deploy_install_guides/r3_release/ipv6_note.txt create mode 100644 doc/source/deploy_install_guides/r3_release/kubernetes_access.rst create mode 100644 doc/source/deploy_install_guides/r3_release/kubernetes_install_next.txt create mode 100644 doc/source/deploy_install_guides/r3_release/openstack/access.rst create mode 100644 doc/source/deploy_install_guides/r3_release/openstack/index.rst create mode 100644 doc/source/deploy_install_guides/r3_release/openstack/install.rst create mode 100644 doc/source/deploy_install_guides/r3_release/openstack/uninstall_delete.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/aio_duplex.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/aio_duplex_environ.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/aio_duplex_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/aio_simplex.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/aio_simplex_environ.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/aio_simplex_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/controller_storage.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/controller_storage_environ.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/controller_storage_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/dedicated_storage.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/dedicated_storage_environ.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/dedicated_storage_install_kubernetes.rst create mode 100644 doc/source/deploy_install_guides/r3_release/virtual/physical_host_req.txt diff --git a/doc/source/deploy_install_guides/index.rst b/doc/source/deploy_install_guides/index.rst index 7550025ac..2b5adb37d 100755 --- a/doc/source/deploy_install_guides/index.rst +++ b/doc/source/deploy_install_guides/index.rst @@ -21,7 +21,12 @@ StarlingX R2.0 is the latest officially released version of StarlingX. Upcoming R3.0 release --------------------- -The upcoming R3 release is the forthcoming version of StarlingX under development. +StarlingX R3.0 is the forthcoming version of StarlingX under development. + +.. toctree:: + :maxdepth: 1 + + r3_release/index ----------------- Archived releases @@ -42,57 +47,25 @@ Archived releases bootable_usb -.. Steps you must take when a new release of the deployment and installation - guides occurs: - -.. 1. Archive the "current" release: - 1. Rename the "current" folder to the release name to the release number eg. "r1_release". - 2. Go into the renamed folder (i.e. the old "current" folder) and update all links in the *.rst - files to use the new path (e.g. :doc:`Libvirt/QEMU ` - becomes - :doc:`Libvirt/QEMU /installation_libvirt_qemu>` - 3. You might want to change your working directory to / and use Git to grep for - the "current" string (i.e. 'git grep "current" *'). For each applicable occurrence, make - the call whether or not to convert the string to the actual archived string "". - Be sure to scrub all files for the "current" string in both the "installation_guide" - and "developer_guide" folders downward. - 2. Add the new "current" release: - 1. Rename the existing "upcoming" folders to "current". This assumes that "upcoming" represented - the under-development release that just officially released. - 2. Get inside your new folder (i.e. the old "upcoming" folder) and update all links in the *.rst - files to use the new path (e.g. :doc:`Libvirt/QEMU ` - becomes - :doc:`Libvirt/QEMU ` - 3. Again, scrub all files as per step 1.3 above. - 4. Because the "upcoming" release is now available, make sure to update these pages: - - index - - installation guide - - developer guide - - release notes - 3. Create a new "upcoming" release, which are the installation and developer guides under development: - 1. Copy your "current" folders and rename them "upcoming". - 2. Make sure the new files have the correct version in the page title and intro - sentence (e.g. '2019.10.rc1 Installation Guide'). - 3. Make sure all files in new "upcoming" link to the correct versions of supporting - docs. You do this through the doc link, so that it resolves to the top of the page - (e.g. :doc:`/installation_guide/latest/index`) - 4. Make sure the new release index is labeled with the correct version name - (e.g .. _index-2019-05:) - 5. Add the archived version to the toctree on this page. You want all possible versions - to build. - 6. Since you are adding a new version ("upcoming") *before* it is available - (e.g. to begin work on new docs), make sure page text still directs user to the - "current" release and not to the under development version of the manuals. - - - - - - - - - - - - +.. Making a new release +.. 1. Archive the previous 'latest' release. + Move the toctree link from the Latest release section into the Archived + releases toctree. +.. 2. Make the previous 'upcoming' release the new 'latest.' + Move the toctree link from the Upcoming release section into the Latest + release. Update narrative text for the Latest release section to use the + latest version. +.. 3. Add new 'upcoming' release. + If the new upcoming release docs arent ready, remove toctree from Upcoming + section and just leave narrative text. Update text for the upcoming release + version. Once the new upcoming docs are ready, add them in the toctree here. +.. Adding new release docs + .. 1. Make sure the most recent release versioned docs are complete for that + release. + .. 2. Make a copy of the most recent release folder e.g. 'r2_release.' Rename the + folder for the new release e.g. 'r3_release'. + .. 3. Search and replace all references to previous release number with the new + release number. For example replace all 'R2.0' with 'R3.0.' Also search and + replease any links that may have a specific release in the path. + .. 4. Link new version on this page (the index page). diff --git a/doc/source/deploy_install_guides/r2_release/ansible_bootstrap_configs.rst b/doc/source/deploy_install_guides/r2_release/ansible_bootstrap_configs.rst index d4ca4b38e..0eb13d39f 100644 --- a/doc/source/deploy_install_guides/r2_release/ansible_bootstrap_configs.rst +++ b/doc/source/deploy_install_guides/r2_release/ansible_bootstrap_configs.rst @@ -9,8 +9,6 @@ Ansible bootstrap scenarios. :local: :depth: 1 -.. _ansible_bootstrap_ipv6: - ---- IPv6 ---- diff --git a/doc/source/deploy_install_guides/r2_release/bare_metal/dedicated_storage.rst b/doc/source/deploy_install_guides/r2_release/bare_metal/dedicated_storage.rst index cac7ce244..a2cd17b99 100644 --- a/doc/source/deploy_install_guides/r2_release/bare_metal/dedicated_storage.rst +++ b/doc/source/deploy_install_guides/r2_release/bare_metal/dedicated_storage.rst @@ -1,6 +1,4 @@ -.. _bm_standard_dedicated_r2: - -============================================================ +============================================================ Bare metal Standard with Dedicated Storage Installation R2.0 ============================================================ diff --git a/doc/source/deploy_install_guides/r3_release/ansible_bootstrap_configs.rst b/doc/source/deploy_install_guides/r3_release/ansible_bootstrap_configs.rst new file mode 100644 index 000000000..0eb13d39f --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/ansible_bootstrap_configs.rst @@ -0,0 +1,246 @@ +================================ +Ansible Bootstrap Configurations +================================ + +This section describes additional Ansible bootstrap configurations for advanced +Ansible bootstrap scenarios. + +.. contents:: + :local: + :depth: 1 + +---- +IPv6 +---- + +If you are using IPv6, provide IPv6 configuration overrides for the Ansible +bootstrap playbook. Note that all addressing, except pxeboot_subnet, should be +updated to IPv6 addressing. + +Example IPv6 override values are shown below: + +:: + + dns_servers: + ‐ 2001:4860:4860::8888 + ‐ 2001:4860:4860::8844 + pxeboot_subnet: 169.254.202.0/24 + management_subnet: 2001:db8:2::/64 + cluster_host_subnet: 2001:db8:3::/64 + cluster_pod_subnet: 2001:db8:4::/64 + cluster_service_subnet: 2001:db8:4::/112 + external_oam_subnet: 2001:db8:1::/64 + external_oam_gateway_address: 2001:db8::1 + external_oam_floating_address: 2001:db8::2 + external_oam_node_0_address: 2001:db8::3 + external_oam_node_1_address: 2001:db8::4 + management_multicast_subnet: ff08::1:1:0/124 + +.. note:: + + The `external_oam_node_0_address`, and `external_oam_node_1_address` parameters + are not required for the AIO‐SX installation. + +---------------- +Private registry +---------------- + +To bootstrap StarlingX requires pulling container images for multiple system +services. By default these container images are pulled from public registries: +k8s.gcr.io, gcr.io, quay.io, and docker.io. + +It may be required (or desired) to copy the container images to a private +registry and pull the images from the private registry (instead of the public +registries) as part of the StarlingX bootstrap. For example, a private registry +would be required if a StarlingX system was deployed in an air-gapped network +environment. + +Use the `docker_registries` structure in the bootstrap overrides file to specify +alternate registry(s) for the public registries from which container images are +pulled. These alternate registries are used during the bootstrapping of +controller-0, and on :command:`system application-apply` of application packages. + +The `docker_registries` structure is a map of public registries and the +alternate registry values for each public registry. For each public registry the +key is a fully scoped registry name of a public registry (for example "k8s.gcr.io") +and the alternate registry URL and username/password (if authenticated). + +url + The fully scoped registry name (and optionally namespace/) for the alternate + registry location where the images associated with this public registry + should now be pulled from. + + Valid formats for the `url` value are: + + * Domain. For example: + + :: + example.domain + + * Domain with port. For example: + + :: + example.domain:5000 + + * IPv4 address. For example: + + :: + 1.2.3.4 + + * IPv4 address with port. For example: + + :: + 1.2.3.4:5000 + + * IPv6 address. For example: + + :: + FD01::0100 + + * IPv6 address with port. For example: + + :: + [FD01::0100]:5000 + +username + The username for logging into the alternate registry, if authenticated. + +password + The password for logging into the alternate registry, if authenticated. + + +Additional configuration options in the `docker_registries` structure are: + +unified + A special public registry key which, if defined, will specify that images + from all public registries should be retrieved from this single source. + Alternate registry values, if specified, are ignored. The `unified` key + supports the same set of alternate registry values of `url`, `username`, and + `password`. + +is_secure_registry + Specifies whether the registry(s) supports HTTPS (secure) or HTTP (not secure). + Applies to all alternate registries. A boolean value. The default value is + True (secure, HTTPS). + + +If an alternate registry is specified to be secure (using HTTPS), the certificate +used by the registry may not be signed by a well-known Certificate Authority (CA). +This results in the :command:`docker pull` of images from this registry to fail. +Use the `ssl_ca_cert` override to specify the public certificate of the CA that +signed the alternate registry’s certificate. This will add the CA as a trusted +CA to the StarlingX system. + +ssl_ca_cert + The `ssl_ca_cert` value is the absolute path of the certificate file. The + certificate must be in PEM format and the file may contain a single CA + certificate or multiple CA certificates in a bundle. + + +The following example specifies a single alternate registry from which to +bootstrap StarlingX, where the images of the public registries have been +copied to the single alternate registry. It additionally defines an alternate +registry certificate: + +:: + + docker_registries: + k8s.gcr.io: + url: + gcr.io: + url: + quay.io: + url: + docker.io: + url: + unified: + url: my.registry.io + username: myreguser + password: myregP@ssw0rd + is_secure_registry: True + + ssl_ca_cert: /path/to/ssl_ca_cert_file + +------------ +Docker proxy +------------ + +If the StarlingX OAM interface or network is behind a http/https proxy, relative +to the Docker registries used by StarlingX or applications running on StarlingX, +then Docker within StarlingX must be configured to use these http/https proxies. + +Use the following configuration overrides to configure your Docker proxy settings. + +docker_http_proxy + Specify the HTTP proxy URL to use. For example: + + :: + + docker_http_proxy: http://my.proxy.com:1080 + +docker_https_proxy + Specify the HTTPS proxy URL to use. For example: + + :: + + docker_https_proxy: https://my.proxy.com:1443 + +docker_no_proxy + A no-proxy address list can be provided for registries not on the other side + of the proxies. This list will be added to the default no-proxy list derived + from localhost, loopback, management, and OAM floating addresses at run time. + Each address in the no-proxy list must neither contain a wildcard nor have + subnet format. For example: + + :: + + docker_no_proxy: + - 1.2.3.4 + - 5.6.7.8 + +------------------------------- +K8S Root CA Certificate and Key +------------------------------- + +By default the K8S Root CA Certificate and Key are auto-generated and result in +the use of self-signed certificates for the Kubernetes API server. In the case +where self-signed certificates are not acceptable, use the bootstrap override +values `k8s_root_ca_cert` and `k8s_root_ca_key` to specify the certificate and +key for the Kubernetes root CA. + +k8s_root_ca_cert + Specifies the certificate for the Kubernetes root CA. The `k8s_root_ca_cert` + value is the absolute path of the certificate file. The certificate must be + in PEM format and the value must be provided as part of a pair with + `k8s_root_ca_key`. The playbook will not proceed if only one value is provided. + +k8s_root_ca_key + Specifies the key for the Kubernetes root CA. The `k8s_root_ca_key` + value is the absolute path of the certificate file. The certificate must be + in PEM format and the value must be provided as part of a pair with + `k8s_root_ca_cert`. The playbook will not proceed if only one value is provided. + +.. important:: + + The default length for the generated Kubernetes root CA certificate is 10 + years. Replacing the root CA certificate is an involved process so the custom + certificate expiry should be as long as possible. We recommend ensuring root + CA certificate has an expiry of at least 5-10 years. + +The administrator can also provide values to add to the Kubernetes API server +certificate Subject Alternative Name list using the 'apiserver_cert_sans` +override parameter. + +apiserver_cert_sans + Specifies a list of Subject Alternative Name entries that will be added to the + Kubernetes API server certificate. Each entry in the list must be an IP address + or domain name. For example: + + :: + + apiserver_cert_sans: + - hostname.domain + - 198.51.100.75 + +StarlingX automatically updates this parameter to include IP records for the OAM +floating IP and both OAM unit IP addresses. diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex.rst new file mode 100644 index 000000000..9fc58d141 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex.rst @@ -0,0 +1,26 @@ +============================================== +Bare metal All-in-one Duplex Installation R3.0 +============================================== + +-------- +Overview +-------- + +.. include:: ../desc_aio_duplex.txt + +The bare metal AIO-DX deployment configuration may be extended with up to four +worker/compute nodes (not shown in the diagram). Installation instructions for +these additional nodes are described in :doc:`aio_duplex_extend`. + +.. include:: ../ipv6_note.txt + +------------ +Installation +------------ + +.. toctree:: + :maxdepth: 2 + + aio_duplex_hardware + aio_duplex_install_kubernetes + aio_duplex_extend \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_extend.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_extend.rst new file mode 100644 index 000000000..6360654be --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_extend.rst @@ -0,0 +1,192 @@ +================================================ +Extend Capacity with Worker and/or Compute Nodes +================================================ + +This section describes the steps to extend capacity with worker and/or compute +nodes on a **StarlingX R3.0 bare metal All-in-one Duplex** deployment +configuration. + +.. contents:: + :local: + :depth: 1 + +--------------------------------- +Install software on compute nodes +--------------------------------- + +#. Power on the compute servers and force them to network boot with the + appropriate BIOS boot options for your particular server. + +#. As the compute servers boot, a message appears on their console instructing + you to configure the personality of the node. + +#. On the console of controller-0, list hosts to see newly discovered compute + hosts (hostname=None): + + :: + + system host-list + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | controller-0 | controller | unlocked | enabled | available | + | 3 | None | None | locked | disabled | offline | + | 4 | None | None | locked | disabled | offline | + +----+--------------+-------------+----------------+-------------+--------------+ + +#. Using the host id, set the personality of this host to 'controller': + + :: + + system host-update 3 personality=worker hostname=compute-0 + system host-update 4 personality=worker hostname=compute-1 + + This initiates the install of software on compute nodes. + This can take 5-10 minutes, depending on the performance of the host machine. + +#. Wait for the install of software on the computes to complete, the computes to + reboot and to both show as locked/disabled/online in 'system host-list'. + + :: + + system host-list + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | controller-1 | controller | unlocked | enabled | available | + | 3 | compute-0 | compute | locked | disabled | online | + | 4 | compute-1 | compute | locked | disabled | online | + +----+--------------+-------------+----------------+-------------+--------------+ + +----------------------- +Configure compute nodes +----------------------- + +#. Assign the cluster-host network to the MGMT interface for the compute nodes: + + (Note that the MGMT interfaces are partially set up automatically by the + network install procedure.) + + :: + + for COMPUTE in compute-0 compute-1; do + system interface-network-assign $COMPUTE mgmt0 cluster-host + done + +#. Configure data interfaces for compute nodes. Use the DATA port names, for + example eth0, that are applicable to your deployment environment. + + .. important:: + + This step is **required** for OpenStack. + + This step is optional for Kubernetes: Do this step if using SRIOV network + attachments in hosted application containers. + + For Kubernetes SRIOV network attachments: + + * Configure SRIOV device plug in: + + :: + + system host-label-assign controller-1 sriovdp=enabled + + * If planning on running DPDK in containers on this host, configure the number + of 1G Huge pages required on both NUMA nodes: + + :: + + system host-memory-modify controller-1 0 -1G 100 + system host-memory-modify controller-1 1 -1G 100 + + For both Kubernetes and OpenStack: + + :: + + DATA0IF= + DATA1IF= + PHYSNET0='physnet0' + PHYSNET1='physnet1' + SPL=/tmp/tmp-system-port-list + SPIL=/tmp/tmp-system-host-if-list + + # configure the datanetworks in sysinv, prior to referencing it + # in the ``system host-if-modify`` command'. + system datanetwork-add ${PHYSNET0} vlan + system datanetwork-add ${PHYSNET1} vlan + + for COMPUTE in compute-0 compute-1; do + echo "Configuring interface for: $COMPUTE" + set -ex + system host-port-list ${COMPUTE} --nowrap > ${SPL} + system host-if-list -a ${COMPUTE} --nowrap > ${SPIL} + DATA0PCIADDR=$(cat $SPL | grep $DATA0IF |awk '{print $8}') + DATA1PCIADDR=$(cat $SPL | grep $DATA1IF |awk '{print $8}') + DATA0PORTUUID=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $2}') + DATA1PORTUUID=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $2}') + DATA0PORTNAME=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $4}') + DATA1PORTNAME=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $4}') + DATA0IFUUID=$(cat $SPIL | awk -v DATA0PORTNAME=$DATA0PORTNAME '($12 ~ DATA0PORTNAME) {print $2}') + DATA1IFUUID=$(cat $SPIL | awk -v DATA1PORTNAME=$DATA1PORTNAME '($12 ~ DATA1PORTNAME) {print $2}') + system host-if-modify -m 1500 -n data0 -c data ${COMPUTE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${COMPUTE} ${DATA1IFUUID} + system interface-datanetwork-assign ${COMPUTE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${COMPUTE} ${DATA1IFUUID} ${PHYSNET1} + set +ex + done + +************************************* +OpenStack-specific host configuration +************************************* + +.. important:: + + **This step is required only if the StarlingX OpenStack application + (stx-openstack) will be installed.** + +#. **For OpenStack only:** Assign OpenStack host labels to the compute nodes in + support of installing the stx-openstack manifest and helm-charts later. + + :: + + for NODE in compute-0 compute-1; do + system host-label-assign $NODE openstack-compute-node=enabled + system host-label-assign $NODE openvswitch=enabled + system host-label-assign $NODE sriov=enabled + done + +#. **For OpenStack only:** Setup disk partition for nova-local volume group, + needed for stx-openstack nova ephemeral disks. + + :: + + for COMPUTE in compute-0 compute-1; do + echo "Configuring Nova local for: $COMPUTE" + ROOT_DISK=$(system host-show ${COMPUTE} | grep rootfs | awk '{print $4}') + ROOT_DISK_UUID=$(system host-disk-list ${COMPUTE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') + PARTITION_SIZE=10 + NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${COMPUTE} ${ROOT_DISK_UUID} ${PARTITION_SIZE}) + NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') + system host-lvg-add ${COMPUTE} nova-local + system host-pv-add ${COMPUTE} nova-local ${NOVA_PARTITION_UUID} + done + + +-------------------- +Unlock compute nodes +-------------------- + +Unlock compute nodes in order to bring them into service: + +:: + + for COMPUTE in compute-0 compute-1; do + system host-unlock $COMPUTE + done + +The compute nodes will reboot to apply configuration changes and come into +service. This can take 5-10 minutes, depending on the performance of the host +machine. + diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_hardware.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_hardware.rst new file mode 100644 index 000000000..2b8b4751a --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_hardware.rst @@ -0,0 +1,58 @@ +===================== +Hardware Requirements +===================== + +This section describes the hardware requirements and server preparation for a +**StarlingX R3.0 bare metal All-in-one Duplex** deployment configuration. + +.. contents:: + :local: + :depth: 1 + +----------------------------- +Minimum hardware requirements +----------------------------- + +The recommended minimum hardware requirements for bare metal servers for various +host types are: + ++-------------------------+-----------------------------------------------------------+ +| Minimum Requirement | All-in-one Controller Node | ++=========================+===========================================================+ +| Number of servers | 2 | ++-------------------------+-----------------------------------------------------------+ +| Minimum processor class | - Dual-CPU Intel® Xeon® E5 26xx family (SandyBridge) | +| | 8 cores/socket | +| | | +| | or | +| | | +| | - Single-CPU Intel® Xeon® D-15xx family, 8 cores | +| | (low-power/low-cost option) | ++-------------------------+-----------------------------------------------------------+ +| Minimum memory | 64 GB | ++-------------------------+-----------------------------------------------------------+ +| Primary disk | 500 GB SDD or NVMe | ++-------------------------+-----------------------------------------------------------+ +| Additional disks | - 1 or more 500 GB (min. 10K RPM) for Ceph OSD | +| | - Recommended, but not required: 1 or more SSDs or NVMe | +| | drives for Ceph journals (min. 1024 MiB per OSD journal)| +| | - For OpenStack, recommend 1 or more 500 GB (min. 10K RPM)| +| | for VM local ephemeral storage | ++-------------------------+-----------------------------------------------------------+ +| Minimum network ports | - Mgmt/Cluster: 1x10GE | +| | - OAM: 1x1GE | +| | - Data: 1 or more x 10GE | ++-------------------------+-----------------------------------------------------------+ +| BIOS settings | - Hyper-Threading technology enabled | +| | - Virtualization technology enabled | +| | - VT for directed I/O enabled | +| | - CPU power and performance policy set to performance | +| | - CPU C state control disabled | +| | - Plug & play BMC detection disabled | ++-------------------------+-----------------------------------------------------------+ + +-------------------------- +Prepare bare metal servers +-------------------------- + +.. include:: prep_servers.txt \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_install_kubernetes.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_install_kubernetes.rst new file mode 100644 index 000000000..8629fa8ca --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_duplex_install_kubernetes.rst @@ -0,0 +1,434 @@ +================================================= +Install StarlingX Kubernetes on Bare Metal AIO-DX +================================================= + +This section describes the steps to install the StarlingX Kubernetes platform +on a **StarlingX R3.0 bare metal All-in-one Duplex** deployment configuration. + +.. contents:: + :local: + :depth: 1 + +--------------------- +Create a bootable USB +--------------------- + +Refer to :doc:`/deploy_install_guides/bootable_usb` for instructions on how to +create a bootable USB with the StarlingX ISO on your system. + +-------------------------------- +Install software on controller-0 +-------------------------------- + +.. include:: aio_simplex_install_kubernetes.rst + :start-after: incl-install-software-controller-0-aio-simplex-start: + :end-before: incl-install-software-controller-0-aio-simplex-end: + +-------------------------------- +Bootstrap system on controller-0 +-------------------------------- + +#. Login using the username / password of "sysadmin" / "sysadmin". + When logging in for the first time, you will be forced to change the password. + + :: + + Login: sysadmin + Password: + Changing password for sysadmin. + (current) UNIX Password: sysadmin + New Password: + (repeat) New Password: + +#. Verify and/or configure IP connectivity. + + External connectivity is required to run the Ansible bootstrap playbook. The + StarlingX boot image will DHCP out all interfaces so the server may have + obtained an IP address and have external IP connectivity if a DHCP server is + present in your environment. Verify this using the :command:`ip addr` and + :command:`ping 8.8.8.8` commands. + + Otherwise, manually configure an IP address and default IP route. Use the + PORT, IP-ADDRESS/SUBNET-LENGTH and GATEWAY-IP-ADDRESS applicable to your + deployment environment. + + :: + + sudo ip address add / dev + sudo ip link set up dev + sudo ip route add default via dev + ping 8.8.8.8 + +#. Specify user configuration overrides for the Ansible bootstrap playbook. + + Ansible is used to bootstrap StarlingX on controller-0. Key files for Ansible + configuration are: + + ``/etc/ansible/hosts`` + The default Ansible inventory file. Contains a single host: localhost. + + ``/usr/share/ansible/stx-ansible/playbooks/bootstrap.yml`` + The Ansible bootstrap playbook. + + ``/usr/share/ansible/stx-ansible/playbooks/host_vars/bootstrap/default.yml`` + The default configuration values for the bootstrap playbook. + + sysadmin home directory ($HOME) + The default location where Ansible looks for and imports user + configuration override files for hosts. For example: ``$HOME/.yml``. + + Specify the user configuration override file for the Ansible bootstrap + playbook using one of the following methods: + + #. Use a copy of the default.yml file listed above to provide your overrides. + + The default.yml file lists all available parameters for bootstrap + configuration with a brief description for each parameter in the file comments. + + To use this method, copy the default.yml file listed above to + ``$HOME/localhost.yml`` and edit the configurable values as desired. + + #. Create a minimal user configuration override file. + + To use this method, create your override file at ``$HOME/localhost.yml`` + and provide the minimum required parameters for the deployment configuration + as shown in the example below. Use the OAM IP SUBNET and IP ADDRESSing + applicable to your deployment environment. + + :: + + cd ~ + cat < localhost.yml + system_mode: duplex + + dns_servers: + - 8.8.8.8 + - 8.8.4.4 + + external_oam_subnet: / + external_oam_gateway_address: + external_oam_floating_address: + external_oam_node_0_address: + external_oam_node_1_address: + + admin_username: admin + admin_password: + ansible_become_pass: + EOF + + Refer to :doc:`/deploy_install_guides/r3_release/ansible_bootstrap_configs` + for information on additional Ansible bootstrap configurations for advanced + Ansible bootstrap scenarios. + +#. Run the Ansible bootstrap playbook: + + :: + + ansible-playbook /usr/share/ansible/stx-ansible/playbooks/bootstrap/bootstrap.yml + + Wait for Ansible bootstrap playbook to complete. + This can take 5-10 minutes, depending on the performance of the host machine. + +---------------------- +Configure controller-0 +---------------------- + +#. Acquire admin credentials: + + :: + + source /etc/platform/openrc + +#. Configure the OAM and MGMT interfaces of controller-0 and specify the + attached networks. Use the OAM and MGMT port names, for example eth0, that are + applicable to your deployment environment. + + :: + + OAM_IF= + MGMT_IF= + system host-if-modify controller-0 lo -c none + IFNET_UUIDS=$(system interface-network-list controller-0 | awk '{if ($6=="lo") print $4;}') + for UUID in $IFNET_UUIDS; do + system interface-network-remove ${UUID} + done + system host-if-modify controller-0 $OAM_IF -c platform + system interface-network-assign controller-0 $OAM_IF oam + system host-if-modify controller-0 $MGMT_IF -c platform + system interface-network-assign controller-0 $MGMT_IF mgmt + system interface-network-assign controller-0 $MGMT_IF cluster-host + +#. Configure NTP Servers for network time synchronization: + + :: + + system ntp-modify ntpservers=0.pool.ntp.org,1.pool.ntp.org + +#. Configure data interfaces for controller-0. Use the DATA port names, for example + eth0, applicable to your deployment environment. + + .. important:: + + This step is **required** for OpenStack. + + This step is optional for Kubernetes: Do this step if using SRIOV network + attachments in hosted application containers. + + For Kubernetes SRIOV network attachments: + + * Configure the SRIOV device plugin + + :: + + system host-label-assign controller-0 sriovdp=enabled + + * If planning on running DPDK in containers on this host, configure the number + of 1G Huge pages required on both NUMA nodes. + + :: + + system host-memory-modify controller-0 0 -1G 100 + system host-memory-modify controller-0 1 -1G 100 + + For both Kubernetes and OpenStack: + + :: + + DATA0IF= + DATA1IF= + export COMPUTE=controller-0 + PHYSNET0='physnet0' + PHYSNET1='physnet1' + SPL=/tmp/tmp-system-port-list + SPIL=/tmp/tmp-system-host-if-list + system host-port-list ${COMPUTE} --nowrap > ${SPL} + system host-if-list -a ${COMPUTE} --nowrap > ${SPIL} + DATA0PCIADDR=$(cat $SPL | grep $DATA0IF |awk '{print $8}') + DATA1PCIADDR=$(cat $SPL | grep $DATA1IF |awk '{print $8}') + DATA0PORTUUID=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $2}') + DATA1PORTUUID=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $2}') + DATA0PORTNAME=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $4}') + DATA1PORTNAME=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $4}') + DATA0IFUUID=$(cat $SPIL | awk -v DATA0PORTNAME=$DATA0PORTNAME '($12 ~ DATA0PORTNAME) {print $2}') + DATA1IFUUID=$(cat $SPIL | awk -v DATA1PORTNAME=$DATA1PORTNAME '($12 ~ DATA1PORTNAME) {print $2}') + + system datanetwork-add ${PHYSNET0} vlan + system datanetwork-add ${PHYSNET1} vlan + + system host-if-modify -m 1500 -n data0 -c data ${COMPUTE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${COMPUTE} ${DATA1IFUUID} + system interface-datanetwork-assign ${COMPUTE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${COMPUTE} ${DATA1IFUUID} ${PHYSNET1} + +#. Add an OSD on controller-0 for ceph: + + :: + + echo ">>> Add OSDs to primary tier" + system host-disk-list controller-0 + system host-disk-list controller-0 | awk '/\/dev\/sdb/{print $2}' | xargs -i system host-stor-add controller-0 {} + system host-stor-list controller-0 + +************************************* +OpenStack-specific host configuration +************************************* + +.. include:: aio_simplex_install_kubernetes.rst + :start-after: incl-config-controller-0-openstack-specific-aio-simplex-start: + :end-before: incl-config-controller-0-openstack-specific-aio-simplex-end: + +------------------- +Unlock controller-0 +------------------- + +.. include:: aio_simplex_install_kubernetes.rst + :start-after: incl-unlock-controller-0-aio-simplex-start: + :end-before: incl-unlock-controller-0-aio-simplex-end: + +------------------------------------- +Install software on controller-1 node +------------------------------------- + +#. Power on the controller-1 server and force it to network boot with the + appropriate BIOS boot options for your particular server. + +#. As controller-1 boots, a message appears on its console instructing you to + configure the personality of the node. + +#. On the console of controller-0, list hosts to see newly discovered controller-1 + host (hostname=None): + + :: + + system host-list + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | None | None | locked | disabled | offline | + +----+--------------+-------------+----------------+-------------+--------------+ + +#. Using the host id, set the personality of this host to 'controller': + + :: + + system host-update 2 personality=controller + +#. Wait for the software installation on controller-1 to complete, for controller-1 to + reboot, and for controller-1 to show as locked/disabled/online in 'system host-list'. + + This can take 5-10 minutes, depending on the performance of the host machine. + + :: + + system host-list + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | controller-1 | controller | locked | disabled | online | + +----+--------------+-------------+----------------+-------------+--------------+ + +---------------------- +Configure controller-1 +---------------------- + +#. Configure the OAM and MGMT interfaces of controller-1 and specify the + attached networks. Use the OAM and MGMT port names, for example eth0, that are + applicable to your deployment environment: + + (Note that the MGMT interface is partially set up automatically by the network + install procedure.) + + :: + + OAM_IF= + MGMT_IF= + system host-if-modify controller-1 $OAM_IF -c platform + system interface-network-assign controller-1 $OAM_IF oam + system interface-network-assign controller-1 mgmt0 cluster-host + +#. Configure data interfaces for controller-1. Use the DATA port names, for example + eth0, applicable to your deployment environment. + + .. important:: + + This step is **required** for OpenStack. + + This step is optional for Kubernetes: Do this step if using SRIOV network + attachments in hosted application containers. + + For Kubernetes SRIOV network attachments: + + * Configure the SRIOV device plugin: + + :: + + system host-label-assign controller-1 sriovdp=enabled + + * If planning on running DPDK in containers on this host, configure the number + of 1G Huge pages required on both NUMA nodes: + + :: + + system host-memory-modify controller-1 0 -1G 100 + system host-memory-modify controller-1 1 -1G 100 + + + For both Kubernetes and OpenStack: + + :: + + DATA0IF= + DATA1IF= + export COMPUTE=controller-1 + PHYSNET0='physnet0' + PHYSNET1='physnet1' + SPL=/tmp/tmp-system-port-list + SPIL=/tmp/tmp-system-host-if-list + system host-port-list ${COMPUTE} --nowrap > ${SPL} + system host-if-list -a ${COMPUTE} --nowrap > ${SPIL} + DATA0PCIADDR=$(cat $SPL | grep $DATA0IF |awk '{print $8}') + DATA1PCIADDR=$(cat $SPL | grep $DATA1IF |awk '{print $8}') + DATA0PORTUUID=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $2}') + DATA1PORTUUID=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $2}') + DATA0PORTNAME=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $4}') + DATA1PORTNAME=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $4}') + DATA0IFUUID=$(cat $SPIL | awk -v DATA0PORTNAME=$DATA0PORTNAME '($12 ~ DATA0PORTNAME) {print $2}') + DATA1IFUUID=$(cat $SPIL | awk -v DATA1PORTNAME=$DATA1PORTNAME '($12 ~ DATA1PORTNAME) {print $2}') + + system datanetwork-add ${PHYSNET0} vlan + system datanetwork-add ${PHYSNET1} vlan + + system host-if-modify -m 1500 -n data0 -c data ${COMPUTE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${COMPUTE} ${DATA1IFUUID} + system interface-datanetwork-assign ${COMPUTE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${COMPUTE} ${DATA1IFUUID} ${PHYSNET1} + +#. Add an OSD on controller-1 for ceph: + + :: + + echo ">>> Add OSDs to primary tier" + system host-disk-list controller-1 + system host-disk-list controller-1 | awk '/\/dev\/sdb/{print $2}' | xargs -i system host-stor-add controller-1 {} + system host-stor-list controller-1 + +************************************* +OpenStack-specific host configuration +************************************* + +.. important:: + + **This step is required only if the StarlingX OpenStack application + (stx-openstack) will be installed.** + +#. **For OpenStack only:** Assign OpenStack host labels to controller-1 in + support of installing the stx-openstack manifest and helm-charts later. + + :: + + system host-label-assign controller-1 openstack-control-plane=enabled + system host-label-assign controller-1 openstack-compute-node=enabled + system host-label-assign controller-1 openvswitch=enabled + system host-label-assign controller-1 sriov=enabled + +#. **For OpenStack only:** Set up disk partition for nova-local volume group, + which is needed for stx-openstack nova ephemeral disks. + + :: + + export COMPUTE=controller-1 + + echo ">>> Getting root disk info" + ROOT_DISK=$(system host-show ${COMPUTE} | grep rootfs | awk '{print $4}') + ROOT_DISK_UUID=$(system host-disk-list ${COMPUTE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') + echo "Root disk: $ROOT_DISK, UUID: $ROOT_DISK_UUID" + + echo ">>>> Configuring nova-local" + NOVA_SIZE=34 + NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${COMPUTE} ${ROOT_DISK_UUID} ${NOVA_SIZE}) + NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') + system host-lvg-add ${COMPUTE} nova-local + system host-pv-add ${COMPUTE} nova-local ${NOVA_PARTITION_UUID} + sleep 2 + +------------------- +Unlock controller-1 +------------------- + +Unlock controller-1 in order to bring it into service: + +:: + + system host-unlock controller-1 + +Controller-1 will reboot in order to apply configuration changes and come into +service. This can take 5-10 minutes, depending on the performance of the host +machine. + +---------- +Next steps +---------- + +.. include:: ../kubernetes_install_next.txt diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex.rst new file mode 100644 index 000000000..f759845bf --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex.rst @@ -0,0 +1,21 @@ +=============================================== +Bare metal All-in-one Simplex Installation R3.0 +=============================================== + +-------- +Overview +-------- + +.. include:: ../desc_aio_simplex.txt + +.. include:: ../ipv6_note.txt + +------------ +Installation +------------ + +.. toctree:: + :maxdepth: 2 + + aio_simplex_hardware + aio_simplex_install_kubernetes diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_hardware.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_hardware.rst new file mode 100644 index 000000000..e128ebd6f --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_hardware.rst @@ -0,0 +1,58 @@ +===================== +Hardware Requirements +===================== + +This section describes the hardware requirements and server preparation for a +**StarlingX R3.0 bare metal All-in-one Simplex** deployment configuration. + +.. contents:: + :local: + :depth: 1 + +----------------------------- +Minimum hardware requirements +----------------------------- + +The recommended minimum hardware requirements for bare metal servers for various +host types are: + ++-------------------------+-----------------------------------------------------------+ +| Minimum Requirement | All-in-one Controller Node | ++=========================+===========================================================+ +| Number of servers | 1 | ++-------------------------+-----------------------------------------------------------+ +| Minimum processor class | - Dual-CPU Intel® Xeon® E5 26xx family (SandyBridge) | +| | 8 cores/socket | +| | | +| | or | +| | | +| | - Single-CPU Intel® Xeon® D-15xx family, 8 cores | +| | (low-power/low-cost option) | ++-------------------------+-----------------------------------------------------------+ +| Minimum memory | 64 GB | ++-------------------------+-----------------------------------------------------------+ +| Primary disk | 500 GB SDD or NVMe | ++-------------------------+-----------------------------------------------------------+ +| Additional disks | - 1 or more 500 GB (min. 10K RPM) for Ceph OSD | +| | - Recommended, but not required: 1 or more SSDs or NVMe | +| | drives for Ceph journals (min. 1024 MiB per OSD | +| | journal) | +| | - For OpenStack, recommend 1 or more 500 GB (min. 10K | +| | RPM) for VM local ephemeral storage | ++-------------------------+-----------------------------------------------------------+ +| Minimum network ports | - OAM: 1x1GE | +| | - Data: 1 or more x 10GE | ++-------------------------+-----------------------------------------------------------+ +| BIOS settings | - Hyper-Threading technology enabled | +| | - Virtualization technology enabled | +| | - VT for directed I/O enabled | +| | - CPU power and performance policy set to performance | +| | - CPU C state control disabled | +| | - Plug & play BMC detection disabled | ++-------------------------+-----------------------------------------------------------+ + +-------------------------- +Prepare bare metal servers +-------------------------- + +.. include:: prep_servers.txt \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_install_kubernetes.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_install_kubernetes.rst new file mode 100644 index 000000000..b5c5f68a4 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/aio_simplex_install_kubernetes.rst @@ -0,0 +1,346 @@ +================================================= +Install StarlingX Kubernetes on Bare Metal AIO-SX +================================================= + +This section describes the steps to install the StarlingX Kubernetes platform +on a **StarlingX R3.0 bare metal All-in-one Simplex** deployment configuration. + +.. contents:: + :local: + :depth: 1 + +--------------------- +Create a bootable USB +--------------------- + +Refer to :doc:`/deploy_install_guides/bootable_usb` for instructions on how to +create a bootable USB with the StarlingX ISO on your system. + +-------------------------------- +Install software on controller-0 +-------------------------------- + +.. incl-install-software-controller-0-aio-simplex-start: + +#. Insert the bootable USB into a bootable USB port on the host you are + configuring as controller-0. + +#. Power on the host. + +#. Attach to a console, ensure the host boots from the USB, and wait for the + StarlingX Installer Menus. + +#. Make the following menu selections in the installer: + + #. First menu: Select 'All-in-one Controller Configuration' + #. Second menu: Select 'Graphical Console' or 'Textual Console' depending on + your terminal access to the console port + #. Third menu: Select 'Standard Security Profile' + +#. Wait for non-interactive install of software to complete and server to reboot. + This can take 5-10 minutes, depending on the performance of the server. + +.. incl-install-software-controller-0-aio-simplex-end: + +-------------------------------- +Bootstrap system on controller-0 +-------------------------------- + +#. Login using the username / password of "sysadmin" / "sysadmin". + When logging in for the first time, you will be forced to change the password. + + :: + + Login: sysadmin + Password: + Changing password for sysadmin. + (current) UNIX Password: sysadmin + New Password: + (repeat) New Password: + +#. Verify and/or configure IP connectivity. + + External connectivity is required to run the Ansible bootstrap playbook. The + StarlingX boot image will DHCP out all interfaces so the server may have + obtained an IP address and have external IP connectivity if a DHCP server is + present in your environment. Verify this using the :command:`ip addr` and + :command:`ping 8.8.8.8` commands. + + Otherwise, manually configure an IP address and default IP route. Use the + PORT, IP-ADDRESS/SUBNET-LENGTH and GATEWAY-IP-ADDRESS applicable to your + deployment environment. + + :: + + sudo ip address add / dev + sudo ip link set up dev + sudo ip route add default via dev + ping 8.8.8.8 + +#. Specify user configuration overrides for the Ansible bootstrap playbook. + + Ansible is used to bootstrap StarlingX on controller-0. Key files for Ansible + configuration are: + + ``/etc/ansible/hosts`` + The default Ansible inventory file. Contains a single host: localhost. + + ``/usr/share/ansible/stx-ansible/playbooks/bootstrap.yml`` + The Ansible bootstrap playbook. + + ``/usr/share/ansible/stx-ansible/playbooks/host_vars/bootstrap/default.yml`` + The default configuration values for the bootstrap playbook. + + sysadmin home directory ($HOME) + The default location where Ansible looks for and imports user + configuration override files for hosts. For example: ``$HOME/.yml``. + + Specify the user configuration override file for the Ansible bootstrap + playbook using one of the following methods: + + #. Use a copy of the default.yml file listed above to provide your overrides. + + The default.yml file lists all available parameters for bootstrap + configuration with a brief description for each parameter in the file comments. + + To use this method, copy the default.yml file listed above to + ``$HOME/localhost.yml`` and edit the configurable values as desired. + + #. Create a minimal user configuration override file. + + To use this method, create your override file at ``$HOME/localhost.yml`` + and provide the minimum required parameters for the deployment configuration + as shown in the example below. Use the OAM IP SUBNET and IP ADDRESSing + applicable to your deployment environment. + + :: + + cd ~ + cat < localhost.yml + system_mode: simplex + + dns_servers: + - 8.8.8.8 + - 8.8.4.4 + + external_oam_subnet: / + external_oam_gateway_address: + external_oam_floating_address: + + admin_username: admin + admin_password: + ansible_become_pass: + EOF + + Refer to :doc:`/deploy_install_guides/r3_release/ansible_bootstrap_configs` + for information on additional Ansible bootstrap configurations for advanced + Ansible bootstrap scenarios. + +#. Run the Ansible bootstrap playbook: + + :: + + ansible-playbook /usr/share/ansible/stx-ansible/playbooks/bootstrap/bootstrap.yml + + Wait for Ansible bootstrap playbook to complete. + This can take 5-10 minutes, depending on the performance of the host machine. + +---------------------- +Configure controller-0 +---------------------- + +#. Acquire admin credentials: + + :: + + source /etc/platform/openrc + +#. Configure the OAM interface of controller-0 and specify the attached network + as "oam". Use the OAM port name, for example eth0, that is applicable to your + deployment environment: + + :: + + OAM_IF= + system host-if-modify controller-0 $OAM_IF -c platform + system interface-network-assign controller-0 $OAM_IF oam + +#. Configure NTP Servers for network time synchronization: + + :: + + system ntp-modify ntpservers=0.pool.ntp.org,1.pool.ntp.org + +#. Configure data interfaces for controller-0. Use the DATA port names, for example + eth0, applicable to your deployment environment. + + .. important:: + + This step is **required** for OpenStack. + + This step is optional for Kubernetes: Do this step if using SRIOV network + attachments in hosted application containers. + + For Kubernetes SRIOV network attachments: + + * Configure the SRIOV device plugin + + :: + + system host-label-assign controller-0 sriovdp=enabled + + * If planning on running DPDK in containers on this host, configure the number + of 1G Huge pages required on both NUMA nodes. + + :: + + system host-memory-modify controller-0 0 -1G 100 + system host-memory-modify controller-0 1 -1G 100 + + For both Kubernetes and OpenStack: + + :: + + DATA0IF= + DATA1IF= + export COMPUTE=controller-0 + PHYSNET0='physnet0' + PHYSNET1='physnet1' + SPL=/tmp/tmp-system-port-list + SPIL=/tmp/tmp-system-host-if-list + system host-port-list ${COMPUTE} --nowrap > ${SPL} + system host-if-list -a ${COMPUTE} --nowrap > ${SPIL} + DATA0PCIADDR=$(cat $SPL | grep $DATA0IF |awk '{print $8}') + DATA1PCIADDR=$(cat $SPL | grep $DATA1IF |awk '{print $8}') + DATA0PORTUUID=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $2}') + DATA1PORTUUID=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $2}') + DATA0PORTNAME=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $4}') + DATA1PORTNAME=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $4}') + DATA0IFUUID=$(cat $SPIL | awk -v DATA0PORTNAME=$DATA0PORTNAME '($12 ~ DATA0PORTNAME) {print $2}') + DATA1IFUUID=$(cat $SPIL | awk -v DATA1PORTNAME=$DATA1PORTNAME '($12 ~ DATA1PORTNAME) {print $2}') + + system datanetwork-add ${PHYSNET0} vlan + system datanetwork-add ${PHYSNET1} vlan + + system host-if-modify -m 1500 -n data0 -c data ${COMPUTE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${COMPUTE} ${DATA1IFUUID} + system interface-datanetwork-assign ${COMPUTE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${COMPUTE} ${DATA1IFUUID} ${PHYSNET1} + +#. Add an OSD on controller-0 for ceph: + + :: + + echo ">>> Add OSDs to primary tier" + system host-disk-list controller-0 + system host-disk-list controller-0 | awk '/\/dev\/sdb/{print $2}' | xargs -i system host-stor-add controller-0 {} + system host-stor-list controller-0 + +************************************* +OpenStack-specific host configuration +************************************* + +.. incl-config-controller-0-openstack-specific-aio-simplex-start: + +.. important:: + + **This step is required only if the StarlingX OpenStack application + (stx-openstack) will be installed.** + +#. **For OpenStack only:** Assign OpenStack host labels to controller-0 in + support of installing the stx-openstack manifest and helm-charts later. + + :: + + system host-label-assign controller-0 openstack-control-plane=enabled + system host-label-assign controller-0 openstack-compute-node=enabled + system host-label-assign controller-0 openvswitch=enabled + system host-label-assign controller-0 sriov=enabled + +#. **For OpenStack only:** Configure the system setting for the vSwitch. + + StarlingX has OVS (kernel-based) vSwitch configured as default: + + * Runs in a container; defined within the helm charts of stx-openstack + manifest. + * Shares the core(s) assigned to the platform. + + If you require better performance, OVS-DPDK should be used: + + * Runs directly on the host (it is not containerized). + * Requires that at least 1 core be assigned/dedicated to the vSwitch function. + + To deploy the default containerized OVS: + + :: + + system modify --vswitch_type none + + Do not run any vSwitch directly on the host, instead, use the containerized + OVS defined in the helm charts of stx-openstack manifest. + + To deploy OVS-DPDK (OVS with the Data Plane Development Kit, which is + supported only on bare metal hardware), run the following command: + + :: + + system modify --vswitch_type ovs-dpdk + system host-cpu-modify -f vswitch -p0 1 controller-0 + + Once vswitch_type is set to OVS-DPDK, any subsequent nodes created will + default to automatically assigning 1 vSwitch core for AIO controllers and 2 + vSwitch cores for computes. + + When using OVS-DPDK, virtual machines must be configured to use a flavor with + property: hw:mem_page_size=large + + .. note:: + + After controller-0 is unlocked, changing vswitch_type requires + locking and unlocking all computes (and/or AIO Controllers) to + apply the change. + +#. **For OpenStack only:** Set up disk partition for nova-local volume group, + which is needed for stx-openstack nova ephemeral disks. + + :: + + export COMPUTE=controller-0 + + echo ">>> Getting root disk info" + ROOT_DISK=$(system host-show ${COMPUTE} | grep rootfs | awk '{print $4}') + ROOT_DISK_UUID=$(system host-disk-list ${COMPUTE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') + echo "Root disk: $ROOT_DISK, UUID: $ROOT_DISK_UUID" + + echo ">>>> Configuring nova-local" + NOVA_SIZE=34 + NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${COMPUTE} ${ROOT_DISK_UUID} ${NOVA_SIZE}) + NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') + system host-lvg-add ${COMPUTE} nova-local + system host-pv-add ${COMPUTE} nova-local ${NOVA_PARTITION_UUID} + sleep 2 + +.. incl-config-controller-0-openstack-specific-aio-simplex-end: + +------------------- +Unlock controller-0 +------------------- + +.. incl-unlock-controller-0-aio-simplex-start: + +Unlock controller-0 in order to bring it into service: + +:: + + system host-unlock controller-0 + +Controller-0 will reboot in order to apply configuration changes and come into +service. This can take 5-10 minutes, depending on the performance of the host machine. + +.. incl-unlock-controller-0-aio-simplex-end: + +---------- +Next steps +---------- + +.. include:: ../kubernetes_install_next.txt diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage.rst new file mode 100644 index 000000000..91fe5e81d --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage.rst @@ -0,0 +1,22 @@ +============================================================= +Bare metal Standard with Controller Storage Installation R3.0 +============================================================= + +-------- +Overview +-------- + +.. include:: ../desc_controller_storage.txt + +.. include:: ../ipv6_note.txt + + +------------ +Installation +------------ + +.. toctree:: + :maxdepth: 2 + + controller_storage_hardware + controller_storage_install_kubernetes diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_hardware.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_hardware.rst new file mode 100644 index 000000000..ca1d0e399 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_hardware.rst @@ -0,0 +1,55 @@ +===================== +Hardware Requirements +===================== + +This section describes the hardware requirements and server preparation for a +**StarlingX R3.0 bare metal Standard with Controller Storage** deployment +configuration. + +.. contents:: + :local: + :depth: 1 + +----------------------------- +Minimum hardware requirements +----------------------------- + +The recommended minimum hardware requirements for bare metal servers for various +host types are: + ++-------------------------+-----------------------------+-----------------------------+ +| Minimum Requirement | Controller Node | Compute Node | ++=========================+=============================+=============================+ +| Number of servers | 2 | 2-10 | ++-------------------------+-----------------------------+-----------------------------+ +| Minimum processor class | - Dual-CPU Intel® Xeon® E5 26xx family (SandyBridge) | +| | 8 cores/socket | ++-------------------------+-----------------------------+-----------------------------+ +| Minimum memory | 64 GB | 32 GB | ++-------------------------+-----------------------------+-----------------------------+ +| Primary disk | 500 GB SDD or NVMe | 120 GB (Minimum 10k RPM) | ++-------------------------+-----------------------------+-----------------------------+ +| Additional disks | - 1 or more 500 GB (min. | - For OpenStack, recommend | +| | 10K RPM) for Ceph OSD | 1 or more 500 GB (min. | +| | - Recommended, but not | 10K RPM) for VM local | +| | required: 1 or more SSDs | ephemeral storage | +| | or NVMe drives for Ceph | | +| | journals (min. 1024 MiB | | +| | per OSD journal) | | ++-------------------------+-----------------------------+-----------------------------+ +| Minimum network ports | - Mgmt/Cluster: 1x10GE | - Mgmt/Cluster: 1x10GE | +| | - OAM: 1x1GE | - Data: 1 or more x 10GE | ++-------------------------+-----------------------------+-----------------------------+ +| BIOS settings | - Hyper-Threading technology enabled | +| | - Virtualization technology enabled | +| | - VT for directed I/O enabled | +| | - CPU power and performance policy set to performance | +| | - CPU C state control disabled | +| | - Plug & play BMC detection disabled | ++-------------------------+-----------------------------+-----------------------------+ + +-------------------------- +Prepare bare metal servers +-------------------------- + +.. include:: prep_servers.txt \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_install_kubernetes.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_install_kubernetes.rst new file mode 100644 index 000000000..01ace1e25 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/controller_storage_install_kubernetes.rst @@ -0,0 +1,586 @@ +=========================================================================== +Install StarlingX Kubernetes on Bare Metal Standard with Controller Storage +=========================================================================== + +This section describes the steps to install the StarlingX Kubernetes platform +on a **StarlingX R3.0 bare metal Standard with Controller Storage** deployment +configuration. + +.. contents:: + :local: + :depth: 1 + +--------------------- +Create a bootable USB +--------------------- + +Refer to :doc:`/deploy_install_guides/bootable_usb` for instructions on how to +create a bootable USB with the StarlingX ISO on your system. + +-------------------------------- +Install software on controller-0 +-------------------------------- + +.. incl-install-software-controller-0-standard-start: + +#. Insert the bootable USB into a bootable USB port on the host you are + configuring as controller-0. + +#. Power on the host. + +#. Attach to a console, ensure the host boots from the USB, and wait for the + StarlingX Installer Menus. + +#. Make the following menu selections in the installer: + + #. First menu: Select 'Standard Controller Configuration' + #. Second menu: Select 'Graphical Console' or 'Textual Console' depending on + your terminal access to the console port + #. Third menu: Select 'Standard Security Profile' + +#. Wait for non-interactive install of software to complete and server to reboot. + This can take 5-10 minutes, depending on the performance of the server. + +.. incl-install-software-controller-0-standard-end: + +-------------------------------- +Bootstrap system on controller-0 +-------------------------------- + +.. incl-bootstrap-sys-controller-0-standard-start: + +#. Login using the username / password of "sysadmin" / "sysadmin". + + When logging in for the first time, you will be forced to change the password. + + :: + + Login: sysadmin + Password: + Changing password for sysadmin. + (current) UNIX Password: sysadmin + New Password: + (repeat) New Password: + +#. Verify and/or configure IP connectivity. + + External connectivity is required to run the Ansible bootstrap playbook. The + StarlingX boot image will DHCP out all interfaces so the server may have + obtained an IP address and have external IP connectivity if a DHCP server is + present in your environment. Verify this using the :command:`ip addr` and + :command:`ping 8.8.8.8` commands. + + Otherwise, manually configure an IP address and default IP route. Use the + PORT, IP-ADDRESS/SUBNET-LENGTH and GATEWAY-IP-ADDRESS applicable to your + deployment environment. + + :: + + sudo ip address add / dev + sudo ip link set up dev + sudo ip route add default via dev + ping 8.8.8.8 + +#. Specify user configuration overrides for the Ansible bootstrap playbook. + + Ansible is used to bootstrap StarlingX on controller-0. Key files for Ansible + configuration are: + + ``/etc/ansible/hosts`` + The default Ansible inventory file. Contains a single host: localhost. + + ``/usr/share/ansible/stx-ansible/playbooks/bootstrap.yml`` + The Ansible bootstrap playbook. + + ``/usr/share/ansible/stx-ansible/playbooks/host_vars/bootstrap/default.yml`` + The default configuration values for the bootstrap playbook. + + sysadmin home directory ($HOME) + The default location where Ansible looks for and imports user + configuration override files for hosts. For example: ``$HOME/.yml``. + + Specify the user configuration override file for the Ansible bootstrap + playbook using one of the following methods: + + #. Use a copy of the default.yml file listed above to provide your overrides. + + The default.yml file lists all available parameters for bootstrap + configuration with a brief description for each parameter in the file comments. + + To use this method, copy the default.yml file listed above to + ``$HOME/localhost.yml`` and edit the configurable values as desired. + + #. Create a minimal user configuration override file. + + To use this method, create your override file at ``$HOME/localhost.yml`` + and provide the minimum required parameters for the deployment configuration + as shown in the example below. Use the OAM IP SUBNET and IP ADDRESSing + applicable to your deployment environment. + + :: + + cd ~ + cat < localhost.yml + system_mode: duplex + + dns_servers: + - 8.8.8.8 + - 8.8.4.4 + + external_oam_subnet: / + external_oam_gateway_address: + external_oam_floating_address: + external_oam_node_0_address: + external_oam_node_1_address: + + admin_username: admin + admin_password: + ansible_become_pass: + EOF + + Refer to :doc:`/deploy_install_guides/r3_release/ansible_bootstrap_configs` + for information on additional Ansible bootstrap configurations for advanced + Ansible bootstrap scenarios. + +#. Run the Ansible bootstrap playbook: + + :: + + ansible-playbook /usr/share/ansible/stx-ansible/playbooks/bootstrap/bootstrap.yml + + Wait for Ansible bootstrap playbook to complete. + This can take 5-10 minutes, depending on the performance of the host machine. + +.. incl-bootstrap-sys-controller-0-standard-end: + + +---------------------- +Configure controller-0 +---------------------- + +.. incl-config-controller-0-storage-start: + +#. Acquire admin credentials: + + :: + + source /etc/platform/openrc + +#. Configure the OAM and MGMT interfaces of controller-0 and specify the + attached networks. Use the OAM and MGMT port names, for example eth0, that are + applicable to your deployment environment. + + :: + + OAM_IF= + MGMT_IF= + system host-if-modify controller-0 lo -c none + IFNET_UUIDS=$(system interface-network-list controller-0 | awk '{if ($6=="lo") print $4;}') + for UUID in $IFNET_UUIDS; do + system interface-network-remove ${UUID} + done + system host-if-modify controller-0 $OAM_IF -c platform + system interface-network-assign controller-0 $OAM_IF oam + system host-if-modify controller-0 $MGMT_IF -c platform + system interface-network-assign controller-0 $MGMT_IF mgmt + system interface-network-assign controller-0 $MGMT_IF cluster-host + +#. Configure NTP Servers for network time synchronization: + + :: + + system ntp-modify ntpservers=0.pool.ntp.org,1.pool.ntp.org + +************************************* +OpenStack-specific host configuration +************************************* + +.. important:: + + **This step is required only if the StarlingX OpenStack application + (stx-openstack) will be installed.** + +#. **For OpenStack only:** Assign OpenStack host labels to controller-0 in + support of installing the stx-openstack manifest and helm-charts later. + + :: + + system host-label-assign controller-0 openstack-control-plane=enabled + +#. **For OpenStack only:** Configure the system setting for the vSwitch. + + StarlingX has OVS (kernel-based) vSwitch configured as default: + + * Runs in a container; defined within the helm charts of stx-openstack + manifest. + * Shares the core(s) assigned to the platform. + + If you require better performance, OVS-DPDK should be used: + + * Runs directly on the host (it is not containerized). + * Requires that at least 1 core be assigned/dedicated to the vSwitch function. + + To deploy the default containerized OVS: + + :: + + system modify --vswitch_type none + + Do not run any vSwitch directly on the host, instead, use the containerized + OVS defined in the helm charts of stx-openstack manifest. + + To deploy OVS-DPDK (OVS with the Data Plane Development Kit, which is + supported only on bare metal hardware), run the following command: + + :: + + system modify --vswitch_type ovs-dpdk + system host-cpu-modify -f vswitch -p0 1 controller-0 + + Once vswitch_type is set to OVS-DPDK, any subsequent nodes created will + default to automatically assigning 1 vSwitch core for AIO controllers and 2 + vSwitch cores for computes. + + When using OVS-DPDK, Virtual Machines must be configured to use a flavor with + property: hw:mem_page_size=large. + + .. note:: + + After controller-0 is unlocked, changing vswitch_type requires + locking and unlocking all computes (and/or AIO controllers) to + apply the change. + +.. incl-config-controller-0-storage-end: + +------------------- +Unlock controller-0 +------------------- + +Unlock controller-0 in order to bring it into service: + +:: + + system host-unlock controller-0 + +Controller-0 will reboot in order to apply configuration changes and come into +service. This can take 5-10 minutes, depending on the performance of the host machine. + +-------------------------------------------------- +Install software on controller-1 and compute nodes +-------------------------------------------------- + +#. Power on the controller-1 server and force it to network boot with the + appropriate BIOS boot options for your particular server. + +#. As controller-1 boots, a message appears on its console instructing you to + configure the personality of the node. + +#. On the console of controller-0, list hosts to see newly discovered controller-1 + host (hostname=None): + + :: + + system host-list + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | None | None | locked | disabled | offline | + +----+--------------+-------------+----------------+-------------+--------------+ + +#. Using the host id, set the personality of this host to 'controller': + + :: + + system host-update 2 personality=controller + + This initiates the install of software on controller-1. + This can take 5-10 minutes, depending on the performance of the host machine. + +#. While waiting for the previous step to complete, power on the compute-0 and + compute-1 servers. Set the personality to 'worker' and assign a unique + hostname for each. + + For example, power on compute-0 and wait for the new host (hostname=None) to + be discovered by checking 'system host-list': + + :: + + system host-update 3 personality=worker hostname=compute-0 + + Repeat for compute-1. Power on compute-1 and wait for the new host (hostname=None) to + be discovered by checking 'system host-list': + + :: + + system host-update 4 personality=worker hostname=compute-1 + +#. Wait for the software installation on controller-1, compute-0, and compute-1 to + complete, for all servers to reboot, and for to all show as locked/disabled/online in + 'system host-list'. + + :: + + system host-list + + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | controller-1 | controller | locked | disabled | online | + | 3 | compute-0 | compute | locked | disabled | online | + | 4 | compute-1 | compute | locked | disabled | online | + +----+--------------+-------------+----------------+-------------+--------------+ + +---------------------- +Configure controller-1 +---------------------- + +.. incl-config-controller-1-start: + +Configure the OAM and MGMT interfaces of controller-0 and specify the attached +networks. Use the OAM and MGMT port names, for example eth0, that are applicable +to your deployment environment. + +(Note that the MGMT interface is partially set up automatically by the network +install procedure.) + +:: + + OAM_IF= + MGMT_IF= + system host-if-modify controller-1 $OAM_IF -c platform + system interface-network-assign controller-1 $OAM_IF oam + system interface-network-assign controller-1 $MGMT_IF cluster-host + +************************************* +OpenStack-specific host configuration +************************************* + +.. important:: + + **This step is required only if the StarlingX OpenStack application + (stx-openstack) will be installed.** + +**For OpenStack only:** Assign OpenStack host labels to controller-1 in support +of installing the stx-openstack manifest and helm-charts later. + +:: + + system host-label-assign controller-1 openstack-control-plane=enabled + +.. incl-config-controller-1-end: + +------------------- +Unlock controller-1 +------------------- + +.. incl-unlock-controller-1-start: + +Unlock controller-1 in order to bring it into service: + +:: + + system host-unlock controller-1 + +Controller-1 will reboot in order to apply configuration changes and come into +service. This can take 5-10 minutes, depending on the performance of the host +machine. + +.. incl-unlock-controller-1-end: + +----------------------- +Configure compute nodes +----------------------- + +#. Add the third Ceph monitor to compute-0: + + (The first two Ceph monitors are automatically assigned to controller-0 and + controller-1.) + + :: + + system ceph-mon-add compute-0 + +#. Wait for the compute node monitor to complete configuration: + + :: + + system ceph-mon-list + +--------------------------------------+-------+--------------+------------+------+ + | uuid | ceph_ | hostname | state | task | + | | mon_g | | | | + | | ib | | | | + +--------------------------------------+-------+--------------+------------+------+ + | 64176b6c-e284-4485-bb2a-115dee215279 | 20 | controller-1 | configured | None | + | a9ca151b-7f2c-4551-8167-035d49e2df8c | 20 | controller-0 | configured | None | + | f76bc385-190c-4d9a-aa0f-107346a9907b | 20 | compute-0 | configured | None | + +--------------------------------------+-------+--------------+------------+------+ + +#. Assign the cluster-host network to the MGMT interface for the compute nodes: + + (Note that the MGMT interfaces are partially set up automatically by the + network install procedure.) + + :: + + for COMPUTE in compute-0 compute-1; do + system interface-network-assign $COMPUTE mgmt0 cluster-host + done + +#. Configure data interfaces for compute nodes. Use the DATA port names, for + example eth0, that are applicable to your deployment environment. + + .. important:: + + This step is **required** for OpenStack. + + This step is optional for Kubernetes: Do this step if using SRIOV network + attachments in hosted application containers. + + For Kubernetes SRIOV network attachments: + + * Configure SRIOV device plug in: + + :: + + for COMPUTE in compute-0 compute-1; do + system host-label-assign ${COMPUTE} sriovdp=enabled + done + + * If planning on running DPDK in containers on this host, configure the number + of 1G Huge pages required on both NUMA nodes: + + :: + + for COMPUTE in compute-0 compute-1; do + system host-memory-modify ${COMPUTE} 0 -1G 100 + system host-memory-modify ${COMPUTE} 1 -1G 100 + done + + For both Kubernetes and OpenStack: + + :: + + DATA0IF= + DATA1IF= + PHYSNET0='physnet0' + PHYSNET1='physnet1' + SPL=/tmp/tmp-system-port-list + SPIL=/tmp/tmp-system-host-if-list + + # configure the datanetworks in sysinv, prior to referencing it + # in the ``system host-if-modify`` command'. + system datanetwork-add ${PHYSNET0} vlan + system datanetwork-add ${PHYSNET1} vlan + + for COMPUTE in compute-0 compute-1; do + echo "Configuring interface for: $COMPUTE" + set -ex + system host-port-list ${COMPUTE} --nowrap > ${SPL} + system host-if-list -a ${COMPUTE} --nowrap > ${SPIL} + DATA0PCIADDR=$(cat $SPL | grep $DATA0IF |awk '{print $8}') + DATA1PCIADDR=$(cat $SPL | grep $DATA1IF |awk '{print $8}') + DATA0PORTUUID=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $2}') + DATA1PORTUUID=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $2}') + DATA0PORTNAME=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $4}') + DATA1PORTNAME=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $4}') + DATA0IFUUID=$(cat $SPIL | awk -v DATA0PORTNAME=$DATA0PORTNAME '($12 ~ DATA0PORTNAME) {print $2}') + DATA1IFUUID=$(cat $SPIL | awk -v DATA1PORTNAME=$DATA1PORTNAME '($12 ~ DATA1PORTNAME) {print $2}') + system host-if-modify -m 1500 -n data0 -c data ${COMPUTE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${COMPUTE} ${DATA1IFUUID} + system interface-datanetwork-assign ${COMPUTE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${COMPUTE} ${DATA1IFUUID} ${PHYSNET1} + set +ex + done + +************************************* +OpenStack-specific host configuration +************************************* + +.. important:: + + **This step is required only if the StarlingX OpenStack application + (stx-openstack) will be installed.** + +#. **For OpenStack only:** Assign OpenStack host labels to the compute nodes in + support of installing the stx-openstack manifest and helm-charts later. + + :: + + for NODE in compute-0 compute-1; do + system host-label-assign $NODE openstack-compute-node=enabled + system host-label-assign $NODE openvswitch=enabled + system host-label-assign $NODE sriov=enabled + done + +#. **For OpenStack only:** Set up disk partition for nova-local volume group, + which is needed for stx-openstack nova ephemeral disks. + + :: + + for COMPUTE in compute-0 compute-1; do + echo "Configuring Nova local for: $COMPUTE" + ROOT_DISK=$(system host-show ${COMPUTE} | grep rootfs | awk '{print $4}') + ROOT_DISK_UUID=$(system host-disk-list ${COMPUTE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') + PARTITION_SIZE=10 + NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${COMPUTE} ${ROOT_DISK_UUID} ${PARTITION_SIZE}) + NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') + system host-lvg-add ${COMPUTE} nova-local + system host-pv-add ${COMPUTE} nova-local ${NOVA_PARTITION_UUID} + done + +-------------------- +Unlock compute nodes +-------------------- + +Unlock compute nodes in order to bring them into service: + +:: + + for COMPUTE in compute-0 compute-1; do + system host-unlock $COMPUTE + done + +The compute nodes will reboot in order to apply configuration changes and come into +service. This can take 5-10 minutes, depending on the performance of the host machine. + +---------------------------- +Add Ceph OSDs to controllers +---------------------------- + +#. Add OSDs to controller-0: + + :: + + HOST=controller-0 + DISKS=$(system host-disk-list ${HOST}) + TIERS=$(system storage-tier-list ceph_cluster) + OSDs="/dev/sdb" + for OSD in $OSDs; do + system host-stor-add ${HOST} $(echo "$DISKS" | grep "$OSD" | awk '{print $2}') --tier-uuid $(echo "$TIERS" | grep storage | awk '{print $2}') + while true; do system host-stor-list ${HOST} | grep ${OSD} | grep configuring; if [ $? -ne 0 ]; then break; fi; sleep 1; done + done + + system host-stor-list $HOST + +#. Add OSDs to controller-1: + + :: + + HOST=controller-1 + DISKS=$(system host-disk-list ${HOST}) + TIERS=$(system storage-tier-list ceph_cluster) + OSDs="/dev/sdb" + for OSD in $OSDs; do + system host-stor-add ${HOST} $(echo "$DISKS" | grep "$OSD" | awk '{print $2}') --tier-uuid $(echo "$TIERS" | grep storage | awk '{print $2}') + while true; do system host-stor-list ${HOST} | grep ${OSD} | grep configuring; if [ $? -ne 0 ]; then break; fi; sleep 1; done + done + + system host-stor-list $HOST + +---------- +Next steps +---------- + +.. include:: ../kubernetes_install_next.txt diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage.rst new file mode 100644 index 000000000..474aafacd --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage.rst @@ -0,0 +1,22 @@ + +============================================================ +Bare metal Standard with Dedicated Storage Installation R3.0 +============================================================ + +-------- +Overview +-------- + +.. include:: ../desc_dedicated_storage.txt + +.. include:: ../ipv6_note.txt + +------------ +Installation +------------ + +.. toctree:: + :maxdepth: 2 + + dedicated_storage_hardware + dedicated_storage_install_kubernetes diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_hardware.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_hardware.rst new file mode 100644 index 000000000..140a05bbc --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_hardware.rst @@ -0,0 +1,60 @@ +===================== +Hardware Requirements +===================== + +This section describes the hardware requirements and server preparation for a +**StarlingX R3.0 bare metal Standard with Dedicated Storage** deployment +configuration. + +.. contents:: + :local: + :depth: 1 + +----------------------------- +Minimum hardware requirements +----------------------------- + +The recommended minimum hardware requirements for bare metal servers for various +host types are: + ++---------------------+-----------------------+-----------------------+-----------------------+ +| Minimum Requirement | Controller Node | Storage Node | Compute Node | ++=====================+=======================+=======================+=======================+ +| Number of servers | 2 | 2-9 | 2-100 | ++---------------------+-----------------------+-----------------------+-----------------------+ +| Minimum processor | Dual-CPU Intel® Xeon® E5 26xx family (SandyBridge) 8 cores/socket | +| class | | ++---------------------+-----------------------+-----------------------+-----------------------+ +| Minimum memory | 64 GB | 64 GB | 32 GB | ++---------------------+-----------------------+-----------------------+-----------------------+ +| Primary disk | 500 GB SDD or NVM | 120 GB (min. 10k RPM) | 120 GB (min. 10k RPM) | ++---------------------+-----------------------+-----------------------+-----------------------+ +| Additional disks | None | - 1 or more 500 GB | - For OpenStack, | +| | | (min.10K RPM) for | recommend 1 or more | +| | | Ceph OSD | 500 GB (min. 10K | +| | | - Recommended, but | RPM) for VM | +| | | not required: 1 or | ephemeral storage | +| | | more SSDs or NVMe | | +| | | drives for Ceph | | +| | | journals (min. 1024 | | +| | | MiB per OSD | | +| | | journal) | | ++---------------------+-----------------------+-----------------------+-----------------------+ +| Minimum network | - Mgmt/Cluster: | - Mgmt/Cluster: | - Mgmt/Cluster: | +| ports | 1x10GE | 1x10GE | 1x10GE | +| | - OAM: 1x1GE | | - Data: 1 or more | +| | | | x 10GE | ++---------------------+-----------------------+-----------------------+-----------------------+ +| BIOS settings | - Hyper-Threading technology enabled | +| | - Virtualization technology enabled | +| | - VT for directed I/O enabled | +| | - CPU power and performance policy set to performance | +| | - CPU C state control disabled | +| | - Plug & play BMC detection disabled | ++---------------------+-----------------------+-----------------------+-----------------------+ + +-------------------------- +Prepare bare metal servers +-------------------------- + +.. include:: prep_servers.txt \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_install_kubernetes.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_install_kubernetes.rst new file mode 100644 index 000000000..25e110cc8 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/dedicated_storage_install_kubernetes.rst @@ -0,0 +1,362 @@ +========================================================================== +Install StarlingX Kubernetes on Bare Metal Standard with Dedicated Storage +========================================================================== + +This section describes the steps to install the StarlingX Kubernetes platform +on a **StarlingX R3.0 bare metal Standard with Dedicated Storage** deployment +configuration. + +.. contents:: + :local: + :depth: 1 + +-------------------------------------------- +Create a bootable USB with the StarlingX ISO +-------------------------------------------- + +Refer to :doc:`/deploy_install_guides/bootable_usb` for instructions on how to +create a bootable USB on your system. + +-------------------------------- +Install software on controller-0 +-------------------------------- + +.. include:: controller_storage_install_kubernetes.rst + :start-after: incl-install-software-controller-0-standard-start: + :end-before: incl-install-software-controller-0-standard-end: + +-------------------------------- +Bootstrap system on controller-0 +-------------------------------- + +.. include:: controller_storage_install_kubernetes.rst + :start-after: incl-bootstrap-sys-controller-0-standard-start: + :end-before: incl-bootstrap-sys-controller-0-standard-end: + +---------------------- +Configure controller-0 +---------------------- + +.. include:: controller_storage_install_kubernetes.rst + :start-after: incl-config-controller-0-storage-start: + :end-before: incl-config-controller-0-storage-end: + +------------------- +Unlock controller-0 +------------------- + +Unlock controller-0 in order to bring it into service: + +:: + + system host-unlock controller-0 + +Controller-0 will reboot in order to apply configuration changes and come into +service. This can take 5-10 minutes, depending on the performance of the host machine. + +------------------------------------------------------------------ +Install software on controller-1, storage nodes, and compute nodes +------------------------------------------------------------------ + +#. Power on the controller-1 server and force it to network boot with the + appropriate BIOS boot options for your particular server. + +#. As controller-1 boots, a message appears on its console instructing you to + configure the personality of the node. + +#. On the console of controller-0, list hosts to see newly discovered controller-1 + host (hostname=None): + + :: + + system host-list + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | None | None | locked | disabled | offline | + +----+--------------+-------------+----------------+-------------+--------------+ + +#. Using the host id, set the personality of this host to 'controller': + + :: + + system host-update 2 personality=controller + + This initiates the install of software on controller-1. + This can take 5-10 minutes, depending on the performance of the host machine. + +#. While waiting for the previous step to complete, power on the storage-0 and + storage-1 servers. Set the personality to 'storage' and assign a unique + hostname for each. + + For example, power on storage-0 and wait for the new host (hostname=None) to + be discovered by checking 'system host-list': + + :: + + system host-update 3 personality=storage + + Repeat for storage-1. Power on storage-1 and wait for the new host + (hostname=None) to be discovered by checking 'system host-list': + + :: + + system host-update 4 personality=storage + + This initiates the software installation on storage-0 and storage-1. + This can take 5-10 minutes, depending on the performance of the host machine. + +#. While waiting for the previous step to complete, power on the compute-0 and + compute-1 servers. Set the personality to 'worker' and assign a unique + hostname for each. + + For example, power on compute-0 and wait for the new host (hostname=None) to + be discovered by checking 'system host-list': + + :: + + system host-update 5 personality=worker hostname=compute-0 + + Repeat for compute-1. Power on compute-1 and wait for the new host + (hostname=None) to be discovered by checking 'system host-list': + + :: + + system host-update 6 personality=worker hostname=compute-1 + + This initiates the install of software on compute-0 and compute-1. + +#. Wait for the software installation on controller-1, storage-0, storage-1, + compute-0, and compute-1 to complete, for all servers to reboot, and for all to + show as locked/disabled/online in 'system host-list'. + + :: + + system host-list + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | controller-1 | controller | locked | disabled | online | + | 3 | storage-0 | storage | locked | disabled | online | + | 4 | storage-1 | storage | locked | disabled | online | + | 5 | compute-0 | compute | locked | disabled | online | + | 6 | compute-1 | compute | locked | disabled | online | + +----+--------------+-------------+----------------+-------------+--------------+ + +---------------------- +Configure controller-1 +---------------------- + +.. include:: controller_storage_install_kubernetes.rst + :start-after: incl-config-controller-1-start: + :end-before: incl-config-controller-1-end: + +------------------- +Unlock controller-1 +------------------- + +.. include:: controller_storage_install_kubernetes.rst + :start-after: incl-unlock-controller-1-start: + :end-before: incl-unlock-controller-1-end: + +----------------------- +Configure storage nodes +----------------------- + +#. Assign the cluster-host network to the MGMT interface for the storage nodes: + + (Note that the MGMT interfaces are partially set up automatically by the + network install procedure.) + + :: + + for COMPUTE in storage-0 storage-1; do + system interface-network-assign $COMPUTE mgmt0 cluster-host + done + +#. Add OSDs to storage-0: + + :: + + HOST=storage-0 + DISKS=$(system host-disk-list ${HOST}) + TIERS=$(system storage-tier-list ceph_cluster) + OSDs="/dev/sdb" + for OSD in $OSDs; do + system host-stor-add ${HOST} $(echo "$DISKS" | grep "$OSD" | awk '{print $2}') --tier-uuid $(echo "$TIERS" | grep storage | awk '{print $2}') + while true; do system host-stor-list ${HOST} | grep ${OSD} | grep configuring; if [ $? -ne 0 ]; then break; fi; sleep 1; done + done + + system host-stor-list $HOST + +#. Add OSDs to storage-1: + + :: + + HOST=storage-1 + DISKS=$(system host-disk-list ${HOST}) + TIERS=$(system storage-tier-list ceph_cluster) + OSDs="/dev/sdb" + for OSD in $OSDs; do + system host-stor-add ${HOST} $(echo "$DISKS" | grep "$OSD" | awk '{print $2}') --tier-uuid $(echo "$TIERS" | grep storage | awk '{print $2}') + while true; do system host-stor-list ${HOST} | grep ${OSD} | grep configuring; if [ $? -ne 0 ]; then break; fi; sleep 1; done + done + + system host-stor-list $HOST + +-------------------- +Unlock storage nodes +-------------------- + +Unlock storage nodes in order to bring them into service: + +:: + + for STORAGE in storage-0 storage-1; do + system host-unlock $STORAGE + done + +The storage nodes will reboot in order to apply configuration changes and come +into service. This can take 5-10 minutes, depending on the performance of the +host machine. + +----------------------- +Configure compute nodes +----------------------- + +#. Assign the cluster-host network to the MGMT interface for the compute nodes: + + (Note that the MGMT interfaces are partially set up automatically by the + network install procedure.) + + :: + + for COMPUTE in compute-0 compute-1; do + system interface-network-assign $COMPUTE mgmt0 cluster-host + done + +#. Configure data interfaces for compute nodes. Use the DATA port names, for + example eth0, that are applicable to your deployment environment. + + .. important:: + + This step is **required** for OpenStack. + + This step is optional for Kubernetes: Do this step if using SRIOV network + attachments in hosted application containers. + + For Kubernetes SRIOV network attachments: + + * Configure the SRIOV device plug in: + + :: + + for COMPUTE in compute-0 compute-1; do + system host-label-assign ${COMPUTE} sriovdp=enabled + done + + * If planning on running DPDK in containers on this host, configure the number + of 1G Huge pages required on both NUMA nodes: + + :: + + for COMPUTE in compute-0 compute-1; do + system host-memory-modify ${COMPUTE} 0 -1G 100 + system host-memory-modify ${COMPUTE} 1 -1G 100 + done + + For both Kubernetes and OpenStack: + + :: + + DATA0IF= + DATA1IF= + PHYSNET0='physnet0' + PHYSNET1='physnet1' + SPL=/tmp/tmp-system-port-list + SPIL=/tmp/tmp-system-host-if-list + + # configure the datanetworks in sysinv, prior to referencing it + # in the ``system host-if-modify`` command'. + system datanetwork-add ${PHYSNET0} vlan + system datanetwork-add ${PHYSNET1} vlan + + for COMPUTE in compute-0 compute-1; do + echo "Configuring interface for: $COMPUTE" + set -ex + system host-port-list ${COMPUTE} --nowrap > ${SPL} + system host-if-list -a ${COMPUTE} --nowrap > ${SPIL} + DATA0PCIADDR=$(cat $SPL | grep $DATA0IF |awk '{print $8}') + DATA1PCIADDR=$(cat $SPL | grep $DATA1IF |awk '{print $8}') + DATA0PORTUUID=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $2}') + DATA1PORTUUID=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $2}') + DATA0PORTNAME=$(cat $SPL | grep ${DATA0PCIADDR} | awk '{print $4}') + DATA1PORTNAME=$(cat $SPL | grep ${DATA1PCIADDR} | awk '{print $4}') + DATA0IFUUID=$(cat $SPIL | awk -v DATA0PORTNAME=$DATA0PORTNAME '($12 ~ DATA0PORTNAME) {print $2}') + DATA1IFUUID=$(cat $SPIL | awk -v DATA1PORTNAME=$DATA1PORTNAME '($12 ~ DATA1PORTNAME) {print $2}') + system host-if-modify -m 1500 -n data0 -c data ${COMPUTE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${COMPUTE} ${DATA1IFUUID} + system interface-datanetwork-assign ${COMPUTE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${COMPUTE} ${DATA1IFUUID} ${PHYSNET1} + set +ex + done + +************************************* +OpenStack-specific host configuration +************************************* + +.. important:: + + **This step is required only if the StarlingX OpenStack application + (stx-openstack) will be installed.** + +#. **For OpenStack only:** Assign OpenStack host labels to the compute nodes in + support of installing the stx-openstack manifest and helm-charts later. + + :: + + for NODE in compute-0 compute-1; do + system host-label-assign $NODE openstack-compute-node=enabled + system host-label-assign $NODE openvswitch=enabled + system host-label-assign $NODE sriov=enabled + done + +#. **For OpenStack only:** Set up disk partition for nova-local volume group, + which is needed for stx-openstack nova ephemeral disks. + + :: + + for COMPUTE in compute-0 compute-1; do + echo "Configuring Nova local for: $COMPUTE" + ROOT_DISK=$(system host-show ${COMPUTE} | grep rootfs | awk '{print $4}') + ROOT_DISK_UUID=$(system host-disk-list ${COMPUTE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') + PARTITION_SIZE=10 + NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${COMPUTE} ${ROOT_DISK_UUID} ${PARTITION_SIZE}) + NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') + system host-lvg-add ${COMPUTE} nova-local + system host-pv-add ${COMPUTE} nova-local ${NOVA_PARTITION_UUID} + done + +-------------------- +Unlock compute nodes +-------------------- + +Unlock compute nodes in order to bring them into service: + +:: + + for COMPUTE in compute-0 compute-1; do + system host-unlock $COMPUTE + done + +The compute nodes will reboot in order to apply configuration changes and come +into service. This can take 5-10 minutes, depending on the performance of the +host machine. + +---------- +Next steps +---------- + +.. include:: ../kubernetes_install_next.txt diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/ironic.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/ironic.rst new file mode 100644 index 000000000..e7384aba0 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/ironic.rst @@ -0,0 +1,66 @@ +==================================== +Bare metal Standard with Ironic R3.0 +==================================== + +-------- +Overview +-------- + +Ironic is an OpenStack project that provisions bare metal machines. For +information about the Ironic project, see +`Ironic Documentation `__. + +End user applications can be deployed on bare metal servers (instead of +virtual machines) by configuring OpenStack Ironic and deploying a pool of 1 or +more bare metal servers. + +.. figure:: ../figures/starlingx-deployment-options-ironic.png + :scale: 90% + :alt: Standard with Ironic deployment configuration + + *Figure 1: Standard with Ironic deployment configuration* + +Bare metal servers must be connected to: + +* IPMI for OpenStack Ironic control +* ironic-provisioning-net tenant network via their untagged physical interface, + which supports PXE booting + +As part of configuring OpenStack Ironic in StarlingX: + +* An ironic-provisioning-net tenant network must be identified as the boot + network for bare metal nodes. +* An additional untagged physical interface must be configured on controller + nodes and connected to the ironic-provisioning-net tenant network. The + OpenStack Ironic tftpboot server will PXE boot the bare metal servers over + this interface. + +.. note:: + + Bare metal servers are NOT: + + * Running any OpenStack / StarlingX software; they are running end user + applications (for example, Glance Images). + * To be connected to the internal management network. + +------------ +Installation +------------ + +StarlingX currently supports only a bare metal installation of Ironic with a +standard configuration, either: + +* :doc:`controller_storage` + +* :doc:`dedicated_storage` + + +This guide assumes that you have a standard deployment installed and configured +with 2x controllers and at least 1x compute node, with the StarlingX OpenStack +application (stx-openstack) applied. + +.. toctree:: + :maxdepth: 2 + + ironic_hardware + ironic_install diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/ironic_hardware.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/ironic_hardware.rst new file mode 100644 index 000000000..0a692ea15 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/ironic_hardware.rst @@ -0,0 +1,51 @@ +===================== +Hardware Requirements +===================== + +This section describes the hardware requirements and server preparation for a +**StarlingX R3.0 bare metal Ironic** deployment configuration. + +.. contents:: + :local: + :depth: 1 + +----------------------------- +Minimum hardware requirements +----------------------------- + +* One or more bare metal hosts as Ironic nodes as well as tenant instance node. + +* BMC support on bare metal host and controller node connectivity to the BMC IP + address of bare metal hosts. + +For controller nodes: + +* Additional NIC port on both controller nodes for connecting to the + ironic-provisioning-net. + +For compute nodes: + +* If using a flat data network for the Ironic provisioning network, an additional + NIC port on one of the compute nodes is required. + +* Alternatively, use a VLAN data network for the Ironic provisioning network and + simply add the new data network to an existing interface on the compute node. + +* Additional switch ports / configuration for new ports on controller, compute, + and Ironic nodes, for connectivity to the Ironic provisioning network. + +----------------------------------- +BMC configuration of Ironic node(s) +----------------------------------- + +Enable BMC and allocate a static IP, username, and password in the BIOS settings. +For example, set: + +IP address + 10.10.10.126 + +username + root + +password + test123 diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/ironic_install.rst b/doc/source/deploy_install_guides/r3_release/bare_metal/ironic_install.rst new file mode 100644 index 000000000..a0537924d --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/ironic_install.rst @@ -0,0 +1,389 @@ +================================ +Install Ironic on StarlingX R3.0 +================================ + +This section describes the steps to install Ironic on a standard configuration, +either: + +* **StarlingX R3.0 bare metal Standard with Controller Storage** deployment + configuration + +* **StarlingX R3.0 bare metal Standard with Dedicated Storage** deployment + configuration + +.. contents:: + :local: + :depth: 1 + +--------------------- +Enable Ironic service +--------------------- + +This section describes the pre-configuration required to enable the Ironic service. +All the commands in this section are for the StarlingX platform. + +First acquire administrative privileges: + +:: + + source /etc/platform/openrc + +******************************** +Download Ironic deployment image +******************************** + +The Ironic service requires a deployment image (kernel and ramdisk) which is +used to clean Ironic nodes and install the end-user's image. The cleaning done +by the deployment image wipes the disks and tests connectivity to the Ironic +conductor on the controller nodes via the Ironic Python Agent (IPA). + +The Ironic deployment Stein image (**Ironic-kernel** and **Ironic-ramdisk**) +can be found here: + +* `Ironic-kernel coreos_production_pxe-stable-stein.vmlinuz + `__ +* `Ironic-ramdisk coreos_production_pxe_image-oem-stable-stein.cpio.gz + `__ + + +******************************************************* +Configure Ironic network on deployed standard StarlingX +******************************************************* + +#. Add an address pool for the Ironic network. This example uses `ironic-pool`: + + :: + + system addrpool-add --ranges 10.10.20.1-10.10.20.100 ironic-pool 10.10.20.0 24 + +#. Add the Ironic platform network. This example uses `ironic-net`: + + :: + + system addrpool-list | grep ironic-pool | awk '{print$2}' | xargs system network-add ironic-net ironic false + +#. Add the Ironic tenant network. This example uses `ironic-data`: + + .. note:: + + The tenant network is not the same as the platform network described in + the previous step. You can specify any name for the tenant network other + than ‘ironic’. If the name 'ironic' is used, a user override must be + generated to indicate the tenant network name. + + Refer to section `Generate user Helm overrides`_ for details. + + :: + + system datanetwork-add ironic-data flat + +#. Configure the new interfaces (for Ironic) on controller nodes and assign + them to the platform network. Host must be locked. This example uses the + platform network `ironic-net` that was named in a previous step. + + These new interfaces to the controllers are used to connect to the Ironic + provisioning network: + + **controller-0** + + :: + + system interface-network-assign controller-0 enp2s0 ironic-net + system host-if-modify -n ironic -c platform \ + --ipv4-mode static --ipv4-pool ironic-pool controller-0 enp2s0 + + # Apply the OpenStack Ironic node labels + system host-label-assign controller-0 openstack-ironic=enabled + + # Unlock the node to apply changes + system host-unlock controller-0 + + + **controller-1** + + :: + + system interface-network-assign controller-1 enp2s0 ironic-net + system host-if-modify -n ironic -c platform \ + --ipv4-mode static --ipv4-pool ironic-pool controller-0 enp2s0 + + # Apply the OpenStack Ironic node labels + system host-label-assign controller-1 openstack-ironic=enabled + + # Unlock the node to apply changes + system host-unlock controller-1 + +#. Configure the new interface (for Ironic) on one of the compute nodes and + assign it to the Ironic data network. This example uses the data network + `ironic-data` that was named in a previous step. + + :: + + system interface-datanetwork-assign compute-0 eno1 ironic-data + system host-if-modify -n ironicdata -c data compute-0 eno1 + +**************************** +Generate user Helm overrides +**************************** + +Ironic Helm Charts are included in the stx-openstack application. By default, +Ironic is disabled. + +To enable Ironic, update the following Ironic Helm Chart attributes: + +:: + + system helm-override-update stx-openstack ironic openstack \ + --set network.pxe.neutron_subnet_alloc_start=10.10.20.10 \ + --set network.pxe.neutron_subnet_gateway=10.10.20.1 \ + --set network.pxe.neutron_provider_network=ironic-data + +:command:`network.pxe.neutron_subnet_alloc_start` sets the DHCP start IP to +Neutron for Ironic node provision, and reserves several IPs for the platform. + +If the data network name for Ironic is changed, modify +:command:`network.pxe.neutron_provider_network` to the command above: + +:: + + --set network.pxe.neutron_provider_network=ironic-data + +******************************* +Apply stx-openstack application +******************************* + +Re-apply the stx-openstack application to apply the changes to Ironic: + +:: + + system application-apply stx-openstack + +-------------------- +Start an Ironic node +-------------------- + +All the commands in this section are for the OpenStack application with +administrative privileges. + +From a new shell as a root user, without sourcing ``/etc/platform/openrc``: + +:: + + mkdir -p /etc/openstack + + tee /etc/openstack/clouds.yaml << EOF + clouds: + openstack_helm: + region_name: RegionOne + identity_api_version: 3 + endpoint_type: internalURL + auth: + username: 'admin' + password: 'Li69nux*' + project_name: 'admin' + project_domain_name: 'default' + user_domain_name: 'default' + auth_url: 'http://keystone.openstack.svc.cluster.local/v3' + EOF + + export OS_CLOUD=openstack_helm + +******************** +Create Glance images +******************** + +#. Create the **ironic-kernel** image: + + :: + + openstack image create \ + --file ~/coreos_production_pxe-stable-stein.vmlinuz \ + --disk-format aki \ + --container-format aki \ + --public \ + ironic-kernel + +#. Create the **ironic-ramdisk** image: + + :: + + openstack image create \ + --file ~/coreos_production_pxe_image-oem-stable-stein.cpio.gz \ + --disk-format ari \ + --container-format ari \ + --public \ + ironic-ramdisk + +#. Create the end user application image (for example, CentOS): + + :: + + openstack image create \ + --file ~/CentOS-7-x86_64-GenericCloud-root.qcow2 \ + --public --disk-format \ + qcow2 --container-format bare centos + +********************* +Create an Ironic node +********************* + +#. Create a node: + + :: + + openstack baremetal node create --driver ipmi --name ironic-test0 + +#. Add IPMI information: + + :: + + openstack baremetal node set \ + --driver-info ipmi_address=10.10.10.126 \ + --driver-info ipmi_username=root \ + --driver-info ipmi_password=test123 \ + --driver-info ipmi_terminal_port=623 ironic-test0 + +#. Set `ironic-kernel` and `ironic-ramdisk` images driver information, + on this bare metal node: + + :: + + openstack baremetal node set \ + --driver-info deploy_kernel=$(openstack image list | grep ironic-kernel | awk '{print$2}') \ + --driver-info deploy_ramdisk=$(openstack image list | grep ironic-ramdisk | awk '{print$2}') \ + ironic-test0 + +#. Set resource properties on this bare metal node based on actual Ironic node + capacities: + + :: + + openstack baremetal node set \ + --property cpus=4 \ + --property cpu_arch=x86_64\ + --property capabilities="boot_option:local" \ + --property memory_mb=65536 \ + --property local_gb=400 \ + --resource-class bm ironic-test0 + +#. Add pxe_template location: + + :: + + openstack baremetal node set --driver-info \ + pxe_template='/var/lib/openstack/lib64/python2.7/site-packages/ironic/drivers/modules/ipxe_config.template'\ + ironic-test0 + +#. Create a port to identify the specific port used by the Ironic node. + Substitute **a4:bf:01:2b:3b:c8** with the MAC address for the Ironic node + port which connects to the Ironic network: + + :: + + openstack baremetal port create \ + --node $(openstack baremetal node list | grep ironic-test0 | awk '{print$2}') \ + --pxe-enabled true a4:bf:01:2b:3b:c8 + +#. Change node state to `manage`: + + :: + + openstack baremetal node manage ironic-test0 + +#. Make node available for deployment: + + :: + + openstack baremetal node provide ironic-test0 + +#. Wait for ironic-test0 provision-state: available: + + :: + + openstack baremetal node show ironic-test0 + +--------------------------------- +Deploy an instance on Ironic node +--------------------------------- + +All the commands in this section are for the OpenStack application, but this +time with *tenant* specific privileges. + +#. From a new shell as a root user, without sourcing ``/etc/platform/openrc``: + + :: + + mkdir -p /etc/openstack + + tee /etc/openstack/clouds.yaml << EOF + clouds: + openstack_helm: + region_name: RegionOne + identity_api_version: 3 + endpoint_type: internalURL + auth: + username: 'joeuser' + password: 'mypasswrd' + project_name: 'intel' + project_domain_name: 'default' + user_domain_name: 'default' + auth_url: 'http://keystone.openstack.svc.cluster.local/v3' + EOF + + export OS_CLOUD=openstack_helm + +#. Create flavor. + + Set resource CUSTOM_BM corresponding to **--resource-class bm**: + + :: + + openstack flavor create --ram 4096 --vcpus 4 --disk 400 \ + --property resources:CUSTOM_BM=1 \ + --property resources:VCPU=0 \ + --property resources:MEMORY_MB=0 \ + --property resources:DISK_GB=0 \ + --property capabilities:boot_option='local' \ + bm-flavor + + See `Adding scheduling information + `__ + and `Configure Nova flavors + `__ + for more information. + +#. Enable service + + List the compute services: + + :: + + openstack compute service list + + Set compute service properties: + + :: + + openstack compute service set --enable controller-0 nova-compute + +#. Create instance + + .. note:: + + The :command:`keypair create` command is optional. It is not required to + enable a bare metal instance. + + :: + + openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey + + + Create 2 new servers, one bare metal and one virtual: + + :: + + openstack server create --image centos --flavor bm-flavor \ + --network baremetal --key-name mykey bm + + openstack server create --image centos --flavor m1.small \ + --network baremetal --key-name mykey vm diff --git a/doc/source/deploy_install_guides/r3_release/bare_metal/prep_servers.txt b/doc/source/deploy_install_guides/r3_release/bare_metal/prep_servers.txt new file mode 100644 index 000000000..61a686201 --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/bare_metal/prep_servers.txt @@ -0,0 +1,17 @@ +Prior to starting the StarlingX installation, the bare metal servers must be in +the following condition: + +* Physically installed + +* Cabled for power + +* Cabled for networking + + * Far-end switch ports should be properly configured to realize the networking + shown in Figure 1. + +* All disks wiped + + * Ensures that servers will boot from either the network or USB storage (if present) + +* Powered off \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/desc_aio_duplex.txt b/doc/source/deploy_install_guides/r3_release/desc_aio_duplex.txt new file mode 100644 index 000000000..952f5836c --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/desc_aio_duplex.txt @@ -0,0 +1,23 @@ +The All-in-one Duplex (AIO-DX) deployment option provides a pair of high +availability (HA) servers with each server providing all three cloud functions +(controller, compute, and storage). + +An AIO-DX configuration provides the following benefits: + +* Only a small amount of cloud processing and storage power is required +* Application consolidation using multiple virtual machines on a single pair of + physical servers +* High availability (HA) services run on the controller function across two + physical servers in either active/active or active/standby mode +* A storage back end solution using a two-node CEPH deployment across two servers +* Virtual machines scheduled on both compute functions +* Protection against overall server hardware fault, where + + * All controller HA services go active on the remaining healthy server + * All virtual machines are recovered on the remaining healthy server + +.. figure:: ../figures/starlingx-deployment-options-duplex.png + :scale: 50% + :alt: All-in-one Duplex deployment configuration + + *Figure 1: All-in-one Duplex deployment configuration* \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/desc_aio_simplex.txt b/doc/source/deploy_install_guides/r3_release/desc_aio_simplex.txt new file mode 100644 index 000000000..b3bd342ef --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/desc_aio_simplex.txt @@ -0,0 +1,18 @@ +The All-in-one Simplex (AIO-SX) deployment option provides all three cloud +functions (controller, compute, and storage) on a single server with the +following benefits: + +* Requires only a small amount of cloud processing and storage power +* Application consolidation using multiple virtual machines on a single pair of + physical servers +* A storage backend solution using a single-node CEPH deployment + +.. figure:: ../figures/starlingx-deployment-options-simplex.png + :scale: 50% + :alt: All-in-one Simplex deployment configuration + + *Figure 1: All-in-one Simplex deployment configuration* + +An AIO-SX deployment gives no protection against overall server hardware fault. +Hardware component protection can be enabled with, for example, a hardware RAID +or 2x Port LAG in the deployment. \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/desc_controller_storage.txt b/doc/source/deploy_install_guides/r3_release/desc_controller_storage.txt new file mode 100644 index 000000000..cf53c35ad --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/desc_controller_storage.txt @@ -0,0 +1,22 @@ +The Standard with Controller Storage deployment option provides two high +availability (HA) controller nodes and a pool of up to 10 compute nodes. + +A Standard with Controller Storage configuration provides the following benefits: + +* A pool of up to 10 compute nodes +* High availability (HA) services run across the controller nodes in either + active/active or active/standby mode +* A storage back end solution using a two-node CEPH deployment across two + controller servers +* Protection against overall controller and compute node failure, where + + * On overall controller node failure, all controller HA services go active on + the remaining healthy controller node + * On overall compute node failure, virtual machines and containers are + recovered on the remaining healthy compute nodes + +.. figure:: ../figures/starlingx-deployment-options-controller-storage.png + :scale: 50% + :alt: Standard with Controller Storage deployment configuration + + *Figure 1: Standard with Controller Storage deployment configuration* \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/desc_dedicated_storage.txt b/doc/source/deploy_install_guides/r3_release/desc_dedicated_storage.txt new file mode 100644 index 000000000..ef41856fd --- /dev/null +++ b/doc/source/deploy_install_guides/r3_release/desc_dedicated_storage.txt @@ -0,0 +1,17 @@ +The Standard with Dedicated Storage deployment option is a standard installation +with independent controller, compute, and storage nodes. + +A Standard with Dedicated Storage configuration provides the following benefits: + +* A pool of up to 100 compute nodes +* A 2x node high availability (HA) controller cluster with HA services running + across the controller nodes in either active/active or active/standby mode +* A storage back end solution using a two-to-9x node HA CEPH storage cluster + that supports a replication factor of two or three +* Up to four groups of 2x storage nodes, or up to three groups of 3x storage nodes + +.. figure:: ../figures/starlingx-deployment-options-dedicated-storage.png + :scale: 50% + :alt: Standard with Dedicated Storage deployment configuration + + *Figure 1: Standard with Dedicated Storage deployment configuration* \ No newline at end of file diff --git a/doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-controller-storage.png b/doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-controller-storage.png new file mode 100644 index 0000000000000000000000000000000000000000..0148201d03a6567d12e38858e0c8c99158d1bc19 GIT binary patch literal 98773 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�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

)a0Fm%WPU$Ojwgw&C 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%0ABgq{MytwnE+8cU5&AQi^(#>HLp*sLISfLuOSSuX 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

UYhR4OYYu z4diXV=cnMvK4-Jm9JWk-mC$)@2A(1PniY?|+3$lT#Xa@k2fz0G?kp<6Zpab4?cus} zr48}hy%kYE2Z`L?oLW`3R!`zB#&j<%H}20V3|OmoeZ5kZVU*~n*LW`<=ye5qobG|j z@=ao26WDyij?9VKZCDcBid(#yrfxX=U>C{0$fSTMd&woOZf%gcE-0vmO`31nwCHJ{ zw@%C4nJ=juVeNg9Jq7Ng{E#Va`_LM*mTDDVMMO1oLRT3|Fnc)`t zW__3;=)w|`4=pm;UM{iU8_pACf{I8__>cbW(G7$XnvJm9t!58Bqjz5m-Du`E&O?vf zwe>PhL2v$T=@+G$>}b$F@&IDZXj$A!%T0@mR#^ExoWkjnrfXf<{eDtf%Id{ijG%HT z$4<-0w}YEc+sdJ7X(RUrm!A(Va1e64QjS4wK zt}`7bRv^fIw&d+PFH!@abC0yMp5dB%a(yN{kqrlbek$Ym#G6Hga_HM?zH?09XO5r0 zac$sW!k`2`l@h@5dUTGsb%u@&T|aWIf`4LO+|_X3==Ov`A|q0Iy3fY&(^98Cme!Xx zNHOlns0UX}N`jzoqRKVMby5d!*&`u=B!k>kSi|TdagjpV?zvp$CJ_En@%rPY7e`u7 zfyv6m#p}z+>wRQY`Ng%5_QuMIXPUU_-!fi-)ALT})%<)b|MptS&QZFjfm%a|R>LaZ zj=&r-c7xq;JO+b#WbAC_q}WWv2q#(EGgYLJ4G>@?_UZxbba_3i)6GYs|g#bn5gz@!;Q8L z4h}95i9T=u>rF_h(QC}j%^f5V2n(~bwp&DEja~4o<-&RPII-}L!r>oPP7#7+gJhQ{ zCoM&S`OT+sSq_Fs&f-$Ms@M34bmirq%lON*cJ;rwUP>KVFLU$bi6beadn7`e&8!`I zQeu7yly+2{Qp1O=Ze=!qA=Neyyh`@8nJnF=jD>o$-$@b{o$|b8jXl6{nC(t}yWnu) z`A9rG&v>+kk~_I0cdlLP@sX~Z7i@Dby*zg$i8J~ho4;6bicgfcnVX`Uh#ODqbHvBr zSd@RduV1&pb^K?KN5@%FMz0w=z_8EH`AbVe&vZWG=gqHq*Dq zaRkqt5YOp#6_=r;e}7ynyf z6Mp`y3cdX|(NU+6qd`UQo)qRvjHxI0J(+%J%;j1quQ}k-85tz)rFxHz$6QOC@LKX+ zlXA6@Q4r5F3CzY$1W$>u2t(7FC%Z?exU=s z%d`kxJ>e8>f$`PS0}u>^>rMY(e!VjOf9LW^L|1@!;dNroaa|F z7w1x@CGOJRB{kAe!;tX6wYa|LAY{`03(w;$F=S)YUuuxb%i}`uqZ$+cx-snzNf%eW z?5Bo7Eb4n1_nVO^Qd(z)6z)yOUc2M^{1@r0s!ZEIhFex@E7o{OBH-~6zep)NGwKJ3 z7>jU-6Wlv%UJF9R;^3Tz?y@IcKk(^G4&#=n%v|#N6_#IEB@rtv{q+u( z>GSJBN4Ff`hU+HM3&wKr@f?l%?4-V|DS`=Y5G^y9E7o>0x#gmU8Ity5P+!jUd&+-k zi5#xHqiN*&Jp5NZ?W`2NjO^v7MYlwoOM`8A7f;WGXf0+HYu+vtxz0=qo z=nB=LB;gQyyx*?xr4$O|FU;}b&zGlE_d4~XLcPhq)MeCz`* zp>HqnwngJLX++^rTZMxE!>FwZy8Oc=AHH+jj?&BUd(i*qp%0A}3YQAV^5{*t?a~lz}3LFi2-01YyF<#p)1#O+p vW&bOAK}K>yh8J(iN%af&HcxEMb_LD|vWq22-HH7Rd}-X#xm~RM_|^Xa3ri!A literal 0 HcmV?d00001 diff --git a/doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-duplex-extended.png b/doc/source/deploy_install_guides/r3_release/figures/starlingx-deployment-options-duplex-extended.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf053865ca630924800939c464b45dfe2072ea2 GIT binary patch literal 101986 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