
Move content under deploy/kubernetes as per convention. This is required for DS builds. Signed-off-by: Ron Stone <ronald.stone@windriver.com> Change-Id: I5da5b554ea274cbd3b1a2c0f47bf649df1080173
271 lines
12 KiB
ReStructuredText
271 lines
12 KiB
ReStructuredText
.. _deploy-edgeworker-nodes:
|
||
|
||
=======================
|
||
Deploy Edgeworker Nodes
|
||
=======================
|
||
|
||
.. contents::
|
||
:local:
|
||
:depth: 1
|
||
|
||
------------
|
||
Introduction
|
||
------------
|
||
|
||
Edgeworker is a new node personality introduced in |prod| R5.0 [[1]_].
|
||
Edgeworkers are typically small systems running dedicated workloads that can
|
||
now be managed by |prod|. To use the edgeworker personality, nodes must have
|
||
the Ubuntu operating system installed [[2]_].
|
||
|
||
The edgeworker personality is targeted for nodes that meet one or more of the
|
||
following criteria:
|
||
|
||
- A node that is running a customized OS, or
|
||
- A node that is running a Type1 hypervisor, or
|
||
- A node that does not meet |prod| worker’s minimum requirements.
|
||
|
||
These nodes can be added to a running |prod| cluster in minutes. During the
|
||
provisioning stage, Kubernetes components will be provisioned on the edgeworker
|
||
nodes.
|
||
|
||
The |prod| controller manages edgeworker nodes using the same mechanisms as
|
||
typical worker nodes, including the following:
|
||
|
||
- Container orchestration by Kubernetes
|
||
- Distributed storage cluster management by Rook-ceph
|
||
|
||
.. rubric:: Notes
|
||
|
||
.. [1] Edgeworker is an experimental feature in |prod| R5.0.
|
||
.. [2] The operating system (OS) of an edgeworker node is not installed by the |prod| controller, instead, a node with installed OS is required prior to the node provisioning step. Only Ubuntu is supported in |prod| R5.0.
|
||
|
||
---------------------
|
||
Hardware Requirements
|
||
---------------------
|
||
|
||
The minimum requirements for an edgeworker host (bare metal or virtual machine)
|
||
are:
|
||
|
||
+-------------------------+--------------------------------+
|
||
| Minimum Requirement | Edgeworker Node |
|
||
+=========================+================================+
|
||
| Minimum processor class | Intel® Core™ Processor Family |
|
||
+-------------------------+--------------------------------+
|
||
| Minimum memory | 16GB |
|
||
+-------------------------+--------------------------------+
|
||
| Primary disk | 256GB SSD or NVMe |
|
||
+-------------------------+--------------------------------+
|
||
| Minimum network ports | - Mgmt/Cluster: 1 x 1000BASE |
|
||
| | - Data: 0 or more x 10GE |
|
||
+-------------------------+--------------------------------+
|
||
|
||
------------------------
|
||
Prepare Edgeworker Nodes
|
||
------------------------
|
||
|
||
Before you provision edgeworker nodes, you must prepare the following setup:
|
||
|
||
- Deploy |prod| |AIO| Duplex or Standard setup.
|
||
- Connect the Edgeworker node to power and power it on.
|
||
- Connect the Edgeworker node to the network and connect it to a management
|
||
network switch.
|
||
- Set the primary disk as the first boot device in the BIOS setting of the
|
||
edgeworker node.
|
||
- Install Ubuntu 18.04 (or above) on the edgeworker node.
|
||
- Install Openssh-server and Python.
|
||
|
||
The figure below shows how edgeworker nodes are connected to an existing |prod|
|
||
cluster.
|
||
|
||
.. image:: figures/edgeworker-deployment.png
|
||
:width: 800
|
||
|
||
--------------------------
|
||
Provision Edgeworker Nodes
|
||
--------------------------
|
||
|
||
When a node’s network interface is connected to the management network switch,
|
||
the node is detected and will appear in the list of hosts managed by system
|
||
inventory (with personality set to None).
|
||
|
||
.. code-block:: bash
|
||
|
||
[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 | None | None | locked | disabled | offline |
|
||
+----+--------------+-------------+----------------+-------------+--------------+
|
||
|
||
#. Update the node’s hostname and personality using ``system host-update``:
|
||
|
||
.. code-block:: bash
|
||
|
||
[sysadmin@controller-0 ~(keystone_admin)]$ system host-update 3 hostname=edgeworker-0 personality=edgeworker
|
||
+-----------------------+--------------------------------------+
|
||
| Property | Value |
|
||
+-----------------------+--------------------------------------+
|
||
| action | none |
|
||
| administrative | locked |
|
||
| availability | offline |
|
||
| bm_ip | None |
|
||
| bm_type | None |
|
||
| bm_username | None |
|
||
| boot_device | /dev/sda |
|
||
| capabilities | {} |
|
||
| clock_synchronization | ntp |
|
||
| config_applied | None |
|
||
| config_status | None |
|
||
| config_target | None |
|
||
| console | ttyS0,115200 |
|
||
| created_at | 2021-02-05T02:12:42.136121+00:00 |
|
||
| device_image_update | None |
|
||
| hostname | edgeworker-0 |
|
||
| id | 3 |
|
||
| install_output | text |
|
||
| install_state | None |
|
||
| install_state_info | None |
|
||
| inv_state | None |
|
||
| invprovision | None |
|
||
| location | {} |
|
||
| mgmt_ip | 192.188.204.21 |
|
||
| mgmt_mac | 52:54:00:76:e6:cb |
|
||
| operational | disabled |
|
||
| personality | edgeworker |
|
||
| reboot_needed | False |
|
||
| reserved | False |
|
||
| rootfs_device | /dev/sda |
|
||
| serialid | None |
|
||
| software_load | nn.nn |
|
||
| task | None |
|
||
| tboot | false |
|
||
| ttys_dcd | None |
|
||
| updated_at | None |
|
||
| uptime | 0 |
|
||
| uuid | a2c8f3ec-1dc4-4a0a-b471-6e5c01abc187 |
|
||
| vim_progress_status | None |
|
||
+-----------------------+--------------------------------------+
|
||
|
||
Alternatively, if the node is not shown in the host list automatically, you
|
||
can also add the host using ``system host-add``:
|
||
|
||
.. code-block:: bash
|
||
|
||
[sysadmin@controller-0 ~(keystone_admin)]$ system host-add -n edgeworker-0 -p edgeworker -m <mgmt_mac>
|
||
|
||
#. Check the prerequisites of the edgeworker node:
|
||
|
||
.. note::
|
||
|
||
We suggest using the same username and password for all the edgeworker nodes.
|
||
|
||
.. code-block:: bash
|
||
|
||
EWUSER=<edgeworker username>
|
||
EWPASSWD=<edgeworker password>
|
||
SYSADMINPASSWD=<sysadmin password>
|
||
EWNODE=(edgeworker-0)
|
||
PYTHONBIN=()
|
||
for NODE in ${EWNODE[@]}; do
|
||
EDGEWORKER=$(system host-show ${NODE} | awk '/mgmt_ip/{print$4}');
|
||
PYTHONBIN+=($(sshpass -p ${EWPASSWD} ssh -o "StrictHostKeyChecking no" ${EWUSER}@${EDGEWORKER} which python));
|
||
done
|
||
ERR=0
|
||
for i in ${PYTHONBIN[@]}; do
|
||
if [ -z "$i" ]; then
|
||
ERR=1
|
||
break
|
||
fi
|
||
done
|
||
if [ $ERR == 1 ]; then
|
||
echo "Error, python should be intalled on edgeworker nodes."
|
||
else
|
||
echo "Pre-requisites check passed."
|
||
fi
|
||
|
||
If the following error occurs, refresh the |DHCP| client for the
|
||
management interface on the edgeworker nodes to assign the right IP address.
|
||
|
||
.. code-block:: none
|
||
|
||
ssh: connect to host XX.XX.XX.XX port 22: No route to host
|
||
|
||
#. Create an edgeworker inventory file with the variables from the previous
|
||
step.
|
||
|
||
.. code-block:: none
|
||
|
||
tee ./edgeworker_inventory.yml << EOF
|
||
all:
|
||
hosts:
|
||
localhost:
|
||
ansible_connection: local
|
||
children:
|
||
edgeworker:
|
||
hosts:
|
||
EOF
|
||
for i in ${!EWNODE[@]}; do
|
||
echo " ${EWNODE[$i]}:"
|
||
echo " ansible_ssh_user: ${EWUSER}"
|
||
echo " ansible_ssh_pass: ${EWPASSWD}"
|
||
echo " ansible_become_pass: ${EWPASSWD}"
|
||
echo " ansible_python_interpreter: ${PYTHONBIN[$i]}"
|
||
done | tee -a edgeworker_inventory.yml
|
||
tee -a ./edgeworker_inventory.yml << EOF
|
||
vars:
|
||
ansible_ssh_user: sysadmin
|
||
ansible_ssh_pass: ${SYSADMINPASSWD}
|
||
ansible_become_pass: ${SYSADMINPASSWD}
|
||
EOF
|
||
|
||
#. Provision the edgeworker node using Ansible playbook. You can provision
|
||
edgeworker nodes one at a time or multiple nodes at once. Run the playbook
|
||
with the inventory file you created.
|
||
|
||
.. code-block:: bash
|
||
|
||
ansible-playbook -i ./edgeworker_inventory.yml /usr/share/ansible/stx-ansible/playbooks/provision_edgeworker.yml
|
||
|
||
Provisioning output is similar to the following:
|
||
|
||
.. code-block:: bash
|
||
|
||
TASK [provision-edgeworker/prepare-edgeworker/kubernetes : set_fact] *********************************************************************************************************
|
||
ok: [edgeworker-0]
|
||
|
||
TASK [provision-edgeworker/prepare-edgeworker/kubernetes : Pull k8s gcr images from controller registry to edgeworker-0] *****************************************************
|
||
changed: [edgeworker-0]
|
||
|
||
RUNNING HANDLER [provision-edgeworker/prepare-edgeworker/kubernetes : Restart kubelet] ***************************************************************************************
|
||
changed: [edgeworker-0]
|
||
|
||
PLAY [localhost] *************************************************************************************************************************************************************
|
||
|
||
TASK [provision-edgeworker/prepare-controller/cleanup : Cleanup temporary files] *********************************************************************************************
|
||
changed: [localhost]
|
||
|
||
TASK [provision-edgeworker/prepare-controller/cleanup : Remove the provision flag] *******************************************************************************************
|
||
changed: [localhost]
|
||
|
||
PLAY RECAP *******************************************************************************************************************************************************************
|
||
edgeworker-0 : ok=54 changed=10 unreachable=0 failed=0
|
||
localhost : ok=31 changed=19 unreachable=0 failed=0
|
||
|
||
After provisioning, the edgeworker node will show ``Ready`` status in the
|
||
Kubernetes cluster.
|
||
|
||
.. code-block:: bash
|
||
|
||
[sysadmin@controller-0 ~(keystone_admin)]$ kubectl get node
|
||
NAME STATUS ROLES AGE VERSION
|
||
controller-0 Ready master 42h v1.18.1
|
||
controller-1 Ready master 42h v1.18.1
|
||
edgeworker-0 Ready <none> 21m v1.18.1
|
||
|
||
.. note::
|
||
|
||
In |prod| R5.0, the edgeworker nodes will be shown as
|
||
locked/disabled/offline when you use the ``system host-list`` command.
|