Install StarlingX Kubernetes on Virtual Standard with Controller Storage¶
This section describes the steps to install the StarlingX Kubernetes platform on a StarlingX R3.0 virtual Standard with Controller Storage deployment configuration.
Install software on controller-0¶
In the last step of Prepare Host and Environment, the controller-0 virtual server ‘controllerstorage-controller-0’ was started by the setup_configuration.sh command.
On the host, attach to the console of virtual controller-0 and select the appropriate installer menu options to start the non-interactive install of StarlingX software on controller-0.
Note
When entering the console, it is very easy to miss the first installer menu selection. Use ESC to navigate to previous menus, to ensure you are at the first installer menu.
virsh console controllerstorage-controller-0
Make the following menu selections in the installer:
First menu: Select ‘Standard Controller Configuration’.
Second menu: Select ‘Serial Console’.
Wait for the non-interactive install of software to complete and for the server to reboot. This can take 5-10 minutes depending on the performance of the host machine.
Bootstrap system on controller-0¶
On virtual controller-0:
Log in 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:
External connectivity is required to run the Ansible bootstrap playbook:
export CONTROLLER0_OAM_CIDR=10.10.10.3/24 export DEFAULT_OAM_GATEWAY=10.10.10.1 sudo ip address add $CONTROLLER0_OAM_CIDR dev enp7s1 sudo ip link set up dev enp7s1 sudo ip route add default via $DEFAULT_OAM_GATEWAY dev enp7s1
Check the configured network:
localhost:~$ ifconfig enp7s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.10.10.3 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::5054:ff:feb6:10d6 prefixlen 64 scopeid 0x20<link> ether 52:54:00:b6:10:d6 txqueuelen 1000 (Ethernet) RX packets 10 bytes 1151 (1.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 94 bytes 27958 (27.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
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/<hostname>.yml
.
Important
Some Ansible bootstrap parameters cannot be changed or are very difficult to change after installation is complete.
Review the set of install-time-only parameters before installation and confirm that your values for these parameters are correct for the desired installation.
Refer to Ansible install-time-only parameters for details.
Specify the user configuration override file for the Ansible bootstrap playbook using one of the following methods:
Copy the default.yml file listed above to
$HOME/localhost.yml
and edit the configurable values as desired (use the commented instructions in the file).
or
Create the minimal user configuration override file as shown in the example below:
cd ~ cat <<EOF > localhost.yml system_mode: duplex dns_servers: - 8.8.8.8 - 8.8.4.4 external_oam_subnet: 10.10.10.0/24 external_oam_gateway_address: 10.10.10.1 external_oam_floating_address: 10.10.10.2 external_oam_node_0_address: 10.10.10.3 external_oam_node_1_address: 10.10.10.4 admin_username: admin admin_password: <admin-password> ansible_become_pass: <sysadmin-password> # 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 Ansible Bootstrap Configurations for information on additional Ansible bootstrap configurations for advanced Ansible bootstrap scenarios, such as Docker proxies when deploying behind a firewall, etc. Refer to Docker Proxy Configuration for details about Docker proxy settings.
Run the Ansible bootstrap playbook:
ansible-playbook /usr/share/ansible/stx-ansible/playbooks/bootstrap.yml
Wait for Ansible bootstrap playbook to complete. This can take 5-10 minutes, depending on the performance of the host machine.
The image below shows a typical successful run.
Configure controller-0¶
On virtual controller-0:
Acquire admin credentials:
source /etc/platform/openrc
Configure the OAM and MGMT interfaces of controller-0 and specify the attached networks:
OAM_IF=enp7s1 MGMT_IF=enp7s2 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:
Note
In a virtual environment, this can sometimes cause Ceph clock skew alarms. Also, the virtual instance clock is synchronized with the host clock, so it is not absolutely required to configure NTP here.
system ntp-modify ntpservers=0.pool.ntp.org,1.pool.ntp.org
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 Docker Proxy Configuration for details about Docker proxy settings.
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/helm-charts later:
system host-label-assign controller-0 openstack-control-plane=enabled
For OpenStack only: A vSwitch is required.
The default vSwitch is containerized OVS that is packaged with the stx-openstack manifest/helm-charts. StarlingX provides the option to use OVS-DPDK on the host, however, in the virtual environment OVS-DPDK is NOT supported, only OVS is supported. Therefore, simply use the default OVS vSwitch here.
Unlock controller-0¶
Unlock virtual 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.
Note
Once the controller comes back up, check the status of controller-0. It should now show “unlocked”, “enabled”, “available” and “provisioned”.
[sysadmin@controller-0 ~(keystone_admin)]$ system host-show controller-0
+-----------------------+----------------------------------------------------------------------+
| Property | Value |
+-----------------------+----------------------------------------------------------------------+
| action | none |
| administrative | unlocked |
| availability | available |
| bm_ip | None |
| bm_type | none |
| bm_username | None |
| boot_device | /dev/disk/by-path/pci-0000:00:08.0-ata-1.0 |
| capabilities | {u'stor_function': u'monitor', u'Personality': u'Controller-Active'} |
| clock_synchronization | ntp |
| config_applied | 783e5df7-cd7c-44a4-9dca-640044e982fd |
| config_status | None |
| config_target | 783e5df7-cd7c-44a4-9dca-640044e982fd |
| console | ttyS0,115200 |
| created_at | 2020-04-22T06:26:08.656693+00:00 |
| hostname | controller-0 |
| id | 1 |
| install_output | text |
| install_state | None |
| install_state_info | None |
| inv_state | inventoried |
| invprovision | provisioned |
| location | {} |
| mgmt_ip | 192.168.204.11 |
| mgmt_mac | 52:54:00:80:16:be |
| operational | enabled |
| personality | controller |
| reserved | False |
| rootfs_device | /dev/disk/by-path/pci-0000:00:08.0-ata-1.0 |
| serialid | None |
| software_load | 20.01 |
| task | |
| tboot | false |
| ttys_dcd | None |
| updated_at | 2020-04-22T18:16:27.731120+00:00 |
| uptime | 40733 |
| uuid | 4befdadb-4fc0-4c33-a6e9-686d97279619 |
| vim_progress_status | services-enabled |
+-----------------------+----------------------------------------------------------------------+
Install software on controller-1 and worker nodes¶
On the host, power on the controller-1 virtual server, ‘controllerstorage-controller-1’. It will automatically attempt to network boot over the management network:
virsh start controllerstorage-controller-1
Attach to the console of virtual controller-1:
virsh console controllerstorage-controller-1
As controller-1 VM boots, a message appears on its console instructing you to configure the personality of the node.
On console of virtual controller-0, list hosts to see the 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 | +----+--------------+-------------+----------------+-------------+--------------+
On virtual controller-0, 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 on the previous step to complete, start up and set the personality for ‘controllerstorage-worker-0’ and ‘controllerstorage-worker-1’. Set the personality to ‘worker’ and assign a unique hostname for each.
For example, start ‘controllerstorage-worker-0’ from the host:
virsh start controllerstorage-worker-0
Wait for new host (hostname=None) to be discovered by checking ‘system host-list’ on virtual controller-0:
system host-update 3 personality=worker hostname=worker-0
Repeat for ‘controllerstorage-worker-1’. On the host:
virsh start controllerstorage-worker-1
And wait for new host (hostname=None) to be discovered by checking ‘system host-list’ on virtual controller-0:
system host-update 4 personality=worker hostname=worker-1
Wait for the software installation on controller-1, worker-0, and worker-1 to complete, for all virtual 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 | worker-0 | worker | locked | disabled | online | | 4 | worker-1 | worker | locked | disabled | online | +----+--------------+-------------+----------------+-------------+--------------+
Configure controller-1¶
Configure the OAM and MGMT interfaces of virtual controller-0 and specify the attached networks. Note that the MGMT interface is partially set up by the network install procedure.
OAM_IF=enp7s1
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
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/helm-charts later:
system host-label-assign controller-1 openstack-control-plane=enabled
Unlock controller-1¶
Unlock virtual 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.
[sysadmin@controller-0 ~(keystone_admin)]$ system host-show controller-1
+-----------------------+-----------------------------------------------------------------------+
| Property | Value |
+-----------------------+-----------------------------------------------------------------------+
| action | none |
| administrative | unlocked |
| availability | available |
| bm_ip | None |
| bm_type | none |
| bm_username | None |
| boot_device | /dev/sda |
| capabilities | {u'stor_function': u'monitor', u'Personality': u'Controller-Standby'} |
| clock_synchronization | ntp |
| config_applied | 122087b1-e611-4ce2-ba19-89d967b0c197 |
| config_status | None |
| config_target | 122087b1-e611-4ce2-ba19-89d967b0c197 |
| console | ttyS0,115200 |
| created_at | 2020-04-22T07:14:41.917528+00:00 |
| hostname | controller-1 |
| id | 2 |
| install_output | text |
| install_state | completed |
| install_state_info | None |
| inv_state | inventoried |
| invprovision | provisioned |
| location | {} |
| mgmt_ip | 192.168.204.12 |
| mgmt_mac | 52:54:00:e1:47:58 |
| operational | enabled |
| personality | controller |
| reserved | False |
| rootfs_device | /dev/sda |
| serialid | None |
| software_load | 20.01 |
| task | |
| tboot | false |
| ttys_dcd | None |
| updated_at | 2020-04-22T18:19:58.168304+00:00 |
| uptime | 25238 |
| uuid | 902613c7-da3e-4449-9d7d-41b832420d74 |
| vim_progress_status | services-enabled |
+-----------------------+-----------------------------------------------------------------------+
Configure worker nodes¶
On virtual controller-0:
Add the third Ceph monitor to a worker node:
(The first two Ceph monitors are automatically assigned to controller-0 and controller-1.)
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 | +--------------------------------------+-------+--------------+------------+------+
Assign the cluster-host network to the MGMT interface for the worker nodes.
Note that the MGMT interfaces are partially set up automatically by the network install procedure.
for NODE in worker-0 worker-1; do system interface-network-assign $NODE mgmt0 cluster-host done
Configure data interfaces for worker nodes.
Important
This step is required only if the StarlingX OpenStack application (stx-openstack) will be installed.
1G Huge Pages are not supported in the virtual environment and there is no virtual NIC supporting SRIOV. For that reason, data interfaces are not applicable in the virtual environment for the Kubernetes-only scenario.
For OpenStack only:
DATA0IF=eth1000 DATA1IF=eth1001 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 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¶
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 worker nodes in support of installing the stx-openstack manifest/helm-charts later:
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
Unlock worker nodes¶
Unlock virtual worker nodes to bring them into service:
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.
Add Ceph OSDs to controllers¶
On virtual controller-0:
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
Note
Check the status of the controller and worker nodes. It should now show “unlocked”, “enabled” and “available”.
[sysadmin@controller-0 ~(keystone_admin)]$ 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 | worker | unlocked | enabled | available |
| 4 | compute-1 | worker | unlocked | enabled | available |
+----+--------------+-------------+----------------+-------------+--------------+
Next steps¶
Your Kubernetes cluster is now up and running.
For instructions on how to access StarlingX Kubernetes see Access StarlingX Kubernetes R3.0.
For instructions on how to install and access StarlingX OpenStack see StarlingX OpenStack.