From c5363d85fd0ac9fef58f7309353f110973f235c6 Mon Sep 17 00:00:00 2001 From: Catherine Luse Date: Wed, 30 Sep 2020 03:26:11 -0700 Subject: [PATCH] Add Longhorn info to Rancher v2.5 docs --- .../volumes-and-storage/_index.md | 14 ++++- .../attaching-existing-storage/_index.md | 8 ++- .../provisioning-new-storage/_index.md | 10 ++- content/rancher/v2.x/en/longhorn/_index.md | 59 +++++++++++++++++- static/img/rancher/longhorn-logo.png | Bin 0 -> 23002 bytes 5 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 static/img/rancher/longhorn-logo.png diff --git a/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/_index.md b/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/_index.md index 145e647c331..cdc9bfaef3b 100644 --- a/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/_index.md +++ b/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/_index.md @@ -24,7 +24,7 @@ For attaching existing persistent storage to a cluster, the cloud provider does The overall workflow for setting up existing storage is as follows: -1. Set up persistent storage in an infrastructure provider. +1. Set up your persistent storage. This may be storage in an infrastructure provider, or it could be your own storage. 2. Add a persistent volume (PV) that refers to the persistent storage. 3. Add a persistent volume claim (PVC) that refers to the PV. 4. Mount the PVC as a volume in your workload. @@ -35,12 +35,22 @@ For details and prerequisites, refer to [this page.](./attaching-existing-storag The overall workflow for provisioning new storage is as follows: -1. Add a storage class and configure it to use your storage provider. +1. Add a StorageClass and configure it to use your storage provider. The StorageClass could refer to storage in an infrastructure provider, or it could refer to your own storage. 2. Add a persistent volume claim (PVC) that refers to the storage class. 3. Mount the PVC as a volume for your workload. For details and prerequisites, refer to [this page.](./provisioning-new-storage) +### Longhorn Storage + +[Longhorn](https://longhorn.io/) is a lightweight, reliable and easy-to-use distributed block storage system for Kubernetes. + +Longhorn is free, open source software. Originally developed by Rancher Labs, it is now being developed as a sandbox project of the Cloud Native Computing Foundation. It can be installed on any Kubernetes cluster with Helm, with kubectl, or with the Rancher UI. + +If you have a pool of block storage, Longhorn can help you provide persistent storage to your Kubernetes cluster without relying on cloud providers. For more information about Longhorn features, refer to the [documentation.](https://longhorn.io/docs/1.0.2/what-is-longhorn/) + +Rancher v2.5 simplified the process of installing Longhorn on a Rancher-managed cluster. For more information, see [this page.]({{}}/rancher/v2.x/en/longhorn) + ### Provisioning Storage Examples We provide examples of how to provision storage with [NFS,](./examples/nfs) [vSphere,](./examples/vsphere) and [Amazon's EBS.](./examples/ebs) diff --git a/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/attaching-existing-storage/_index.md b/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/attaching-existing-storage/_index.md index d85a4e9ad3d..0044a07d13b 100644 --- a/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/attaching-existing-storage/_index.md +++ b/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/attaching-existing-storage/_index.md @@ -9,7 +9,7 @@ This section describes how to set up existing persistent storage for workloads i To set up storage, follow these steps: -1. [Set up persistent storage in an infrastructure provider.](#1-set-up-persistent-storage-in-an-infrastructure-provider) +1. [Set up persistent storage.](#1-set-up-persistent-storage) 2. [Add a persistent volume that refers to the persistent storage.](#2-add-a-persistent-volume-that-refers-to-the-persistent-storage) 3. [Add a persistent volume claim that refers to the persistent volume.](#3-add-a-persistent-volume-claim-that-refers-to-the-persistent-volume) 4. [Mount the persistent volume claim as a volume in your workload.](#4-mount-the-persistent-storage-claim-as-a-volume-in-your-workload) @@ -19,11 +19,13 @@ To set up storage, follow these steps: - To create a persistent volume as a Kubernetes resource, you must have the `Manage Volumes` [role.]({{}}/rancher/v2.x/en/admin-settings/rbac/cluster-project-roles/#project-role-reference) - If you are provisioning storage for a cluster hosted in the cloud, the storage and cluster hosts must have the same cloud provider. -### 1. Set up persistent storage in an infrastructure provider +### 1. Set up persistent storage Creating a persistent volume in Rancher will not create a storage volume. It only creates a Kubernetes resource that maps to an existing volume. Therefore, before you can create a persistent volume as a Kubernetes resource, you must have storage provisioned. -The steps to set up a persistent storage device will differ based on your infrastructure. We provide examples of how to set up storage using [vSphere,](../examples/vsphere) [NFS,](../examples/nfs) or Amazon's [EBS.](../examples/ebs) +The steps to set up a persistent storage device will differ based on your infrastructure. We provide examples of how to set up storage using [vSphere,](../examples/vsphere) [NFS,](../examples/nfs) or Amazon's [EBS.](../examples/ebs) + +If you have a pool of block storage, and you don't want to use a cloud provider, Longhorn could help you provide persistent storage to your Kubernetes cluster. For more information, see [this page.]({{}}/rancher/v2.x/en/longhorn) ### 2. Add a persistent volume that refers to the persistent storage diff --git a/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/provisioning-new-storage/_index.md b/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/provisioning-new-storage/_index.md index 50f33cce160..fef9bfcda05 100644 --- a/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/provisioning-new-storage/_index.md +++ b/content/rancher/v2.x/en/cluster-admin/volumes-and-storage/provisioning-new-storage/_index.md @@ -5,11 +5,15 @@ weight: 2 This section describes how to provision new persistent storage for workloads in Rancher. -> This section assumes that you understand the Kubernetes concepts of storage classes and persistent volume claims. For more information, refer to the section on [how storage works.](../how-storage-works) +This section assumes that you understand the Kubernetes concepts of storage classes and persistent volume claims. For more information, refer to the section on [how storage works.](../how-storage-works) + +New storage is often provisioned by a cloud provider such as Amazon EBS. However, new storage doesn't have to be in the cloud. + +If you have a pool of block storage, and you don't want to use a cloud provider, Longhorn could help you provide persistent storage to your Kubernetes cluster. For more information, see [this page.]({{}}/rancher/v2.x/en/longhorn) To provision new storage for your workloads, follow these steps: -1. [Add a storage class and configure it to use your storage provider.](#1-add-a-storage-class-and-configure-it-to-use-your-storage-provider) +1. [Add a storage class and configure it to use your storage.](#1-add-a-storage-class-and-configure-it-to-use-your-storage) 2. [Add a persistent volume claim that refers to the storage class.](#2-add-a-persistent-volume-claim-that-refers-to-the-storage-class) 3. [Mount the persistent volume claim as a volume for your workload.](#3-mount-the-persistent-volume-claim-as-a-volume-for-your-workload) @@ -36,7 +40,7 @@ hostPath | `host-path` To use a storage provisioner that is not on the above list, you will need to use a [feature flag to enable unsupported storage drivers.]({{}}/rancher/v2.x/en/installation/options/feature-flags/enable-not-default-storage-drivers/) -### 1. Add a storage class and configure it to use your storage provider +### 1. Add a storage class and configure it to use your storage These steps describe how to set up a storage class at the cluster level. diff --git a/content/rancher/v2.x/en/longhorn/_index.md b/content/rancher/v2.x/en/longhorn/_index.md index 348afd30d1d..c2e80598ba2 100644 --- a/content/rancher/v2.x/en/longhorn/_index.md +++ b/content/rancher/v2.x/en/longhorn/_index.md @@ -1,6 +1,61 @@ --- -title: Longhorn Storage +title: Longhorn - Cloud native distributed block storage for Kubernetes +shortTitle: Longhorn Storage weight: 19 --- -> This page is under construction. \ No newline at end of file +[Longhorn](https://longhorn.io/) is a lightweight, reliable and easy-to-use distributed block storage system for Kubernetes. + +Longhorn is free, open source software. Originally developed by Rancher Labs, it is now being developed as a sandbox project of the Cloud Native Computing Foundation. It can be installed on any Kubernetes cluster with Helm, with kubectl, or with the Rancher UI. + +With Longhorn, you can: + +- Use Longhorn volumes as persistent storage for the distributed stateful applications in your Kubernetes cluster +- Partition your block storage into Longhorn volumes so that you can use Kubernetes volumes with or without a cloud provider +- Replicate block storage across multiple nodes and data centers to increase availability +- Store backup data in external storage such as NFS or AWS S3 +- Create cross-cluster disaster recovery volumes so that data from a primary Kubernetes cluster can be quickly recovered from backup in a second Kubernetes cluster +- Schedule recurring snapshots of a volume, and schedule recurring backups to NFS or S3-compatible secondary storage +- Restore volumes from backup +- Upgrade Longhorn without disrupting persistent volumes +- Manipulate Longhorn resources with kubectl + +### New in Rancher v2.5 + +Prior to Rancher v2.5, Longhorn could be installed as a Rancher catalog app. In Rancher v2.5, the catalog system was replaced by the **Apps & Marketplace,** and it became possible to install Longhorn as an app from that page. The **Cluster Explorer** now allows you to manipulate Longhorn's Kubernetes resources from the Rancher UI. So now you can control the Longhorn functionality with the Longhorn UI, or with kubectl, or by manipulating Longhorn's Kubernetes custom resources in the Rancher UI. + +These instructions assume you are using Rancher v2.5, but Longhorn can be installed with earlier Rancher versions. For documentation about installing Longhorn as a catalog app using the legacy Rancher UI, refer to the [Longhorn documentation.](https://longhorn.io/docs/1.0.2/deploy/install/install-with-rancher/) + +### Installing Longhorn with Rancher + +1. Go to the **Cluster Explorer** in the Rancher UI. +1. Click **Apps.** +1. Click `longhorn`. +1. Optional: To customize the initial settings, click **Longhorn Default Settings** and edit the configuration. For help customizing the settings, refer to the [Longhorn documentation.](https://longhorn.io/docs/1.0.2/references/settings/) +1. Click **Install.** + +**Result:** Longhorn is deployed in the Kubernetes cluster. + +### Accessing Longhorn from the Rancher UI + +1. From the **Cluster Explorer," go to the top left dropdown menu and click **Cluster Explorer > Longhorn.** +1. On this page, you can edit Kubernetes resources managed by Longhorn. To view the Longhorn UI, click the **Longhorn** button in the **Overview**section. + +**Result:** You will be taken to the Longhorn UI, where you can manage your Longhorn volumes and their replicas in the Kubernetes cluster, as well as secondary backups of your Longhorn storage that may exist in another Kubernetes cluster or in S3. + +### Uninstalling Longhorn from the Rancher UI + +1. Click **Cluster Explorer > Apps & Marketplace.** +1. Click **Installed Apps.** +1. Go to the `longhorn-system` namespace and check the boxes next to the `longhorn` and `longhorn-crd` apps. +1. Click **Delete,** and confirm **Delete.** + +**Result:** Longhorn is uninstalled. + +### GitHub Repository + +The Longhorn project is available [here.](https://github.com/longhorn/longhorn) + +### Documentation + +The Longhorn documentation is [here.](https://longhorn.io/docs/) \ No newline at end of file diff --git a/static/img/rancher/longhorn-logo.png b/static/img/rancher/longhorn-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5112fc6795fca81823fc04b23f38eb78752e718 GIT binary patch literal 23002 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