From e9b34c350e2878aef6ed26815cb25a74c7b7c5b9 Mon Sep 17 00:00:00 2001 From: Chris Holdgraf Date: Sat, 6 Oct 2018 12:07:54 -0700 Subject: [PATCH] cleaning up some language and adding more wording to the DO resize step --- docs/howto/admin/resize.rst | 51 ++++++++++-------- .../providers/digitalocean/power-off.png | Bin 0 -> 14469 bytes docs/index.rst | 1 + docs/install/digitalocean.rst | 32 +++++++++-- 4 files changed, 57 insertions(+), 27 deletions(-) create mode 100644 docs/images/providers/digitalocean/power-off.png diff --git a/docs/howto/admin/resize.rst b/docs/howto/admin/resize.rst index ade6b0e..38e7d06 100644 --- a/docs/howto/admin/resize.rst +++ b/docs/howto/admin/resize.rst @@ -1,15 +1,21 @@ .. _howto/admin/resize: -================= -Resizing a server -================= +================================================= +Resize the resources available to your JupyterHub +================================================= -As you are using your JupyterHub, you may find that you have a need to increase or decrease -the amount of resources allocated to your TLJH install. How resources can be reallocated -will depend on the server interface; consult the installation page for your provider for -more information. +As you are using your JupyterHub, you may need to increase or decrease +the amount of resources allocated to your TLJH install. The kinds of resources that can be +allocated, as well as the process to do so, will depend on the provider / interface for your +VM. We recommend consulting the installation page for your provider for more information. This +page covers the steps your should take on your JupyterHub *after* you've reallocated resources on +the cloud provider of your choice. -However, once resources have been relocated, you must tell TLJH to make use of these resources, +Currently there are instructions to resize your resources on the following providers: + +* :ref:`Digital Ocean `. + +Once resources have been relocated, you must tell TLJH to make use of these resources, and verify that the resources have become available. .. _tljhconf: @@ -17,10 +23,10 @@ and verify that the resources have become available. Verifying a Resize ================== -#. Once you have resized your server, you will need to tell the JupyterHub to make use of - these new resources. To accomplish this, you will follow the instructions in - :ref:`topic/tljh-config` to set memory limits and reload the hub. This can be completed - using the terminal in the JupyterHub. It can also be completed through the terminal. +#. Once you have resized your server, tell the JupyterHub to make use of + these new resources. To accomplish this, follow the instructions in + :ref:`topic/tljh-config` to set new memory or CPU limits and reload the hub. This can be completed + using the terminal in the JupyterHub (or via SSH-ing into your VM and using this terminal). #. TLJH configuration options can be verified by viewing the tljh-config output. @@ -28,28 +34,29 @@ Verifying a Resize sudo tljh-config show + Double-check that your changes are reflected in the output. -#. If you have changed your memory availability successfully, this will be reflected - in the `nbresuse `_ extension in the upper-right - when you open a Jupyter notebook on the Hub. +#. **To verify changes to memory**, confirm that it worked by starting + a new server (if you had one previously running, click "Control Panel -> Stop My Server" to + shut down your active server first), opening a notebook, and checking the value of the + `nbresuse `_ extension in the upper-right. .. image:: ../../images/nbresuse.png :alt: nbresuse demonstration -#. If you have changed the number of cores, this can be verified at the command line. - ``nproc`` displays the number of available cores, and should be equal to the +#. **To verify changes to CPU**, use the ``nproc`` from a terminal. + This command displays the number of available cores, and should be equal to the number of cores you selected in your provider's interface. .. code-block:: bash nproc --all - -#. Disk space changes can be verified, as well. The ``df`` command shows how much disk - space is available. The ``-hT`` argument allows us to have this printed in a human readable - format, and condenses the output to show one storage volume. +#. **To verify currently-available disk space**, use the ``df`` command in a terminal. This shows + how much disk space is available. The ``-hT`` argument allows us to have this printed in a human readable + format, and condenses the output to show one storage volume. Note that currently you cannot + change the disk space on a per-user basis. .. code-block:: bash df -hT /home - diff --git a/docs/images/providers/digitalocean/power-off.png b/docs/images/providers/digitalocean/power-off.png new file mode 100644 index 0000000000000000000000000000000000000000..7b6bbe6c7fd9c7c96f2ba4fc984c4ae554502bd9 GIT binary patch literal 14469 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