From 7158f15e6cf04d6ea1468cc688d893b253e47f06 Mon Sep 17 00:00:00 2001 From: MCamp859 Date: Fri, 15 May 2020 16:52:35 -0400 Subject: [PATCH] Replicate Proxy updates in R4 install guides This review is a follow-on to: 714538, 720252, 726468 Copied updates from R3 install guides into R4 guides. Changed tabs to spaces in some guides. Change-Id: I28191b0cd69c0a86d134a2fe9453928d02ce9042 Signed-off-by: MCamp859 --- .../configuration/docker_proxy_config.rst | 4 +- .../aio_duplex_install_kubernetes.rst | 23 +- .../aio_simplex_install_kubernetes.rst | 23 +- .../controller_storage_install_kubernetes.rst | 277 ++++++++++-------- .../dedicated_storage_install_kubernetes.rst | 212 +++++++------- .../r4_release/bare_metal/ironic.rst | 8 +- .../r4_release/desc_aio_duplex.txt | 6 + .../r4_release/desc_aio_simplex.txt | 6 + .../r4_release/desc_controller_storage.txt | 6 + .../r4_release/desc_dedicated_storage.txt | 9 +- .../starlingx-deployment-options-duplex.png | Bin 105153 -> 103883 bytes .../r4_release/openstack/install.rst | 17 +- .../virtual/aio_duplex_install_kubernetes.rst | 28 +- .../aio_simplex_install_kubernetes.rst | 23 +- .../controller_storage_install_kubernetes.rst | 23 +- .../dedicated_storage_install_kubernetes.rst | 8 +- 16 files changed, 420 insertions(+), 253 deletions(-) diff --git a/doc/source/configuration/docker_proxy_config.rst b/doc/source/configuration/docker_proxy_config.rst index 10d1a894e..e6c19de97 100644 --- a/doc/source/configuration/docker_proxy_config.rst +++ b/doc/source/configuration/docker_proxy_config.rst @@ -38,8 +38,8 @@ The items labeled *a* and *b* in the figure indicate two configuration files: * {controller OAM gateway IP/floating IP/host IP} * {controller management floating IP/host IP} * {controller cluster gateway IP} - * 10.96.0.1 - * 10.96.0.10 + * 10.96.0.1 {apiserver cluster IP for Kubernetes} + * 10.96.0.10 {coredns cluster IP for Kubernetes} * `*.cluster.local` * Configuration file *b* lists container runtime proxy variables diff --git a/doc/source/deploy_install_guides/r4_release/bare_metal/aio_duplex_install_kubernetes.rst b/doc/source/deploy_install_guides/r4_release/bare_metal/aio_duplex_install_kubernetes.rst index 20259a3cf..0d47942d5 100644 --- a/doc/source/deploy_install_guides/r4_release/bare_metal/aio_duplex_install_kubernetes.rst +++ b/doc/source/deploy_install_guides/r4_release/bare_metal/aio_duplex_install_kubernetes.rst @@ -116,11 +116,20 @@ Bootstrap system on controller-0 admin_username: admin admin_password: ansible_become_pass: + + # Add these lines to configure Docker to use a proxy server + # docker_http_proxy: http://my.proxy.com:1080 + # docker_https_proxy: https://my.proxy.com:1443 + # docker_no_proxy: + # - 1.2.3.4 + EOF Refer to :doc:`/deploy_install_guides/r4_release/ansible_bootstrap_configs` for information on additional Ansible bootstrap configurations for advanced - Ansible bootstrap scenarios. + Ansible bootstrap scenarios, such as Docker proxies when deploying behind a + firewall, etc. Refer to :doc:`/../../configuration/docker_proxy_config` for + details about Docker proxy settings. #. Run the Ansible bootstrap playbook: @@ -250,6 +259,18 @@ Configure 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 +#. If required, and not already done as part of bootstrap, configure Docker to + use a proxy server. + + #. List Docker proxy parameters: + + :: + + system service-parameter-list platform docker + + #. Refer to :doc:`/../../configuration/docker_proxy_config` for + details about Docker proxy settings. + ************************************* OpenStack-specific host configuration ************************************* diff --git a/doc/source/deploy_install_guides/r4_release/bare_metal/aio_simplex_install_kubernetes.rst b/doc/source/deploy_install_guides/r4_release/bare_metal/aio_simplex_install_kubernetes.rst index 682bad932..9399c812a 100644 --- a/doc/source/deploy_install_guides/r4_release/bare_metal/aio_simplex_install_kubernetes.rst +++ b/doc/source/deploy_install_guides/r4_release/bare_metal/aio_simplex_install_kubernetes.rst @@ -131,11 +131,20 @@ Bootstrap system on controller-0 admin_username: admin admin_password: ansible_become_pass: + + # Add these lines to configure Docker to use a proxy server + # docker_http_proxy: http://my.proxy.com:1080 + # docker_https_proxy: https://my.proxy.com:1443 + # docker_no_proxy: + # - 1.2.3.4 + EOF Refer to :doc:`/deploy_install_guides/r4_release/ansible_bootstrap_configs` for information on additional Ansible bootstrap configurations for advanced - Ansible bootstrap scenarios. + Ansible bootstrap scenarios, such as Docker proxies when deploying behind a + firewall, etc. Refer to :doc:`/../../configuration/docker_proxy_config` for + details about Docker proxy settings. #. Run the Ansible bootstrap playbook: @@ -256,6 +265,18 @@ Configure 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 +#. If required, and not already done as part of bootstrap, configure Docker to + use a proxy server. + + #. List Docker proxy parameters: + + :: + + system service-parameter-list platform docker + + #. Refer to :doc:`/../../configuration/docker_proxy_config` for + details about Docker proxy settings. + ************************************* OpenStack-specific host configuration ************************************* diff --git a/doc/source/deploy_install_guides/r4_release/bare_metal/controller_storage_install_kubernetes.rst b/doc/source/deploy_install_guides/r4_release/bare_metal/controller_storage_install_kubernetes.rst index 14dd39200..b4db9a95e 100644 --- a/doc/source/deploy_install_guides/r4_release/bare_metal/controller_storage_install_kubernetes.rst +++ b/doc/source/deploy_install_guides/r4_release/bare_metal/controller_storage_install_kubernetes.rst @@ -137,11 +137,20 @@ Bootstrap system on controller-0 admin_username: admin admin_password: ansible_become_pass: + + # Add these lines to configure Docker to use a proxy server + # docker_http_proxy: http://my.proxy.com:1080 + # docker_https_proxy: https://my.proxy.com:1443 + # docker_no_proxy: + # - 1.2.3.4 + EOF Refer to :doc:`/deploy_install_guides/r4_release/ansible_bootstrap_configs` for information on additional Ansible bootstrap configurations for advanced - Ansible bootstrap scenarios. + Ansible bootstrap scenarios, such as Docker proxies when deploying behind a + firewall, etc. Refer to :doc:`/../../configuration/docker_proxy_config` for + details about Docker proxy settings. #. Run the Ansible bootstrap playbook: @@ -165,7 +174,7 @@ Configure controller-0 :: - source /etc/platform/openrc + 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 @@ -173,24 +182,24 @@ Configure controller-0 :: - 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 + 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 + system ntp-modify ntpservers=0.pool.ntp.org,1.pool.ntp.org #. Configure Ceph storage backend @@ -206,6 +215,18 @@ Configure controller-0 system storage-backend-add ceph --confirmed +#. If required, and not already done as part of bootstrap, configure Docker to + use a proxy server. + + #. List Docker proxy parameters: + + :: + + system service-parameter-list platform docker + + #. Refer to :doc:`/../../configuration/docker_proxy_config` for + details about Docker proxy settings. + ************************************* OpenStack-specific host configuration ************************************* @@ -322,12 +343,12 @@ Install software on controller-1 and worker nodes :: system host-list - +----+--------------+-------------+----------------+-------------+--------------+ - | id | hostname | personality | administrative | operational | availability | - +----+--------------+-------------+----------------+-------------+--------------+ - | 1 | controller-0 | controller | unlocked | enabled | available | - | 2 | None | None | locked | disabled | offline | - +----+--------------+-------------+----------------+-------------+--------------+ + +----+--------------+-------------+----------------+-------------+--------------+ + | 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': @@ -361,16 +382,16 @@ Install software on controller-1 and worker nodes :: - 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 | worker-0 | worker | locked | disabled | online | - | 4 | worker-1 | worker | locked | disabled | online | - +----+--------------+-------------+----------------+-------------+--------------+ + +----+--------------+-------------+----------------+-------------+--------------+ + | id | hostname | personality | administrative | operational | availability | + +----+--------------+-------------+----------------+-------------+--------------+ + | 1 | controller-0 | controller | unlocked | enabled | available | + | 2 | controller-1 | controller | locked | disabled | online | + | 3 | worker-0 | worker | locked | disabled | online | + | 4 | worker-1 | worker | locked | disabled | online | + +----+--------------+-------------+----------------+-------------+--------------+ ---------------------- Configure controller-1 @@ -387,11 +408,11 @@ 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 + 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 @@ -407,7 +428,7 @@ 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-control-plane=enabled .. incl-config-controller-1-end: @@ -421,7 +442,7 @@ Unlock controller-1 in order to bring it into service: :: - system host-unlock controller-1 + 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 @@ -440,22 +461,22 @@ Configure worker nodes :: - system ceph-mon-add worker-0 + system ceph-mon-add worker-0 #. Wait for the worker 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 | worker-0 | configured | None | - +--------------------------------------+-------+--------------+------------+------+ + 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 | worker-0 | configured | None | + +--------------------------------------+-------+--------------+------------+------+ #. Assign the cluster-host network to the MGMT interface for the worker nodes: @@ -464,19 +485,19 @@ Configure worker nodes :: - for NODE in worker-0 worker-1; do - system interface-network-assign $NODE mgmt0 cluster-host - done + for NODE in worker-0 worker-1; do + system interface-network-assign $NODE mgmt0 cluster-host + done #. Configure data interfaces for worker 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 **required** for OpenStack. - This step is optional for Kubernetes: Do this step if using SRIOV network - attachments in hosted application containers. + This step is optional for Kubernetes: Do this step if using SRIOV network + attachments in hosted application containers. For Kubernetes SRIOV network attachments: @@ -484,55 +505,55 @@ Configure worker nodes :: - for NODE in worker-0 worker-1; do - system host-label-assign ${NODE} sriovdp=enabled - done + for NODE in worker-0 worker-1; do + system host-label-assign ${NODE} 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 NODE in worker-0 worker-1; do - system host-memory-modify ${NODE} 0 -1G 100 - system host-memory-modify ${NODE} 1 -1G 100 - done + for NODE in worker-0 worker-1; do + system host-memory-modify ${NODE} 0 -1G 100 + system host-memory-modify ${NODE} 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 + 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 + # 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 NODE in worker-0 worker-1; do - echo "Configuring interface for: $NODE" - set -ex - system host-port-list ${NODE} --nowrap > ${SPL} - system host-if-list -a ${NODE} --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 ${NODE} ${DATA0IFUUID} - system host-if-modify -m 1500 -n data1 -c data ${NODE} ${DATA1IFUUID} - system interface-datanetwork-assign ${NODE} ${DATA0IFUUID} ${PHYSNET0} - system interface-datanetwork-assign ${NODE} ${DATA1IFUUID} ${PHYSNET1} - set +ex - done + for NODE in worker-0 worker-1; do + echo "Configuring interface for: $NODE" + set -ex + system host-port-list ${NODE} --nowrap > ${SPL} + system host-if-list -a ${NODE} --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 ${NODE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${NODE} ${DATA1IFUUID} + system interface-datanetwork-assign ${NODE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${NODE} ${DATA1IFUUID} ${PHYSNET1} + set +ex + done ************************************* OpenStack-specific host configuration @@ -548,27 +569,27 @@ OpenStack-specific host configuration :: - for NODE in worker-0 worker-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 NODE in worker-0 worker-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 NODE in worker-0 worker-1; do - echo "Configuring Nova local for: $NODE" - ROOT_DISK=$(system host-show ${NODE} | grep rootfs | awk '{print $4}') - ROOT_DISK_UUID=$(system host-disk-list ${NODE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') - PARTITION_SIZE=10 - NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${NODE} ${ROOT_DISK_UUID} ${PARTITION_SIZE}) - NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') - system host-lvg-add ${NODE} nova-local - system host-pv-add ${NODE} nova-local ${NOVA_PARTITION_UUID} - done + for NODE in worker-0 worker-1; do + echo "Configuring Nova local for: $NODE" + ROOT_DISK=$(system host-show ${NODE} | grep rootfs | awk '{print $4}') + ROOT_DISK_UUID=$(system host-disk-list ${NODE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') + PARTITION_SIZE=10 + NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${NODE} ${ROOT_DISK_UUID} ${PARTITION_SIZE}) + NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') + system host-lvg-add ${NODE} nova-local + system host-pv-add ${NODE} nova-local ${NOVA_PARTITION_UUID} + done -------------------- Unlock worker nodes @@ -578,9 +599,9 @@ Unlock worker nodes in order to bring them into service: :: - for NODE in worker-0 worker-1; do - system host-unlock $NODE - done + for NODE in worker-0 worker-1; do + system host-unlock $NODE + done The worker 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. @@ -593,39 +614,39 @@ Add Ceph OSDs to controllers .. important:: - This step requires a configured Ceph storage backend + This step requires a configured Ceph storage backend. :: - 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 + 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 + system host-stor-list $HOST #. Add OSDs to controller-1. The following example adds OSDs to the `sdb` disk: .. important:: - This step requires a configured Ceph storage backend + This step requires a configured Ceph storage backend. :: - 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 + 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 + system host-stor-list $HOST ---------- Next steps diff --git a/doc/source/deploy_install_guides/r4_release/bare_metal/dedicated_storage_install_kubernetes.rst b/doc/source/deploy_install_guides/r4_release/bare_metal/dedicated_storage_install_kubernetes.rst index ea91844dd..bb047ea56 100644 --- a/doc/source/deploy_install_guides/r4_release/bare_metal/dedicated_storage_install_kubernetes.rst +++ b/doc/source/deploy_install_guides/r4_release/bare_metal/dedicated_storage_install_kubernetes.rst @@ -45,11 +45,11 @@ Configure controller-0 Unlock controller-0 ------------------- - .. important:: +.. important:: - Make sure the Ceph storage backend is configured. If it is - not configured, you will not be able to configure storage - nodes. + Make sure the Ceph storage backend is configured. If it is + not configured, you will not be able to configure storage + nodes. Unlock controller-0 in order to bring it into service: @@ -75,13 +75,13 @@ Install software on controller-1, storage nodes, and worker nodes :: - system host-list - +----+--------------+-------------+----------------+-------------+--------------+ - | id | hostname | personality | administrative | operational | availability | - +----+--------------+-------------+----------------+-------------+--------------+ - | 1 | controller-0 | controller | unlocked | enabled | available | - | 2 | None | None | locked | disabled | offline | - +----+--------------+-------------+----------------+-------------+--------------+ + 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': @@ -101,14 +101,14 @@ Install software on controller-1, storage nodes, and worker nodes :: - system host-update 3 personality=storage + 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 + 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. @@ -128,7 +128,7 @@ Install software on controller-1, storage nodes, and worker nodes :: - system host-update 6 personality=worker hostname=worker-1 + system host-update 6 personality=worker hostname=worker-1 This initiates the install of software on worker-0 and worker-1. @@ -138,17 +138,17 @@ Install software on controller-1, storage nodes, and worker nodes :: - 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 | worker-0 | worker | locked | disabled | online | - | 6 | worker-1 | worker | locked | disabled | online | - +----+--------------+-------------+----------------+-------------+--------------+ + 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 | worker-0 | worker | locked | disabled | online | + | 6 | worker-1 | worker | locked | disabled | online | + +----+--------------+-------------+----------------+-------------+--------------+ ---------------------- Configure controller-1 @@ -177,39 +177,39 @@ Configure storage nodes :: - for NODE in storage-0 storage-1; do - system interface-network-assign $NODE mgmt0 cluster-host - done + for NODE in storage-0 storage-1; do + system interface-network-assign $NODE mgmt0 cluster-host + done #. Add OSDs to storage-0. The following example adds OSDs to the `sdb` disk: :: - 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 + 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 + system host-stor-list $HOST #. Add OSDs to storage-1. The following example adds OSDs to the `sdb` disk: :: - 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 + 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 + system host-stor-list $HOST -------------------- Unlock storage nodes @@ -219,9 +219,9 @@ Unlock storage nodes in order to bring them into service: :: - for STORAGE in storage-0 storage-1; do - system host-unlock $STORAGE - done + 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 @@ -238,9 +238,9 @@ Configure worker nodes :: - for NODE in worker-0 worker-1; do - system interface-network-assign $NODE mgmt0 cluster-host - done + for NODE in worker-0 worker-1; do + system interface-network-assign $NODE mgmt0 cluster-host + done #. Configure data interfaces for worker nodes. Use the DATA port names, for example eth0, that are applicable to your deployment environment. @@ -258,55 +258,55 @@ Configure worker nodes :: - for NODE in worker-0 worker-1; do - system host-label-assign ${NODE} sriovdp=enabled - done + for NODE in worker-0 worker-1; do + system host-label-assign ${NODE} 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 NODE in worker-0 worker-1; do - system host-memory-modify ${NODE} 0 -1G 100 - system host-memory-modify ${NODE} 1 -1G 100 - done + for NODE in worker-0 worker-1; do + system host-memory-modify ${NODE} 0 -1G 100 + system host-memory-modify ${NODE} 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 + 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 + # 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 NODE in worker-0 worker-1; do - echo "Configuring interface for: $NODE" - set -ex - system host-port-list ${NODE} --nowrap > ${SPL} - system host-if-list -a ${NODE} --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 ${NODE} ${DATA0IFUUID} - system host-if-modify -m 1500 -n data1 -c data ${NODE} ${DATA1IFUUID} - system interface-datanetwork-assign ${NODE} ${DATA0IFUUID} ${PHYSNET0} - system interface-datanetwork-assign ${NODE} ${DATA1IFUUID} ${PHYSNET1} - set +ex - done + for NODE in worker-0 worker-1; do + echo "Configuring interface for: $NODE" + set -ex + system host-port-list ${NODE} --nowrap > ${SPL} + system host-if-list -a ${NODE} --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 ${NODE} ${DATA0IFUUID} + system host-if-modify -m 1500 -n data1 -c data ${NODE} ${DATA1IFUUID} + system interface-datanetwork-assign ${NODE} ${DATA0IFUUID} ${PHYSNET0} + system interface-datanetwork-assign ${NODE} ${DATA1IFUUID} ${PHYSNET1} + set +ex + done ************************************* OpenStack-specific host configuration @@ -322,27 +322,27 @@ OpenStack-specific host configuration :: - for NODE in worker-0 worker-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 NODE in worker-0 worker-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 NODE in worker-0 worker-1; do - echo "Configuring Nova local for: $NODE" - ROOT_DISK=$(system host-show ${NODE} | grep rootfs | awk '{print $4}') - ROOT_DISK_UUID=$(system host-disk-list ${NODE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') - PARTITION_SIZE=10 - NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${NODE} ${ROOT_DISK_UUID} ${PARTITION_SIZE}) - NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') - system host-lvg-add ${NODE} nova-local - system host-pv-add ${NODE} nova-local ${NOVA_PARTITION_UUID} - done + for NODE in worker-0 worker-1; do + echo "Configuring Nova local for: $NODE" + ROOT_DISK=$(system host-show ${NODE} | grep rootfs | awk '{print $4}') + ROOT_DISK_UUID=$(system host-disk-list ${NODE} --nowrap | grep ${ROOT_DISK} | awk '{print $2}') + PARTITION_SIZE=10 + NOVA_PARTITION=$(system host-disk-partition-add -t lvm_phys_vol ${NODE} ${ROOT_DISK_UUID} ${PARTITION_SIZE}) + NOVA_PARTITION_UUID=$(echo ${NOVA_PARTITION} | grep -ow "| uuid | [a-z0-9\-]* |" | awk '{print $4}') + system host-lvg-add ${NODE} nova-local + system host-pv-add ${NODE} nova-local ${NOVA_PARTITION_UUID} + done ------------------- Unlock worker nodes @@ -352,9 +352,9 @@ Unlock worker nodes in order to bring them into service: :: - for NODE in worker-0 worker-1; do - system host-unlock $NODE - done + for NODE in worker-0 worker-1; do + system host-unlock $NODE + done The worker 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 diff --git a/doc/source/deploy_install_guides/r4_release/bare_metal/ironic.rst b/doc/source/deploy_install_guides/r4_release/bare_metal/ironic.rst index 063119c51..5c1e34a45 100644 --- a/doc/source/deploy_install_guides/r4_release/bare_metal/ironic.rst +++ b/doc/source/deploy_install_guides/r4_release/bare_metal/ironic.rst @@ -14,8 +14,14 @@ 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. +.. note:: + + If you are behind a corporate firewall or proxy, you need to set proxy + settings. Refer to :doc:`/../../configuration/docker_proxy_config` for + details. + .. figure:: ../figures/starlingx-deployment-options-ironic.png - :scale: 90% + :scale: 50% :alt: Standard with Ironic deployment configuration *Figure 1: Standard with Ironic deployment configuration* diff --git a/doc/source/deploy_install_guides/r4_release/desc_aio_duplex.txt b/doc/source/deploy_install_guides/r4_release/desc_aio_duplex.txt index 079d2af47..ec00437cf 100644 --- a/doc/source/deploy_install_guides/r4_release/desc_aio_duplex.txt +++ b/doc/source/deploy_install_guides/r4_release/desc_aio_duplex.txt @@ -16,6 +16,12 @@ An AIO-DX configuration provides the following benefits: * All controller HA services go active on the remaining healthy server * All virtual machines are recovered on the remaining healthy server +.. note:: + + If you are behind a corporate firewall or proxy, you need to set proxy + settings. Refer to :doc:`/../../configuration/docker_proxy_config` for + details. + .. figure:: ../figures/starlingx-deployment-options-duplex.png :scale: 50% :alt: All-in-one Duplex deployment configuration diff --git a/doc/source/deploy_install_guides/r4_release/desc_aio_simplex.txt b/doc/source/deploy_install_guides/r4_release/desc_aio_simplex.txt index 5f10318b2..56b22e94b 100644 --- a/doc/source/deploy_install_guides/r4_release/desc_aio_simplex.txt +++ b/doc/source/deploy_install_guides/r4_release/desc_aio_simplex.txt @@ -7,6 +7,12 @@ following benefits: single pair of physical servers * A storage backend solution using a single-node CEPH deployment +.. note:: + + If you are behind a corporate firewall or proxy, you need to set proxy + settings. Refer to :doc:`/../../configuration/docker_proxy_config` for + details. + .. figure:: ../figures/starlingx-deployment-options-simplex.png :scale: 50% :alt: All-in-one Simplex deployment configuration diff --git a/doc/source/deploy_install_guides/r4_release/desc_controller_storage.txt b/doc/source/deploy_install_guides/r4_release/desc_controller_storage.txt index 8a952326e..3d606d532 100644 --- a/doc/source/deploy_install_guides/r4_release/desc_controller_storage.txt +++ b/doc/source/deploy_install_guides/r4_release/desc_controller_storage.txt @@ -15,6 +15,12 @@ A Standard with Controller Storage configuration provides the following benefits * On overall worker node failure, virtual machines and containers are recovered on the remaining healthy worker nodes +.. note:: + + If you are behind a corporate firewall or proxy, you need to set proxy + settings. Refer to :doc:`/../../configuration/docker_proxy_config` for + details. + .. figure:: ../figures/starlingx-deployment-options-controller-storage.png :scale: 50% :alt: Standard with Controller Storage deployment configuration diff --git a/doc/source/deploy_install_guides/r4_release/desc_dedicated_storage.txt b/doc/source/deploy_install_guides/r4_release/desc_dedicated_storage.txt index c352663af..79371f446 100644 --- a/doc/source/deploy_install_guides/r4_release/desc_dedicated_storage.txt +++ b/doc/source/deploy_install_guides/r4_release/desc_dedicated_storage.txt @@ -8,7 +8,14 @@ A Standard with Dedicated Storage configuration provides the following benefits: 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 +* Up to four groups of 2x storage nodes, or up to three groups of 3x storage + nodes + +.. note:: + + If you are behind a corporate firewall or proxy, you need to set proxy + settings. Refer to :doc:`/../../configuration/docker_proxy_config` for + details. .. figure:: ../figures/starlingx-deployment-options-dedicated-storage.png :scale: 50% diff --git a/doc/source/deploy_install_guides/r4_release/figures/starlingx-deployment-options-duplex.png b/doc/source/deploy_install_guides/r4_release/figures/starlingx-deployment-options-duplex.png index 1d7db9e7f0e50cdb7bf128d35308c600634f493a..4f8ab3f24d876b0a1a7b281bbe8afed41cc1228e 100644 GIT binary patch literal 103883 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