From a014444007e48a6139908414d5aec526929d20ec Mon Sep 17 00:00:00 2001 From: actions Date: Fri, 25 Sep 2020 21:27:40 +0000 Subject: [PATCH] Generated changes --- assets/index.yaml | 92 ++++- assets/longhorn/longhorn-1.0.200.tgz | Bin 0 -> 11770 bytes assets/longhorn/longhorn-crd-1.0.200.tgz | Bin 0 -> 923 bytes .../rancher-backup/rancher-backup-0.1.0.tgz | Bin 0 -> 4510 bytes .../rancher-backup-crd-0.1.0.tgz | Bin 0 -> 1717 bytes charts/longhorn/Chart.yaml | 34 ++ charts/longhorn/README.md | 49 +++ charts/longhorn/app-readme.md | 11 + charts/longhorn/charts-crd/Chart.yaml | 10 + charts/longhorn/charts-crd/README.md | 2 + .../longhorn/charts-crd/templates/crds.yaml | 172 +++++++++ charts/longhorn/questions.yml | 346 ++++++++++++++++++ charts/longhorn/templates/NOTES.txt | 5 + charts/longhorn/templates/_helpers.tpl | 47 +++ charts/longhorn/templates/clusterrole.yaml | 40 ++ .../templates/clusterrolebinding.yaml | 13 + charts/longhorn/templates/daemonset-sa.yaml | 112 ++++++ .../longhorn/templates/default-setting.yaml | 28 ++ .../longhorn/templates/deployment-driver.yaml | 84 +++++ charts/longhorn/templates/deployment-ui.yaml | 61 +++ charts/longhorn/templates/ingress.yaml | 30 ++ .../longhorn/templates/postupgrade-job.yaml | 35 ++ charts/longhorn/templates/psp.yaml | 66 ++++ charts/longhorn/templates/registry-secret.yml | 10 + charts/longhorn/templates/serviceaccount.yaml | 6 + charts/longhorn/templates/storageclass.yaml | 14 + charts/longhorn/templates/tls-secrets.yaml | 15 + charts/longhorn/templates/uninstall-job.yaml | 36 ++ charts/longhorn/templates/userroles.yaml | 35 ++ .../templates/validate-install-crd.yaml | 14 + charts/longhorn/values.yaml | 136 +++++++ charts/rancher-backup/Chart.yaml | 16 + charts/rancher-backup/README.md | 69 ++++ charts/rancher-backup/charts-crd/Chart.yaml | 10 + charts/rancher-backup/charts-crd/README.md | 2 + .../charts-crd/templates/backup.yaml | 119 ++++++ .../charts-crd/templates/resourceset.yaml | 94 +++++ .../charts-crd/templates/restore.yaml | 102 ++++++ charts/rancher-backup/templates/_helpers.tpl | 76 ++++ .../templates/clusterrolebinding.yaml | 14 + .../rancher-backup/templates/deployment.yaml | 58 +++ charts/rancher-backup/templates/pvc.yaml | 27 ++ .../templates/rancher-resourceset.yaml | 54 +++ .../rancher-backup/templates/s3-secret.yaml | 31 ++ .../templates/serviceaccount.yaml | 7 + .../templates/validate-install-crd.yaml | 16 + charts/rancher-backup/values.yaml | 49 +++ index.yaml | 92 ++++- sha256sum/longhorn/longhorn.sum | 3 + sha256sum/rancher-backup/rancher-backup.sum | 14 + 50 files changed, 2354 insertions(+), 2 deletions(-) create mode 100644 assets/longhorn/longhorn-1.0.200.tgz create mode 100644 assets/longhorn/longhorn-crd-1.0.200.tgz create mode 100644 assets/rancher-backup/rancher-backup-0.1.0.tgz create mode 100644 assets/rancher-backup/rancher-backup-crd-0.1.0.tgz create mode 100644 charts/longhorn/Chart.yaml create mode 100644 charts/longhorn/README.md create mode 100644 charts/longhorn/app-readme.md create mode 100644 charts/longhorn/charts-crd/Chart.yaml create mode 100644 charts/longhorn/charts-crd/README.md create mode 100644 charts/longhorn/charts-crd/templates/crds.yaml create mode 100644 charts/longhorn/questions.yml create mode 100644 charts/longhorn/templates/NOTES.txt create mode 100644 charts/longhorn/templates/_helpers.tpl create mode 100644 charts/longhorn/templates/clusterrole.yaml create mode 100644 charts/longhorn/templates/clusterrolebinding.yaml create mode 100644 charts/longhorn/templates/daemonset-sa.yaml create mode 100644 charts/longhorn/templates/default-setting.yaml create mode 100644 charts/longhorn/templates/deployment-driver.yaml create mode 100644 charts/longhorn/templates/deployment-ui.yaml create mode 100644 charts/longhorn/templates/ingress.yaml create mode 100644 charts/longhorn/templates/postupgrade-job.yaml create mode 100644 charts/longhorn/templates/psp.yaml create mode 100644 charts/longhorn/templates/registry-secret.yml create mode 100644 charts/longhorn/templates/serviceaccount.yaml create mode 100644 charts/longhorn/templates/storageclass.yaml create mode 100644 charts/longhorn/templates/tls-secrets.yaml create mode 100644 charts/longhorn/templates/uninstall-job.yaml create mode 100644 charts/longhorn/templates/userroles.yaml create mode 100644 charts/longhorn/templates/validate-install-crd.yaml create mode 100644 charts/longhorn/values.yaml create mode 100644 charts/rancher-backup/Chart.yaml create mode 100644 charts/rancher-backup/README.md create mode 100644 charts/rancher-backup/charts-crd/Chart.yaml create mode 100644 charts/rancher-backup/charts-crd/README.md create mode 100644 charts/rancher-backup/charts-crd/templates/backup.yaml create mode 100644 charts/rancher-backup/charts-crd/templates/resourceset.yaml create mode 100644 charts/rancher-backup/charts-crd/templates/restore.yaml create mode 100644 charts/rancher-backup/templates/_helpers.tpl create mode 100644 charts/rancher-backup/templates/clusterrolebinding.yaml create mode 100644 charts/rancher-backup/templates/deployment.yaml create mode 100644 charts/rancher-backup/templates/pvc.yaml create mode 100644 charts/rancher-backup/templates/rancher-resourceset.yaml create mode 100644 charts/rancher-backup/templates/s3-secret.yaml create mode 100644 charts/rancher-backup/templates/serviceaccount.yaml create mode 100644 charts/rancher-backup/templates/validate-install-crd.yaml create mode 100644 charts/rancher-backup/values.yaml create mode 100644 sha256sum/longhorn/longhorn.sum create mode 100644 sha256sum/rancher-backup/rancher-backup.sum diff --git a/assets/index.yaml b/assets/index.yaml index 0a3320263..fb774635a 100644 --- a/assets/index.yaml +++ b/assets/index.yaml @@ -470,6 +470,96 @@ entries: urls: - assets/fleet-crd/fleet-crd-0.3.0-alpha600.tgz version: 0.3.0-alpha600 + longhorn: + - annotations: + catalog.cattle.io/auto-install: longhorn-crd=match + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: longhorn-system + catalog.cattle.io/provides-gvr: longhorn.io/v1beta1 + catalog.cattle.io/release-name: longhorn + catalog.cattle.io/ui-component: longhorn + apiVersion: v1 + appVersion: v1.0.2 + created: "2020-09-25T21:27:40.522743781Z" + description: Longhorn is a distributed block storage system for Kubernetes. + digest: ff247454026df41123c130c2971dd51f2458d46bc47b0ec9313a6d7906cd7a53 + home: https://github.com/longhorn/longhorn + icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/longhorn/icon/color/longhorn-icon-color.svg + keywords: + - longhorn + - storage + - distributed + - block + - device + - iscsi + kubeVersion: '>=v1.14.0-r0' + maintainers: + - email: maintainers@longhorn.io + name: Longhorn maintainers + - email: sheng@yasker.org + name: Sheng Yang + name: longhorn + sources: + - https://github.com/longhorn/longhorn + - https://github.com/longhorn/longhorn-engine + - https://github.com/longhorn/longhorn-instance-manager + - https://github.com/longhorn/longhorn-manager + - https://github.com/longhorn/longhorn-ui + - https://github.com/longhorn/longhorn-tests + urls: + - assets/longhorn/longhorn-1.0.200.tgz + version: 1.0.200 + longhorn-crd: + - annotations: + catalog.cattle.io/certified: rancher + catalog.cattle.io/hidden: "true" + catalog.cattle.io/namespace: longhorn-system + catalog.cattle.io/release-name: longhorn-crd + apiVersion: v1 + created: "2020-09-25T21:27:40.522946083Z" + description: Installs the CRDs for longhorn. + digest: 4203577c0310a1877ac18f7e13cfbc475cc25f13e03deb57d9c581bdab4cc48a + name: longhorn-crd + type: application + urls: + - assets/longhorn/longhorn-crd-1.0.200.tgz + version: 1.0.200 + rancher-backup: + - annotations: + catalog.cattle.io/auto-install: rancher-backup-crd=match + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: cattle-resources-system + catalog.cattle.io/provides-gvr: resources.cattle.io.resourceset/v1 + catalog.cattle.io/release-name: rancher-backup + catalog.cattle.io/ui-component: rancher-backup + apiVersion: v1 + appVersion: v0.1.0-rc1 + created: "2020-09-25T21:27:40.524512896Z" + description: Provides ability to back up and restore the Rancher application running + on any Kubernetes cluster + digest: e3a672fd48b68d0228b812e1f336fe62070c7f31798efd562444b840cd2c7819 + keywords: + - applications + - infrastructure + name: rancher-backup + urls: + - assets/rancher-backup/rancher-backup-0.1.0.tgz + version: 0.1.0 + rancher-backup-crd: + - annotations: + catalog.cattle.io/certified: rancher + catalog.cattle.io/hidden: "true" + catalog.cattle.io/namespace: cattle-resources-system + catalog.cattle.io/release-name: rancher-backup-crd + apiVersion: v1 + created: "2020-09-25T21:27:40.5249197Z" + description: Installs the CRDs for rancher-backup. + digest: e47f707d41a668bb01e928fc8412d4d09edabbb47feb4e8ac0ccafbece317aa9 + name: rancher-backup-crd + type: application + urls: + - assets/rancher-backup/rancher-backup-crd-0.1.0.tgz + version: 0.1.0 rancher-cis-benchmark: - annotations: catalog.cattle.io/auto-install: rancher-cis-benchmark-crd=match @@ -1354,4 +1444,4 @@ entries: urls: - assets/rio/rio-0.8.000.tgz version: 0.8.000 -generated: "2020-09-25T20:19:25.602999395Z" +generated: "2020-09-25T21:27:40.521318869Z" diff --git a/assets/longhorn/longhorn-1.0.200.tgz b/assets/longhorn/longhorn-1.0.200.tgz new file mode 100644 index 0000000000000000000000000000000000000000..638f69f793b320db25bfcc20f44bbd3ebada9f1a GIT binary patch literal 11770 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 literal 0 HcmV?d00001 diff --git a/assets/longhorn/longhorn-crd-1.0.200.tgz b/assets/longhorn/longhorn-crd-1.0.200.tgz new file mode 100644 index 0000000000000000000000000000000000000000..646caca0fe3d27a89d856f99b9730dd2108b44a8 GIT binary patch literal 923 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 w*1X^fReXbIdMiyE8s5f`rRDc zVQyr3R8em|NM&qo0PI>{Z`-yO&$B-Tk^9j00+!|2NiGBwx0%xo9lEZtv%VC4ps8b- z3q@)qWyBcv-3N-YElboNCu!2HK6wZ%@%%`hKRoB~NMcTwAp3JnZquYsWH^{CvDDrg z$L!>B$oGB!Vm!|N`@UcP?~gApPllt*(P(_(kA~wDe>lDv`zOeMr1={uRT|3^|G{&W zH}?-A%(>85Q^8fxLx^CFnTR}swPxT^F(4o{T~G)El-r7P*ph}J@Bp1^nZl`a2*)v~ z1QQ65eb|?vL@EiWzFI2{v6D>#1FWEL*tcsa*lQ0b^b<%$1rN|_*b6}sNfVv@e#e!@ zj47m-fF{#xg%(1VK)hZpv|c9=Aet;T$v`_HHQ;12jpM7V$Lq z+iO@*PBXuVLE{i>Yz`6YPS$vow{`NJPxn*;#EisYn6YE_QBtl!P6SJ1dldE2&$C}Y ze8hSgAWvzmQ{^cwB#z*{$h{Gv&1`#*tlKIrDUWK9?CNgT2^2uKKRW;{Cw16&3duVhuGrBZ6D4sL%g@ z`NlKjU%x(`0uI-wufBLOD21cqQfC>TYn71{X%Zlp30US#(+FAPDhMuNsl;q+L_LHQ z5e9m~Ql+yPq|*5o*P__<2k6hgdI+sBqhTft`%)ypuRgx}G@6km#MnMWD3KyD5pIK# z;pEo2A=el~z=>REfo3B3f<`kS(&}-49720B$qYbZk%c77f{5T6Q%-r5J>3DDHwzk- z;7U^7QOTS-FQZ^=Xfj1wpj1H?D(5?$bedlSw*pDIE>9m*PUAEV(9nrz4uB|A?T!># zLYT7VolKUBQ6%G75rb&e~f3ebx;F%3D5mik3y;7ns4Vi_VL zjqc`|(Wn6V$VdM*e_cgZI?~EZ;wfWz&LBW0u`0c+Gt3NkRDIS0*9K{5o|0R)akcJr zLqtMotOT=qhj|c~O)~F`2s}&#ty=HF0F$eGLo5UfLEf94a%CI0?#k}lTG zXmcSLVD20vA#zw|$JN-^V*Wc2?evMtD+zz3R6FJHrUyOjIw4NCu%A5O=at~Y#i>kY*&>ds+LX6704BYKLH2n zj57@(xH&-82evehv8)_BHRBx$DLq;hYW(f5yi%}v=*s35cB=*ThpnuK5BxNGora-Pb))Bp4`ACA-f56gzEbEv8zfCn5rf|*T!a7 zT;64j3`kbdJ+V@Z!8$}$lOwidEG?B=U1E~2VhR!5B?qmZ;W;p;>^d!|IpvM9Cd;>X zi3Fuwd9f20_pm$v8$(W+xnB)I-&|?amj7!Z;h_z{mi+(x?0j7A|DBy*9P|IDps$+$8{>K0 z2B0<5S%#N6fSt>Bj{1e?t(`ZE^kcP)mt&bXtw{fp#@p1Ys$5TH>iafZZ~NNod?ytG z1A9FxQauAB@Jc9(@m=1f@;l#=b?*e$E-jHMuZ-?+7wNjVKlYT4J*5gAdrFnO&JhC| zP!4S=&77AW$EMODyx(yu>Ae^@ch{Sc@p}M>$B%8G_?;ASz@V?USe$$fYPVbse%yA*XZ*;#Fv*#trHat z1`*ZEbnX!m5Aq>{5LW#RR1LHQ7{u7r6oUklTO5HJ>_ffsj!u81BOU2TUx)q<00960 LXyT6q05$*s5#~ca literal 0 HcmV?d00001 diff --git a/charts/longhorn/Chart.yaml b/charts/longhorn/Chart.yaml new file mode 100644 index 000000000..bad89496e --- /dev/null +++ b/charts/longhorn/Chart.yaml @@ -0,0 +1,34 @@ +apiVersion: v1 +name: longhorn +version: 1.0.200 +appVersion: v1.0.2 +kubeVersion: ">=v1.14.0-r0" +description: Longhorn is a distributed block storage system for Kubernetes. +keywords: +- longhorn +- storage +- distributed +- block +- device +- iscsi +home: https://github.com/longhorn/longhorn +sources: +- https://github.com/longhorn/longhorn +- https://github.com/longhorn/longhorn-engine +- https://github.com/longhorn/longhorn-instance-manager +- https://github.com/longhorn/longhorn-manager +- https://github.com/longhorn/longhorn-ui +- https://github.com/longhorn/longhorn-tests +maintainers: +- name: Longhorn maintainers + email: maintainers@longhorn.io +- name: Sheng Yang + email: sheng@yasker.org +icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/longhorn/icon/color/longhorn-icon-color.svg +annotations: + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: longhorn-system + catalog.cattle.io/release-name: longhorn + catalog.cattle.io/ui-component: longhorn + catalog.cattle.io/provides-gvr: longhorn.io/v1beta1 + catalog.cattle.io/auto-install: longhorn-crd=match diff --git a/charts/longhorn/README.md b/charts/longhorn/README.md new file mode 100644 index 000000000..068bb5d66 --- /dev/null +++ b/charts/longhorn/README.md @@ -0,0 +1,49 @@ +# Rancher Longhorn Chart + +> **Important**: Please install Longhorn chart in `longhorn-system` namespace only. + +> **Warning**: Longhorn doesn't support downgrading from a higher version to a lower version. + +The following document pertains to running Longhorn from the Rancher 2.0 chart. + +## Source Code + +Longhorn is 100% open source software. Project source code is spread across a number of repos: + +1. Longhorn Engine -- Core controller/replica logic https://github.com/longhorn/longhorn-engine +2. Longhorn Instance Manager -- Controller/replica instance lifecycle management https://github.com/longhorn/longhorn-instance-manager +3. Longhorn Manager -- Longhorn orchestration, includes CSI driver for Kubernetes https://github.com/longhorn/longhorn-manager +4. Longhorn UI -- Dashboard https://github.com/longhorn/longhorn-ui + +## Prerequisites + +1. Rancher v2.1+ +2. Docker v1.13+ +3. Kubernetes v1.14+ +4. Make sure `curl`, `findmnt`, `grep`, `awk` and `blkid` has been installed in all nodes of the Kubernetes cluster. +5. Make sure `open-iscsi` has been installed in all nodes of the Kubernetes cluster. For GKE, recommended Ubuntu as guest OS image since it contains `open-iscsi` already. + +## Uninstallation + +1. To prevent damage to the Kubernetes cluster, we recommend deleting all Kubernetes workloads using Longhorn volumes (PersistentVolume, PersistentVolumeClaim, StorageClass, Deployment, StatefulSet, DaemonSet, etc). + +2. From Rancher UI, navigate to `Catalog Apps` tab and delete Longhorn app. + +## Troubleshooting + +### I deleted the Longhorn App from Rancher UI instead of following the uninstallation procedure + +Redeploy the (same version) Longhorn App. Follow the uninstallation procedure above. + +### Problems with CRDs + +If your CRD instances or the CRDs themselves can't be deleted for whatever reason, run the commands below to clean up. Caution: this will wipe all Longhorn state! + +``` +# Delete CRD instances and definitions +curl -s https://raw.githubusercontent.com/longhorn/longhorn/v0.8.1/scripts/cleanup.sh |bash -s v062 +curl -s https://raw.githubusercontent.com/longhorn/longhorn/v0.8.1/scripts/cleanup.sh |bash -s v070 +``` + +--- +Please see [link](https://github.com/longhorn/longhorn) for more information. diff --git a/charts/longhorn/app-readme.md b/charts/longhorn/app-readme.md new file mode 100644 index 000000000..cb23135ca --- /dev/null +++ b/charts/longhorn/app-readme.md @@ -0,0 +1,11 @@ +# Longhorn + +Longhorn is a lightweight, reliable and easy to use distributed block storage system for Kubernetes. Once deployed, users can leverage persistent volumes provided by Longhorn. + +Longhorn creates a dedicated storage controller for each volume and synchronously replicates the volume across multiple replicas stored on multiple nodes. The storage controller and replicas are themselves orchestrated using Kubernetes. Longhorn supports snapshots, backups and even allows you to schedule recurring snapshots and backups! + +**Important**: Please install Longhorn chart in `longhorn-system` namespace only. + +**Warning**: Longhorn doesn't support downgrading from a higher version to a lower version. + +[Chart Documentation](https://github.com/longhorn/longhorn/blob/master/chart/README.md) diff --git a/charts/longhorn/charts-crd/Chart.yaml b/charts/longhorn/charts-crd/Chart.yaml new file mode 100644 index 000000000..2b70ce82f --- /dev/null +++ b/charts/longhorn/charts-crd/Chart.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +version: 1.0.200 +description: Installs the CRDs for longhorn. +name: longhorn-crd +type: application +annotations: + catalog.cattle.io/hidden: "true" + catalog.cattle.io/release-name: longhorn-crd + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: longhorn-system diff --git a/charts/longhorn/charts-crd/README.md b/charts/longhorn/charts-crd/README.md new file mode 100644 index 000000000..3db83649d --- /dev/null +++ b/charts/longhorn/charts-crd/README.md @@ -0,0 +1,2 @@ +# longhorn-crd +A Rancher chart that installs the CRDs used by [longhorn](https://github.com/rancher/dev-charts/tree/master/packages/longhorn). diff --git a/charts/longhorn/charts-crd/templates/crds.yaml b/charts/longhorn/charts-crd/templates/crds.yaml new file mode 100644 index 000000000..e63cf8c72 --- /dev/null +++ b/charts/longhorn/charts-crd/templates/crds.yaml @@ -0,0 +1,172 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: longhorn + helm.sh/chart: longhorn-1.0.2 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: longhorn + app.kubernetes.io/version: v1.0.2 + longhorn-manager: Engine + name: engines.longhorn.io +spec: + group: longhorn.io + names: + kind: Engine + listKind: EngineList + plural: engines + shortNames: + - lhe + singular: engine + scope: Namespaced + version: v1beta1 + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: longhorn + helm.sh/chart: longhorn-1.0.2 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: longhorn + app.kubernetes.io/version: v1.0.2 + longhorn-manager: Replica + name: replicas.longhorn.io +spec: + group: longhorn.io + names: + kind: Replica + listKind: ReplicaList + plural: replicas + shortNames: + - lhr + singular: replica + scope: Namespaced + version: v1beta1 + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: longhorn + helm.sh/chart: longhorn-1.0.2 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: longhorn + app.kubernetes.io/version: v1.0.2 + longhorn-manager: Setting + name: settings.longhorn.io +spec: + group: longhorn.io + names: + kind: Setting + listKind: SettingList + plural: settings + shortNames: + - lhs + singular: setting + scope: Namespaced + version: v1beta1 +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: longhorn + helm.sh/chart: longhorn-1.0.2 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: longhorn + app.kubernetes.io/version: v1.0.2 + longhorn-manager: Volume + name: volumes.longhorn.io +spec: + group: longhorn.io + names: + kind: Volume + listKind: VolumeList + plural: volumes + shortNames: + - lhv + singular: volume + scope: Namespaced + version: v1beta1 + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: longhorn + helm.sh/chart: longhorn-1.0.2 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: longhorn + app.kubernetes.io/version: v1.0.2 + longhorn-manager: EngineImage + name: engineimages.longhorn.io +spec: + group: longhorn.io + names: + kind: EngineImage + listKind: EngineImageList + plural: engineimages + shortNames: + - lhei + singular: engineimage + scope: Namespaced + version: v1beta1 + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: longhorn + helm.sh/chart: longhorn-1.0.2 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: longhorn + app.kubernetes.io/version: v1.0.2 + longhorn-manager: Node + name: nodes.longhorn.io +spec: + group: longhorn.io + names: + kind: Node + listKind: NodeList + plural: nodes + shortNames: + - lhn + singular: node + scope: Namespaced + version: v1beta1 + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: longhorn + helm.sh/chart: longhorn-1.0.2 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: longhorn + app.kubernetes.io/version: v1.0.2 + longhorn-manager: InstanceManager + name: instancemanagers.longhorn.io +spec: + group: longhorn.io + names: + kind: InstanceManager + listKind: InstanceManagerList + plural: instancemanagers + shortNames: + - lhim + singular: instancemanager + scope: Namespaced + version: v1beta1 + subresources: + status: {} diff --git a/charts/longhorn/questions.yml b/charts/longhorn/questions.yml new file mode 100644 index 000000000..26566901f --- /dev/null +++ b/charts/longhorn/questions.yml @@ -0,0 +1,346 @@ +categories: +- storage +namespace: longhorn-system +questions: +- variable: image.defaultImage + default: "true" + description: "Use default Longhorn images" + label: Use Default Images + type: boolean + show_subquestion_if: false + group: "Longhorn Images" + subquestions: + - variable: image.longhorn.manager.repository + default: longhornio/longhorn-manager + description: "Specify Longhorn Manager Image Repository" + type: string + label: Longhorn Manager Image Repository + group: "Longhorn Images Settings" + - variable: image.longhorn.manager.tag + default: v1.0.2 + description: "Specify Longhorn Manager Image Tag" + type: string + label: Longhorn Manager Image Tag + group: "Longhorn Images Settings" + - variable: image.longhorn.engine.repository + default: longhornio/longhorn-engine + description: "Specify Longhorn Engine Image Repository" + type: string + label: Longhorn Engine Image Repository + group: "Longhorn Images Settings" + - variable: image.longhorn.engine.tag + default: v1.0.2 + description: "Specify Longhorn Engine Image Tag" + type: string + label: Longhorn Engine Image Tag + group: "Longhorn Images Settings" + - variable: image.longhorn.ui.repository + default: longhornio/longhorn-ui + description: "Specify Longhorn UI Image Repository" + type: string + label: Longhorn UI Image Repository + group: "Longhorn Images Settings" + - variable: image.longhorn.ui.tag + default: v1.0.2 + description: "Specify Longhorn UI Image Tag" + type: string + label: Longhorn UI Image Tag + group: "Longhorn Images Settings" + - variable: image.longhorn.instanceManager.repository + default: longhornio/longhorn-instance-manager + description: "Specify Longhorn Instance Manager Image Repository" + type: string + label: Longhorn Instance Manager Image Repository + group: "Longhorn Images Settings" + - variable: image.longhorn.instanceManager.tag + default: v1_20200514 + description: "Specify Longhorn Instance Manager Image Tag" + type: string + label: Longhorn Instance Manager Image Tag + group: "Longhorn Images Settings" + - variable: image.csi.attacher.repository + default: longhornio/csi-attacher + description: "Specify CSI attacher image repository. Leave blank to autodetect." + type: string + label: Longhorn CSI Attacher Image Repository + group: "Longhorn CSI Driver Images" + - variable: image.csi.attacher.tag + default: v2.0.0 + description: "Specify CSI attacher image tag. Leave blank to autodetect." + type: string + label: Longhorn CSI Attacher Image Tag + group: "Longhorn CSI Driver Images" + - variable: image.csi.provisioner.repository + default: longhornio/csi-provisioner + description: "Specify CSI provisioner image repository. Leave blank to autodetect." + type: string + label: Longhorn CSI Provisioner Image Repository + group: "Longhorn CSI Driver Images" + - variable: image.csi.provisioner.tag + default: v1.4.0 + description: "Specify CSI provisioner image tag. Leave blank to autodetect." + type: string + label: Longhorn CSI Provisioner Image Tag + group: "Longhorn CSI Driver Images" + - variable: image.csi.nodeDriverRegistrar.repository + default: longhornio/csi-node-driver-registrar + description: "Specify CSI Node Driver Registrar image repository. Leave blank to autodetect." + type: string + label: Longhorn CSI Node Driver Registrar Image Repository + group: "Longhorn CSI Driver Images" + - variable: image.csi.nodeDriverRegistrar.tag + default: v1.2.0 + description: "Specify CSI Node Driver Registrar image tag. Leave blank to autodetect." + type: string + label: Longhorn CSI Node Driver Registrar Image Tag + group: "Longhorn CSI Driver Images" + - variable: image.csi.resizer.repository + default: longhornio/csi-resizer + description: "Specify CSI Driver Resizer image repository. Leave blank to autodetect." + type: string + label: Longhorn CSI Driver Resizer Image Repository + group: "Longhorn CSI Driver Images" + - variable: image.csi.resizer.tag + default: v0.3.0 + description: "Specify CSI Driver Resizer image tag. Leave blank to autodetect." + type: string + label: Longhorn CSI Driver Resizer Image Tag + group: "Longhorn CSI Driver Images" +- variable: privateRegistry.registryUrl + label: Private registry URL + description: "URL of private registry" + group: "Private Registry Settings" + type: string + default: "" +- variable: privateRegistry.registryUser + label: Private registry user + description: "User used to authenticate to private registry" + group: "Private Registry Settings" + type: string + default: "" +- variable: privateRegistry.registryPasswd + label: Private registry password + description: "Password used to authenticate to private registry" + group: "Private Registry Settings" + type: password + default: "" +- variable: longhorn.default_setting + default: "false" + description: "Customize the default settings before installing Longhorn for the first time. This option will only work if the cluster hasn't installed Longhorn." + label: "Customize Default Settings" + type: boolean + show_subquestion_if: true + group: "Longhorn Default Settings" + subquestions: + - variable: defaultSettings.registrySecret + label: Private registry secret + description: "The Kubernetes Secret name" + group: "Longhorn Default Settings" + type: string + default: "" + - variable: csi.kubeletRootDir + default: + description: "Specify kubelet root-dir. Leave blank to autodetect." + type: string + label: Kubelet Root Directory + group: "Longhorn CSI Driver Settings" + - variable: csi.attacherReplicaCount + type: int + default: + min: 1 + max: 10 + description: "Specify replica count of CSI Attacher. By default 3." + label: Longhorn CSI Attacher replica count + group: "Longhorn CSI Driver Settings" + - variable: csi.provisionerReplicaCount + type: int + default: + min: 1 + max: 10 + description: "Specify replica count of CSI Provisioner. By default 3." + label: Longhorn CSI Provisioner replica count + group: "Longhorn CSI Driver Settings" + - variable: persistence.defaultClass + default: "true" + description: "Set as default StorageClass" + group: "Longhorn CSI Driver Settings" + type: boolean + required: true + label: Default Storage Class + - variable: persistence.defaultClassReplicaCount + description: "Set replica count for default StorageClass" + group: "Longhorn CSI Driver Settings" + type: int + default: 3 + min: 1 + max: 10 + label: Default Storage Class Replica Count + - variable: defaultSettings.backupTarget + label: Backup Target + description: "The endpoint used to access the backupstore. NFS and S3 are supported." + group: "Longhorn Default Settings" + type: string + default: + - variable: defaultSettings.backupTargetCredentialSecret + label: Backup Target Credential Secret + description: "The name of the Kubernetes secret associated with the backup target." + group: "Longhorn Default Settings" + type: string + default: + - variable: defaultSettings.createDefaultDiskLabeledNodes + label: Create Default Disk on Labeled Nodes + description: 'Create default Disk automatically only on Nodes with the label "node.longhorn.io/create-default-disk=true" if no other disks exist. If disabled, the default disk will be created on all new nodes when each node is first added.' + group: "Longhorn Default Settings" + type: boolean + default: "false" + - variable: defaultSettings.defaultDataPath + label: Default Data Path + description: 'Default path to use for storing data on a host. By default "/var/lib/longhorn/"' + group: "Longhorn Default Settings" + type: string + default: "/var/lib/longhorn/" + - variable: defaultSettings.replicaSoftAntiAffinity + label: Replica Node Level Soft Anti-Affinity + description: 'Allow scheduling on nodes with existing healthy replicas of the same volume. By default false.' + group: "Longhorn Default Settings" + type: boolean + default: "false" + - variable: defaultSettings.storageOverProvisioningPercentage + label: Storage Over Provisioning Percentage + description: "The over-provisioning percentage defines how much storage can be allocated relative to the hard drive's capacity. By default 200." + group: "Longhorn Default Settings" + type: int + min: 0 + default: 200 + - variable: defaultSettings.storageMinimalAvailablePercentage + label: Storage Minimal Available Percentage + description: "If the minimum available disk capacity exceeds the actual percentage of available disk capacity, the disk becomes unschedulable until more space is freed up. By default 25." + group: "Longhorn Default Settings" + type: int + min: 0 + max: 100 + default: 25 + - variable: defaultSettings.upgradeChecker + label: Enable Upgrade Checker + description: 'Upgrade Checker will check for new Longhorn version periodically. When there is a new version available, a notification will appear in the UI. By default true.' + group: "Longhorn Default Settings" + type: boolean + default: "true" + - variable: defaultSettings.defaultReplicaCount + label: Default Replica Count + description: "The default number of replicas when a volume is created from the Longhorn UI. For Kubernetes configuration, update the `numberOfReplicas` in the StorageClass. By default 3." + group: "Longhorn Default Settings" + type: int + min: 1 + max: 20 + default: 3 + - variable: defaultSettings.guaranteedEngineCPU + label: Guaranteed Engine CPU + description: 'Allow Longhorn Instance Managers to have guaranteed CPU allocation. The value is how many CPUs should be reserved for each Engine/Replica Instance Manager Pod created by Longhorn. For example, 0.1 means one-tenth of a CPU. This will help maintain engine stability during high node workload. It only applies to the Engine/Replica Manager Pods created after the setting took effect. +WARNING: After this setting is changed, all the instance managers on all the nodes will be automatically restarted. +WARNING: DO NOT CHANGE THIS SETTING WITH ATTACHED VOLUMES. +By default 0.25.' + group: "Longhorn Default Settings" + type: float + default: 0.25 + - variable: defaultSettings.defaultLonghornStaticStorageClass + label: Default Longhorn Static StorageClass Name + description: "The 'storageClassName' is given to PVs and PVCs that are created for an existing Longhorn volume. The StorageClass name can also be used as a label, so it is possible to use a Longhorn StorageClass to bind a workload to an existing PV without creating a Kubernetes StorageClass object. By default 'longhorn-static'." + group: "Longhorn Default Settings" + type: string + default: "longhorn-static" + - variable: defaultSettings.backupstorePollInterval + label: Backupstore Poll Interval + description: "In seconds. The backupstore poll interval determines how often Longhorn checks the backupstore for new backups. Set to 0 to disable the polling. By default 300." + group: "Longhorn Default Settings" + type: int + min: 0 + default: 300 + - variable: defaultSettings.taintToleration + label: Kubernetes Taint Toleration + description: 'To dedicate nodes to store Longhorn replicas and reject other general workloads, set tolerations for Longhorn and add taints for the storage nodes. All Longhorn volumes should be detached before modifying toleration settings. We recommend setting tolerations during Longhorn deployment because the Longhorn system cannot be operated during the update. Multiple tolerations can be set here, and these tolerations are separated by semicolon. For example, `key1=value1:NoSchedule; key2:NoExecute`. Because `kubernetes.io` is used as the key of all Kubernetes default tolerations, it should not be used in the toleration settings. +WARNING: DO NOT CHANGE THIS SETTING WITH ATTACHED VOLUMES.' + group: "Longhorn Default Settings" + type: string + default: "" + - variable: defaultSettings.priorityClass + label: Priority Class + description: "The name of the Priority Class to set on the Longhorn workloads. This can help prevent Longhorn workloads from being evicted under Node Pressure. WARNING: DO NOT CHANGE THIS SETTING WITH ATTACHED VOLUMES." + group: "Longhorn Default Settings" + type: string + default: "" + - variable: defaultSettings.autoSalvage + label: Automatic salvage + description: "If enabled, volumes will be automatically salvaged when all the replicas become faulty e.g. due to network disconnection. Longhorn will try to figure out which replica(s) are usable, then use them for the volume. By default true." + group: "Longhorn Default Settings" + type: boolean + default: "true" + - variable: defaultSettings.disableSchedulingOnCordonedNode + label: Disable Scheduling On Cordoned Node + description: "Disable Longhorn manager to schedule replica on Kubernetes cordoned node. By default true." + group: "Longhorn Default Settings" + type: boolean + default: "true" + - variable: defaultSettings.replicaZoneSoftAntiAffinity + label: Replica Zone Level Soft Anti-Affinity + description: "Allow scheduling new Replicas of Volume to the Nodes in the same Zone as existing healthy Replicas. Nodes don't belong to any Zone will be treated as in the same Zone. By default true." + group: "Longhorn Default Settings" + type: boolean + default: "true" + - variable: defaultSettings.volumeAttachmentRecoveryPolicy + label: Volume Attachment Recovery Policy + description: "Defines the Longhorn action when a Volume is stuck with a Deployment Pod on a failed node. `wait` leads to the deletion of the volume attachment as soon as the pods deletion time has passed. `never` is the default Kubernetes behavior of never deleting volume attachments on terminating pods. `immediate` leads to the deletion of the volume attachment as soon as all workload pods are pending. By default wait." + group: "Longhorn Default Settings" + type: enum + options: + - "wait" + - "never" + - "immediate" + default: "wait" + - variable: defaultSettings.mkfsExt4Parameters + label: Custom mkfs.ext4 parameters + description: "Allows setting additional filesystem creation parameters for ext4. For older host kernels it might be necessary to disable the optional ext4 metadata_csum feature by specifying `-O ^64bit,^metadata_csum`." + group: "Longhorn Default Settings" + type: string +- variable: ingress.enabled + default: "false" + description: "Expose app using Layer 7 Load Balancer - ingress" + type: boolean + group: "Services and Load Balancing" + label: Expose app using Layer 7 Load Balancer + show_subquestion_if: true + subquestions: + - variable: ingress.host + default: "xip.io" + description: "layer 7 Load Balancer hostname" + type: hostname + required: true + label: Layer 7 Load Balancer Hostname +- variable: service.ui.type + default: "Rancher-Proxy" + description: "Define Longhorn UI service type" + type: enum + options: + - "ClusterIP" + - "NodePort" + - "LoadBalancer" + - "Rancher-Proxy" + label: Longhorn UI Service + show_if: "ingress.enabled=false" + group: "Services and Load Balancing" + show_subquestion_if: "NodePort" + subquestions: + - variable: service.ui.nodePort + default: "" + description: "NodePort port number(to set explicitly, choose port between 30000-32767)" + type: int + min: 30000 + max: 32767 + show_if: "service.ui.type=NodePort||service.ui.type=LoadBalancer" + label: UI Service NodePort number +- variable: enablePSP + default: "true" + description: "Setup a pod security policy for Longhorn workloads." + label: Pod Security Policy + type: boolean + group: "Other Settings" \ No newline at end of file diff --git a/charts/longhorn/templates/NOTES.txt b/charts/longhorn/templates/NOTES.txt new file mode 100644 index 000000000..cca7cd77b --- /dev/null +++ b/charts/longhorn/templates/NOTES.txt @@ -0,0 +1,5 @@ +Longhorn is now installed on the cluster! + +Please wait a few minutes for other Longhorn components such as CSI deployments, Engine Images, and Instance Managers to be initialized. + +Visit our documentation at https://longhorn.io/docs/ diff --git a/charts/longhorn/templates/_helpers.tpl b/charts/longhorn/templates/_helpers.tpl new file mode 100644 index 000000000..5cac51cfa --- /dev/null +++ b/charts/longhorn/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "longhorn.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "longhorn.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + + +{{- define "longhorn.managerIP" -}} +{{- $fullname := (include "longhorn.fullname" .) -}} +{{- printf "http://%s-backend:9500" $fullname | trunc 63 | trimSuffix "-" -}} +{{- end -}} + + +{{- define "secret" }} +{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.privateRegistry.registryUrl (printf "%s:%s" .Values.privateRegistry.registryUser .Values.privateRegistry.registryPasswd | b64enc) | b64enc }} +{{- end }} + +{{- /* +longhorn.labels generates the standard Helm labels. +*/ -}} +{{- define "longhorn.labels" -}} +app.kubernetes.io/name: {{ template "longhorn.name" . }} +helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +app.kubernetes.io/instance: {{ .Release.Name }} +app.kubernetes.io/version: {{ .Chart.AppVersion }} +{{- end -}} + + +{{- define "system_default_registry" -}} +{{- if .Values.global.cattle.systemDefaultRegistry -}} +{{- printf "%s/" .Values.global.cattle.systemDefaultRegistry -}} +{{- else -}} +{{- "" -}} +{{- end -}} +{{- end -}} diff --git a/charts/longhorn/templates/clusterrole.yaml b/charts/longhorn/templates/clusterrole.yaml new file mode 100644 index 000000000..491c3e6a5 --- /dev/null +++ b/charts/longhorn/templates/clusterrole.yaml @@ -0,0 +1,40 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: longhorn-role + labels: {{- include "longhorn.labels" . | nindent 4 }} +rules: +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - "*" +- apiGroups: [""] + resources: ["pods", "events", "persistentvolumes", "persistentvolumeclaims","persistentvolumeclaims/status", "nodes", "proxy/nodes", "pods/log", "secrets", "services", "endpoints", "configmaps"] + verbs: ["*"] +- apiGroups: [""] + resources: ["namespaces"] + verbs: ["get", "list"] +- apiGroups: ["apps"] + resources: ["daemonsets", "statefulsets", "deployments"] + verbs: ["*"] +- apiGroups: ["batch"] + resources: ["jobs", "cronjobs"] + verbs: ["*"] +- apiGroups: ["scheduling.k8s.io"] + resources: ["priorityclasses"] + verbs: ["watch", "list"] +- apiGroups: ["storage.k8s.io"] + resources: ["storageclasses", "volumeattachments", "csinodes", "csidrivers"] + verbs: ["*"] +- apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create"] +- apiGroups: ["longhorn.io"] + resources: ["volumes", "volumes/status", "engines", "engines/status", "replicas", "replicas/status", "settings", + "engineimages", "engineimages/status", "nodes", "nodes/status", "instancemanagers", "instancemanagers/status"] + verbs: ["*"] +- apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["*"] diff --git a/charts/longhorn/templates/clusterrolebinding.yaml b/charts/longhorn/templates/clusterrolebinding.yaml new file mode 100644 index 000000000..30c7fa78c --- /dev/null +++ b/charts/longhorn/templates/clusterrolebinding.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: longhorn-bind + labels: {{- include "longhorn.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: longhorn-role +subjects: +- kind: ServiceAccount + name: longhorn-service-account + namespace: {{ .Release.Namespace }} diff --git a/charts/longhorn/templates/daemonset-sa.yaml b/charts/longhorn/templates/daemonset-sa.yaml new file mode 100644 index 000000000..1717aa4d9 --- /dev/null +++ b/charts/longhorn/templates/daemonset-sa.yaml @@ -0,0 +1,112 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + labels: {{- include "longhorn.labels" . | nindent 4 }} + app: longhorn-manager + name: longhorn-manager + namespace: {{ .Release.Namespace }} +spec: + selector: + matchLabels: + app: longhorn-manager + template: + metadata: + labels: {{- include "longhorn.labels" . | nindent 8 }} + app: longhorn-manager + spec: + containers: + - name: longhorn-manager + image: {{ template "system_default_registry" . }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }} + imagePullPolicy: IfNotPresent + securityContext: + privileged: true + command: + - longhorn-manager + - -d + - daemon + - --engine-image + - "{{ template "system_default_registry" . }}{{ .Values.image.longhorn.engine.repository }}:{{ .Values.image.longhorn.engine.tag }}" + - --instance-manager-image + - "{{ template "system_default_registry" . }}{{ .Values.image.longhorn.instanceManager.repository }}:{{ .Values.image.longhorn.instanceManager.tag }}" + - --manager-image + - "{{ template "system_default_registry" . }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }}" + - --service-account + - longhorn-service-account + ports: + - containerPort: 9500 + name: manager + readinessProbe: + tcpSocket: + port: 9500 + volumeMounts: + - name: dev + mountPath: /host/dev/ + - name: proc + mountPath: /host/proc/ + - name: varrun + mountPath: /var/run/ + mountPropagation: Bidirectional + - name: longhorn + mountPath: /var/lib/longhorn/ + mountPropagation: Bidirectional + - name: longhorn-default-setting + mountPath: /var/lib/longhorn-setting/ + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: DEFAULT_SETTING_PATH + value: /var/lib/longhorn-setting/default-setting.yaml + volumes: + - name: dev + hostPath: + path: /dev/ + - name: proc + hostPath: + path: /proc/ + - name: varrun + hostPath: + path: /var/run/ + - name: longhorn + hostPath: + path: /var/lib/longhorn/ + - name: longhorn-default-setting + configMap: + name: longhorn-default-setting + {{- if .Values.defaultSettings.registrySecret }} + imagePullSecrets: + - name: {{ .Values.defaultSettings.registrySecret }} + {{- end }} + serviceAccountName: longhorn-service-account + updateStrategy: + rollingUpdate: + maxUnavailable: "100%" +--- +apiVersion: v1 +kind: Service +metadata: + labels: {{- include "longhorn.labels" . | nindent 4 }} + app: longhorn-manager + name: longhorn-backend + namespace: {{ .Release.Namespace }} +spec: + type: {{ .Values.service.manager.type }} + sessionAffinity: ClientIP + selector: + app: longhorn-manager + ports: + - name: manager + port: 9500 + targetPort: manager + {{- if .Values.service.manager.nodePort }} + nodePort: {{ .Values.service.manager.nodePort }} + {{- end }} diff --git a/charts/longhorn/templates/default-setting.yaml b/charts/longhorn/templates/default-setting.yaml new file mode 100644 index 000000000..2eb10b4dc --- /dev/null +++ b/charts/longhorn/templates/default-setting.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: longhorn-default-setting + namespace: {{ .Release.Namespace }} + labels: {{- include "longhorn.labels" . | nindent 4 }} +data: + default-setting.yaml: |- + backup-target: {{ .Values.defaultSettings.backupTarget }} + backup-target-credential-secret: {{ .Values.defaultSettings.backupTargetCredentialSecret }} + create-default-disk-labeled-nodes: {{ .Values.defaultSettings.createDefaultDiskLabeledNodes }} + default-data-path: {{ .Values.defaultSettings.defaultDataPath }} + replica-soft-anti-affinity: {{ .Values.defaultSettings.replicaSoftAntiAffinity }} + storage-over-provisioning-percentage: {{ .Values.defaultSettings.storageOverProvisioningPercentage }} + storage-minimal-available-percentage: {{ .Values.defaultSettings.storageMinimalAvailablePercentage }} + upgrade-checker: {{ .Values.defaultSettings.upgradeChecker }} + default-replica-count: {{ .Values.defaultSettings.defaultReplicaCount }} + guaranteed-engine-cpu: {{ .Values.defaultSettings.guaranteedEngineCPU }} + default-longhorn-static-storage-class: {{ .Values.defaultSettings.defaultLonghornStaticStorageClass }} + backupstore-poll-interval: {{ .Values.defaultSettings.backupstorePollInterval }} + taint-toleration: {{ .Values.defaultSettings.taintToleration }} + priority-class: {{ .Values.defaultSettings.priorityClass }} + registry-secret: {{ .Values.defaultSettings.registrySecret }} + auto-salvage: {{ .Values.defaultSettings.autoSalvage }} + disable-scheduling-on-cordoned-node: {{ .Values.defaultSettings.disableSchedulingOnCordonedNode }} + replica-zone-soft-anti-affinity: {{ .Values.defaultSettings.replicaZoneSoftAntiAffinity }} + volume-attachment-recovery-policy: {{ .Values.defaultSettings.volumeAttachmentRecoveryPolicy }} + mkfs-ext4-parameters: {{ .Values.defaultSettings.mkfsExt4Parameters }} diff --git a/charts/longhorn/templates/deployment-driver.yaml b/charts/longhorn/templates/deployment-driver.yaml new file mode 100644 index 000000000..bee055d8e --- /dev/null +++ b/charts/longhorn/templates/deployment-driver.yaml @@ -0,0 +1,84 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: longhorn-driver-deployer + namespace: {{ .Release.Namespace }} + labels: {{- include "longhorn.labels" . | nindent 4 }} +spec: + replicas: 1 + selector: + matchLabels: + app: longhorn-driver-deployer + template: + metadata: + labels: {{- include "longhorn.labels" . | nindent 8 }} + app: longhorn-driver-deployer + spec: + initContainers: + - name: wait-longhorn-manager + image: {{ template "system_default_registry" . }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }} + command: ['sh', '-c', 'while [ $(curl -m 1 -s -o /dev/null -w "%{http_code}" http://longhorn-backend:9500/v1) != "200" ]; do echo waiting; sleep 2; done'] + containers: + - name: longhorn-driver-deployer + image: {{ template "system_default_registry" . }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }} + imagePullPolicy: IfNotPresent + command: + - longhorn-manager + - -d + - deploy-driver + - --manager-image + - "{{ template "system_default_registry" . }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }}" + - --manager-url + - http://longhorn-backend:9500/v1 + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + {{- if .Values.csi.kubeletRootDir }} + - name: KUBELET_ROOT_DIR + value: {{ .Values.csi.kubeletRootDir }} + {{- end }} + {{- if and .Values.image.csi.attacher.repository .Values.image.csi.attacher.tag }} + - name: CSI_ATTACHER_IMAGE + value: "{{ template "system_default_registry" . }}{{ .Values.image.csi.attacher.repository }}:{{ .Values.image.csi.attacher.tag }}" + {{- end }} + {{- if and .Values.image.csi.provisioner.repository .Values.image.csi.provisioner.tag }} + - name: CSI_PROVISIONER_IMAGE + value: "{{ template "system_default_registry" . }}{{ .Values.image.csi.provisioner.repository }}:{{ .Values.image.csi.provisioner.tag }}" + {{- end }} + {{- if and .Values.image.csi.nodeDriverRegistrar.repository .Values.image.csi.nodeDriverRegistrar.tag }} + - name: CSI_NODE_DRIVER_REGISTRAR_IMAGE + value: "{{ template "system_default_registry" . }}{{ .Values.image.csi.nodeDriverRegistrar.repository }}:{{ .Values.image.csi.nodeDriverRegistrar.tag }}" + {{- end }} + {{- if and .Values.image.csi.resizer.repository .Values.image.csi.resizer.tag }} + - name: CSI_RESIZER_IMAGE + value: "{{ template "system_default_registry" . }}{{ .Values.image.csi.resizer.repository }}:{{ .Values.image.csi.resizer.tag }}" + {{- end }} + {{- if .Values.csi.attacherReplicaCount }} + - name: CSI_ATTACHER_REPLICA_COUNT + value: {{ .Values.csi.attacherReplicaCount | quote }} + {{- end }} + {{- if .Values.csi.provisionerReplicaCount }} + - name: CSI_PROVISIONER_REPLICA_COUNT + value: {{ .Values.csi.provisionerReplicaCount | quote }} + {{- end }} + {{- if .Values.csi.resizerReplicaCount }} + - name: CSI_RESIZER_REPLICA_COUNT + value: {{ .Values.csi.resizerReplicaCount | quote }} + {{- end }} + {{- if .Values.defaultSettings.registrySecret }} + imagePullSecrets: + - name: {{ .Values.defaultSettings.registrySecret }} + {{- end }} + serviceAccountName: longhorn-service-account + securityContext: + runAsUser: 0 diff --git a/charts/longhorn/templates/deployment-ui.yaml b/charts/longhorn/templates/deployment-ui.yaml new file mode 100644 index 000000000..0de0c9b3b --- /dev/null +++ b/charts/longhorn/templates/deployment-ui.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: {{- include "longhorn.labels" . | nindent 4 }} + app: longhorn-ui + name: longhorn-ui + namespace: {{ .Release.Namespace }} +spec: + replicas: 1 + selector: + matchLabels: + app: longhorn-ui + template: + metadata: + labels: {{- include "longhorn.labels" . | nindent 8 }} + app: longhorn-ui + spec: + containers: + - name: longhorn-ui + image: {{ template "system_default_registry" . }}{{ .Values.image.longhorn.ui.repository }}:{{ .Values.image.longhorn.ui.tag }} + imagePullPolicy: IfNotPresent + securityContext: + runAsUser: 0 + ports: + - containerPort: 8000 + name: http + env: + - name: LONGHORN_MANAGER_IP + value: "http://longhorn-backend:9500" + {{- if .Values.defaultSettings.registrySecret }} + imagePullSecrets: + - name: {{ .Values.defaultSettings.registrySecret }} + {{- end }} +--- +kind: Service +apiVersion: v1 +metadata: + labels: {{- include "longhorn.labels" . | nindent 4 }} + app: longhorn-ui + {{- if eq .Values.service.ui.type "Rancher-Proxy" }} + kubernetes.io/cluster-service: "true" + {{- end }} + name: longhorn-frontend + namespace: {{ .Release.Namespace }} +spec: + {{- if eq .Values.service.ui.type "Rancher-Proxy" }} + type: ClusterIP + {{- else }} + type: {{ .Values.service.ui.type }} + {{- end }} + selector: + app: longhorn-ui + ports: + - name: http + port: 80 + targetPort: http + {{- if .Values.service.ui.nodePort }} + nodePort: {{ .Values.service.ui.nodePort }} + {{- else }} + nodePort: null + {{- end }} diff --git a/charts/longhorn/templates/ingress.yaml b/charts/longhorn/templates/ingress.yaml new file mode 100644 index 000000000..e3e9e3eea --- /dev/null +++ b/charts/longhorn/templates/ingress.yaml @@ -0,0 +1,30 @@ +{{- if .Values.ingress.enabled }} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: longhorn-ingress + labels: {{- include "longhorn.labels" . | nindent 4 }} + app: longhorn-ingress + annotations: + {{- if .Values.ingress.tls }} + ingress.kubernetes.io/secure-backends: "true" + {{- end }} + {{- range $key, $value := .Values.ingress.annotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} +spec: + rules: + - host: {{ .Values.ingress.host }} + http: + paths: + - path: {{ default "" .Values.ingress.path }} + backend: + serviceName: longhorn-frontend + servicePort: 80 +{{- if .Values.ingress.tls }} + tls: + - hosts: + - {{ .Values.ingress.host }} + secretName: {{ .Values.ingress.tlsSecret }} +{{- end }} +{{- end }} diff --git a/charts/longhorn/templates/postupgrade-job.yaml b/charts/longhorn/templates/postupgrade-job.yaml new file mode 100644 index 000000000..1860be5fe --- /dev/null +++ b/charts/longhorn/templates/postupgrade-job.yaml @@ -0,0 +1,35 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + "helm.sh/hook": post-upgrade + "helm.sh/hook-delete-policy": hook-succeeded,before-hook-creation + name: longhorn-post-upgrade + namespace: {{ .Release.Namespace }} + labels: {{- include "longhorn.labels" . | nindent 4 }} +spec: + activeDeadlineSeconds: 900 + backoffLimit: 1 + template: + metadata: + name: longhorn-post-upgrade + labels: {{- include "longhorn.labels" . | nindent 8 }} + spec: + containers: + - name: longhorn-post-upgrade + image: {{ template "system_default_registry" . }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }} + imagePullPolicy: Always + command: + - longhorn-manager + - post-upgrade + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + restartPolicy: OnFailure + {{- if .Values.defaultSettings.registrySecret }} + imagePullSecrets: + - name: {{ .Values.defaultSettings.registrySecret }} + {{- end }} + serviceAccountName: longhorn-service-account diff --git a/charts/longhorn/templates/psp.yaml b/charts/longhorn/templates/psp.yaml new file mode 100644 index 000000000..66479b4fa --- /dev/null +++ b/charts/longhorn/templates/psp.yaml @@ -0,0 +1,66 @@ +{{- if .Values.enablePSP }} +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + name: longhorn-psp + labels: {{- include "longhorn.labels" . | nindent 4 }} +spec: + privileged: true + allowPrivilegeEscalation: true + requiredDropCapabilities: + - NET_RAW + allowedCapabilities: + - SYS_ADMIN + hostNetwork: false + hostIPC: false + hostPID: true + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + fsGroup: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + volumes: + - configMap + - downwardAPI + - emptyDir + - secret + - projected + - hostPath +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: longhorn-psp-role + labels: {{- include "longhorn.labels" . | nindent 4 }} + namespace: {{ .Release.Namespace }} +rules: +- apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - use + resourceNames: + - longhorn-psp +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: longhorn-psp-binding + labels: {{- include "longhorn.labels" . | nindent 4 }} + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: longhorn-psp-role +subjects: +- kind: ServiceAccount + name: longhorn-service-account + namespace: {{ .Release.Namespace }} +- kind: ServiceAccount + name: default + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/longhorn/templates/registry-secret.yml b/charts/longhorn/templates/registry-secret.yml new file mode 100644 index 000000000..eeb9a8f4a --- /dev/null +++ b/charts/longhorn/templates/registry-secret.yml @@ -0,0 +1,10 @@ +{{- if .Values.defaultSettings.registrySecret }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Values.defaultSettings.registrySecret }} + labels: {{- include "longhorn.labels" . | nindent 4 }} +type: kubernetes.io/dockerconfigjson +data: + .dockerconfigjson: {{ template "secret" . }} +{{- end }} diff --git a/charts/longhorn/templates/serviceaccount.yaml b/charts/longhorn/templates/serviceaccount.yaml new file mode 100644 index 000000000..a2280b44f --- /dev/null +++ b/charts/longhorn/templates/serviceaccount.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: longhorn-service-account + namespace: {{ .Release.Namespace }} + labels: {{- include "longhorn.labels" . | nindent 4 }} diff --git a/charts/longhorn/templates/storageclass.yaml b/charts/longhorn/templates/storageclass.yaml new file mode 100644 index 000000000..3fee340f4 --- /dev/null +++ b/charts/longhorn/templates/storageclass.yaml @@ -0,0 +1,14 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: longhorn + annotations: + storageclass.kubernetes.io/is-default-class: {{ .Values.persistence.defaultClass | quote }} + labels: {{- include "longhorn.labels" . | nindent 4 }} +provisioner: driver.longhorn.io +allowVolumeExpansion: true +parameters: + numberOfReplicas: "{{ .Values.persistence.defaultClassReplicaCount }}" + staleReplicaTimeout: "30" + fromBackup: "" + baseImage: "" diff --git a/charts/longhorn/templates/tls-secrets.yaml b/charts/longhorn/templates/tls-secrets.yaml new file mode 100644 index 000000000..7a75df09c --- /dev/null +++ b/charts/longhorn/templates/tls-secrets.yaml @@ -0,0 +1,15 @@ +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.secrets }} +apiVersion: v1 +kind: Secret +metadata: + name: longhorn + labels: {{- include "longhorn.labels" . | nindent 4 }} + app: longhorn +type: kubernetes.io/tls +data: + tls.crt: {{ .certificate | b64enc }} + tls.key: {{ .key | b64enc }} +--- +{{- end }} +{{- end }} diff --git a/charts/longhorn/templates/uninstall-job.yaml b/charts/longhorn/templates/uninstall-job.yaml new file mode 100644 index 000000000..d32157145 --- /dev/null +++ b/charts/longhorn/templates/uninstall-job.yaml @@ -0,0 +1,36 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + "helm.sh/hook": pre-delete + "helm.sh/hook-delete-policy": hook-succeeded + name: longhorn-uninstall + namespace: {{ .Release.Namespace }} + labels: {{- include "longhorn.labels" . | nindent 4 }} +spec: + activeDeadlineSeconds: 900 + backoffLimit: 1 + template: + metadata: + name: longhorn-uninstall + labels: {{- include "longhorn.labels" . | nindent 8 }} + spec: + containers: + - name: longhorn-uninstall + image: {{ template "system_default_registry" . }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }} + imagePullPolicy: Always + command: + - longhorn-manager + - uninstall + - --force + env: + - name: LONGHORN_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + restartPolicy: OnFailure + {{- if .Values.defaultSettings.registrySecret }} + imagePullSecrets: + - name: {{ .Values.defaultSettings.registrySecret }} + {{- end }} + serviceAccountName: longhorn-service-account diff --git a/charts/longhorn/templates/userroles.yaml b/charts/longhorn/templates/userroles.yaml new file mode 100644 index 000000000..ba6d40643 --- /dev/null +++ b/charts/longhorn/templates/userroles.yaml @@ -0,0 +1,35 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: "longhorn-admin" + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" +rules: + - apiGroups: [ "longhorn.io" ] + resources: [ "volumes", "volumes/status", "engines", "engines/status", "replicas", "replicas/status", "settings", + "engineimages", "engineimages/status", "nodes", "nodes/status", "instancemanagers", "instancemanagers/status" ] + verbs: [ "*" ] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: "longhorn-edit" + labels: + rbac.authorization.k8s.io/aggregate-to-edit: "true" +rules: + - apiGroups: [ "longhorn.io" ] + resources: [ "volumes", "volumes/status", "engines", "engines/status", "replicas", "replicas/status", "settings", + "engineimages", "engineimages/status", "nodes", "nodes/status", "instancemanagers", "instancemanagers/status" ] + verbs: [ "*" ] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: "longhorn-view" + labels: + rbac.authorization.k8s.io/aggregate-to-view: "true" +rules: + - apiGroups: [ "longhorn.io" ] + resources: [ "volumes", "volumes/status", "engines", "engines/status", "replicas", "replicas/status", "settings", + "engineimages", "engineimages/status", "nodes", "nodes/status", "instancemanagers", "instancemanagers/status" ] + verbs: [ "get", "list", "watch" ] diff --git a/charts/longhorn/templates/validate-install-crd.yaml b/charts/longhorn/templates/validate-install-crd.yaml new file mode 100644 index 000000000..4899b977c --- /dev/null +++ b/charts/longhorn/templates/validate-install-crd.yaml @@ -0,0 +1,14 @@ +#{{- if gt (len (lookup "rbac.authorization.k8s.io/v1" "ClusterRole" "" "")) 0 -}} +# {{- $found := dict -}} +# {{- set $found "longhorn.io/v1beta1/Engine" false -}} +# {{- range .Capabilities.APIVersions -}} +# {{- if hasKey $found (toString .) -}} +# {{- set $found (toString .) true -}} +# {{- end -}} +# {{- end -}} +# {{- range $_, $exists := $found -}} +# {{- if (eq $exists false) -}} +# {{- required "Required CRDs are missing. Please install the longhorn-crd chart before installing this chart." "" -}} +# {{- end -}} +# {{- end -}} +#{{- end -}} diff --git a/charts/longhorn/values.yaml b/charts/longhorn/values.yaml new file mode 100644 index 000000000..83369d872 --- /dev/null +++ b/charts/longhorn/values.yaml @@ -0,0 +1,136 @@ +# Default values for longhorn. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +global: + cattle: + systemDefaultRegistry: "" + +image: + longhorn: + engine: + repository: longhornio/longhorn-engine + tag: v1.0.2 + manager: + repository: longhornio/longhorn-manager + tag: v1.0.2 + ui: + repository: longhornio/longhorn-ui + tag: v1.0.2 + instanceManager: + repository: longhornio/longhorn-instance-manager + tag: v1_20200514 + csi: + attacher: + repository: longhornio/csi-attacher + tag: v2.0.0 + provisioner: + repository: longhornio/csi-provisioner + tag: v1.4.0 + nodeDriverRegistrar: + repository: longhornio/csi-node-driver-registrar + tag: v1.2.0 + resizer: + repository: longhornio/csi-resizer + tag: v0.3.0 + pullPolicy: IfNotPresent + +service: + ui: + type: ClusterIP + nodePort: null + manager: + type: ClusterIP + nodePort: "" + +persistence: + defaultClass: true + defaultClassReplicaCount: 3 + +csi: + kubeletRootDir: ~ + attacherReplicaCount: ~ + provisionerReplicaCount: ~ + resizerReplicaCount: ~ + +defaultSettings: + backupTarget: ~ + backupTargetCredentialSecret: ~ + createDefaultDiskLabeledNodes: ~ + defaultDataPath: ~ + replicaSoftAntiAffinity: ~ + storageOverProvisioningPercentage: ~ + storageMinimalAvailablePercentage: ~ + upgradeChecker: ~ + defaultReplicaCount: ~ + guaranteedEngineCPU: ~ + defaultLonghornStaticStorageClass: ~ + backupstorePollInterval: ~ + taintToleration: ~ + priorityClass: ~ + registrySecret: ~ + autoSalvage: ~ + disableSchedulingOnCordonedNode: ~ + replicaZoneSoftAntiAffinity: ~ + volumeAttachmentRecoveryPolicy: ~ + mkfsExt4Parameters: ~ + +privateRegistry: + registryUrl: ~ + registryUser: ~ + registryPasswd: ~ + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + # + +ingress: + ## Set to true to enable ingress record generation + enabled: false + + + host: xip.io + + ## Set this to true in order to enable TLS on the ingress record + ## A side effect of this will be that the backend service will be connected at port 443 + tls: false + + ## If TLS is set to true, you must declare what secret will store the key/certificate for TLS + tlsSecret: longhorn.local-tls + + ## Ingress annotations done as key:value pairs + ## If you're using kube-lego, you will want to add: + ## kubernetes.io/tls-acme: true + ## + ## For a full list of possible ingress annotations, please see + ## ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/annotations.md + ## + ## If tls is set to true, annotation ingress.kubernetes.io/secure-backends: "true" will automatically be set + annotations: + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: true + + secrets: + ## If you're providing your own certificates, please use this to add the certificates as secrets + ## key and certificate should start with -----BEGIN CERTIFICATE----- or + ## -----BEGIN RSA PRIVATE KEY----- + ## + ## name should line up with a tlsSecret set further up + ## If you're using kube-lego, this is unneeded, as it will create the secret for you if it is not set + ## + ## It is also possible to create and manage the certificates outside of this helm chart + ## Please see README.md for more information + # - name: longhorn.local-tls + # key: + # certificate: + +# Configure a pod security policy in the Longhorn namespace to allow privileged pods +enablePSP: true diff --git a/charts/rancher-backup/Chart.yaml b/charts/rancher-backup/Chart.yaml new file mode 100644 index 000000000..68104cee8 --- /dev/null +++ b/charts/rancher-backup/Chart.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +appVersion: v0.1.0-rc1 +description: Provides ability to back up and restore the Rancher application running + on any Kubernetes cluster +name: rancher-backup +keywords: +- applications +- infrastructure +version: 0.1.0 +annotations: + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: cattle-resources-system + catalog.cattle.io/release-name: rancher-backup + catalog.cattle.io/ui-component: rancher-backup + catalog.cattle.io/provides-gvr: resources.cattle.io.resourceset/v1 + catalog.cattle.io/auto-install: rancher-backup-crd=match diff --git a/charts/rancher-backup/README.md b/charts/rancher-backup/README.md new file mode 100644 index 000000000..8149fe72e --- /dev/null +++ b/charts/rancher-backup/README.md @@ -0,0 +1,69 @@ +# Rancher Backup + +This chart provides ability to back up and restore the Rancher application running on any Kubernetes cluster. + +Refer [this](https://github.com/rancher/backup-restore-operator) repository for implementation details. + +----- + +### Get Repo Info +``` +helm repo add rancher-chart https://charts.rancher.io +helm repo update +``` + +----- + +### Install Chart +``` +helm install rancher-backup-crd rancher-chart/rancher-backup-crd -n cattle-resources-system --create-namespace +helm install rancher-backup rancher-chart/rancher-backup -n cattle-resources-system +``` + +----- + +### Configuration +The following table lists the configurable parameters of the rancher-backup chart and their default values: + +| Parameter | Description | Default | +|----------|:-------------:|------:| +| image.repository | Container image repository | rancher/backup-restore-operator | +| image.tag | Container image tag | v0.1.0-rc1 | +| s3.enabled | Configure S3 compatible default storage location. Current version supports S3 and MinIO | false | +| s3.credentialSecretName | Name of the Secret containing S3 credentials. This is an optional field. Skip this field in order to use IAM Role authentication. The Secret must contain following two keys, `accessKey` and `secretKey` | "" | +| s3.credentialSecretNamespace | Namespace of the Secret containing S3 credentials | "" | +| s3.region | Region of the S3 Bucket (Required for S3, not valid for MinIO) | "" | +| s3.bucketName | Name of the Bucket | "" | +| s3.folder | Base folder within the Bucket (optional) | "" | +| s3.endpoint | Endpoint for the S3 storage provider | "" | +| s3.endpointCA | Base64 encoded CA cert for the S3 storage provider (optional) | "" | +| s3.insecureTLSSkipVerify | Skip SSL verification | false | +| persistence.enabled | Configure a Persistent Volume as the default storage location. It accepts either a StorageClass name to create a PVC, or directly accepts the PV to use. The Persistent Volume is mounted at `/var/lib/backups` in the operator pod | false | +| persistence.storageClass | StorageClass to use for dynamically provisioning the Persistent Volume, which will be used for storing backups | "" | +| persistence.volumeName | Persistent Volume to use for storing backups | "" | +| persistence.size | Requested size of the Persistent Volume (Applicable when using dynamic provisioning) | "" | +| nodeSelector | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector | {} | +| tolerations | https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration | [] | +| affinity | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity | {} | + +----- + +### CRDs + +Refer [this](https://github.com/rancher/backup-restore-operator#crds) section for information on CRDs that this chart installs. Also refer [this](https://github.com/rancher/backup-restore-operator/tree/master/examples) folder containing sample manifests for the CRDs. + +----- +### Upgrading Chart +``` +helm upgrade rancher-backup-crd -n cattle-resources-system +helm upgrade rancher-backup -n cattle-resources-system +``` + +----- +### Uninstall Chart + +``` +helm uninstall rancher-backup -n cattle-resources-system +helm uninstall rancher-backup-crd -n cattle-resources-system +``` + diff --git a/charts/rancher-backup/charts-crd/Chart.yaml b/charts/rancher-backup/charts-crd/Chart.yaml new file mode 100644 index 000000000..23a496ef7 --- /dev/null +++ b/charts/rancher-backup/charts-crd/Chart.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +version: 0.1.0 +description: Installs the CRDs for rancher-backup. +name: rancher-backup-crd +type: application +annotations: + catalog.cattle.io/hidden: "true" + catalog.cattle.io/release-name: rancher-backup-crd + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: cattle-resources-system diff --git a/charts/rancher-backup/charts-crd/README.md b/charts/rancher-backup/charts-crd/README.md new file mode 100644 index 000000000..f7efdcc7f --- /dev/null +++ b/charts/rancher-backup/charts-crd/README.md @@ -0,0 +1,2 @@ +# rancher-backup-crd +A Rancher chart that installs the CRDs used by [rancher-backup](https://github.com/rancher/dev-charts/tree/master/packages/rancher-backup). diff --git a/charts/rancher-backup/charts-crd/templates/backup.yaml b/charts/rancher-backup/charts-crd/templates/backup.yaml new file mode 100644 index 000000000..a4b9471c0 --- /dev/null +++ b/charts/rancher-backup/charts-crd/templates/backup.yaml @@ -0,0 +1,119 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: backups.resources.cattle.io +spec: + additionalPrinterColumns: + - JSONPath: .status.storageLocation + name: Location + type: string + - JSONPath: .status.backupType + name: Type + type: string + - JSONPath: .status.filename + name: Latest-Backup + type: string + - JSONPath: .spec.resourceSetName + name: ResourceSet + type: string + - JSONPath: .metadata.creationTimestamp + name: Age + type: date + - JSONPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + group: resources.cattle.io + names: + kind: Backup + plural: backups + scope: Cluster + subresources: + status: {} + validation: + openAPIV3Schema: + properties: + spec: + properties: + encryptionConfigSecretName: + description: Name of the Secret containing the encryption config + type: string + resourceSetName: + description: Name of the ResourceSet CR to use for backup + type: string + retentionCount: + minimum: 1 + type: integer + schedule: + description: Cron schedule for recurring backups + example: + Descriptors: '@midnight' + Standard crontab specs: 0 0 * * * + type: string + storageLocation: + nullable: true + properties: + s3: + nullable: true + properties: + bucketName: + type: string + credentialSecretName: + type: string + credentialSecretNamespace: + type: string + endpoint: + type: string + endpointCA: + type: string + folder: + type: string + insecureTLSSkipVerify: + type: boolean + region: + type: string + type: object + type: object + required: + - resourceSetName + type: object + status: + properties: + backupType: + type: string + conditions: + items: + properties: + lastTransitionTime: + type: string + lastUpdateTime: + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + nullable: true + type: array + filename: + type: string + lastSnapshotTs: + type: string + nextSnapshotAt: + type: string + observedGeneration: + type: integer + storageLocation: + type: string + summary: + type: string + type: object + type: object + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/charts/rancher-backup/charts-crd/templates/resourceset.yaml b/charts/rancher-backup/charts-crd/templates/resourceset.yaml new file mode 100644 index 000000000..665ef786d --- /dev/null +++ b/charts/rancher-backup/charts-crd/templates/resourceset.yaml @@ -0,0 +1,94 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: resourcesets.resources.cattle.io +spec: + group: resources.cattle.io + names: + kind: ResourceSet + plural: resourcesets + scope: Cluster + subresources: + status: {} + validation: + openAPIV3Schema: + properties: + controllerReferences: + items: + properties: + apiVersion: + type: string + name: + type: string + namespace: + type: string + replicas: + type: integer + resource: + type: string + type: object + nullable: true + type: array + resourceSelectors: + items: + properties: + apiVersion: + type: string + kinds: + items: + type: string + nullable: true + type: array + kindsRegexp: + type: string + labelSelectors: + nullable: true + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + nullable: true + type: array + type: object + nullable: true + type: array + matchLabels: + additionalProperties: + type: string + nullable: true + type: object + type: object + namespaceRegexp: + type: string + namespaces: + items: + type: string + nullable: true + type: array + resourceNameRegexp: + type: string + resourceNames: + items: + type: string + nullable: true + type: array + type: object + nullable: true + required: + - apiVersion + type: array + required: + - resourceSelectors + type: object + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/charts/rancher-backup/charts-crd/templates/restore.yaml b/charts/rancher-backup/charts-crd/templates/restore.yaml new file mode 100644 index 000000000..1ad7d1721 --- /dev/null +++ b/charts/rancher-backup/charts-crd/templates/restore.yaml @@ -0,0 +1,102 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: restores.resources.cattle.io +spec: + additionalPrinterColumns: + - JSONPath: .status.backupSource + name: Backup-Source + type: string + - JSONPath: .spec.backupFilename + name: Backup-File + type: string + - JSONPath: .metadata.creationTimestamp + name: Age + type: date + - JSONPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + group: resources.cattle.io + names: + kind: Restore + plural: restores + scope: Cluster + subresources: + status: {} + validation: + openAPIV3Schema: + properties: + spec: + properties: + backupFilename: + type: string + deleteTimeoutSeconds: + maximum: 10 + type: integer + encryptionConfigSecretName: + type: string + prune: + nullable: true + type: boolean + storageLocation: + nullable: true + properties: + s3: + nullable: true + properties: + bucketName: + type: string + credentialSecretName: + type: string + credentialSecretNamespace: + type: string + endpoint: + type: string + endpointCA: + type: string + folder: + type: string + insecureTLSSkipVerify: + type: boolean + region: + type: string + type: object + type: object + required: + - backupFilename + type: object + status: + properties: + backupSource: + type: string + conditions: + items: + properties: + lastTransitionTime: + type: string + lastUpdateTime: + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + nullable: true + type: array + observedGeneration: + type: integer + restoreCompletionTs: + type: string + summary: + type: string + type: object + type: object + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/charts/rancher-backup/templates/_helpers.tpl b/charts/rancher-backup/templates/_helpers.tpl new file mode 100644 index 000000000..8d62c94ac --- /dev/null +++ b/charts/rancher-backup/templates/_helpers.tpl @@ -0,0 +1,76 @@ +{{- define "system_default_registry" -}} +{{- if .Values.global.cattle.systemDefaultRegistry -}} +{{- printf "%s/" .Values.global.cattle.systemDefaultRegistry -}} +{{- else -}} +{{- "" -}} +{{- end -}} +{{- end -}} + +{{/* +Windows cluster will add default taint for linux nodes, +add below linux tolerations to workloads could be scheduled to those linux nodes +*/}} +{{- define "linux-node-tolerations" -}} +- key: "cattle.io/os" + value: "linux" + effect: "NoSchedule" + operator: "Equal" +{{- end -}} + + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "backupRestore.fullname" -}} +{{- .Chart.Name | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "backupRestore.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "backupRestore.labels" -}} +helm.sh/chart: {{ include "backupRestore.chart" . }} +{{ include "backupRestore.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "backupRestore.selectorLabels" -}} +app.kubernetes.io/name: {{ include "backupRestore.fullname" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +resources.cattle.io/operator: backup-restore +{{- end }} + + +{{/* +Create the name of the service account to use +*/}} +{{- define "backupRestore.serviceAccountName" -}} +{{ include "backupRestore.fullname" . }} +{{- end }} + + +{{- define "backupRestore.s3SecretName" -}} +{{- printf "%s-%s" .Chart.Name "s3" | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{- define "backupRestore.pvcName" -}} +{{ include "backupRestore.fullname" . }} +{{- end }} + +{{- define "backupRestore.nfsPVName" -}} +{{ include "backupRestore.fullname" . }} +{{- end }} diff --git a/charts/rancher-backup/templates/clusterrolebinding.yaml b/charts/rancher-backup/templates/clusterrolebinding.yaml new file mode 100644 index 000000000..cf4abf670 --- /dev/null +++ b/charts/rancher-backup/templates/clusterrolebinding.yaml @@ -0,0 +1,14 @@ +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ include "backupRestore.fullname" . }} + labels: + {{- include "backupRestore.labels" . | nindent 4 }} +subjects: +- kind: ServiceAccount + name: {{ include "backupRestore.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: rbac.authorization.k8s.io diff --git a/charts/rancher-backup/templates/deployment.yaml b/charts/rancher-backup/templates/deployment.yaml new file mode 100644 index 000000000..057998540 --- /dev/null +++ b/charts/rancher-backup/templates/deployment.yaml @@ -0,0 +1,58 @@ +{{- if and .Values.s3.enabled .Values.persistence.enabled }} +{{- fail "\n\nCannot configure both s3 and PV for storing backups" }} +{{- end }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "backupRestore.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "backupRestore.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "backupRestore.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "backupRestore.selectorLabels" . | nindent 8 }} + annotations: + checksum/secret: {{ include (print $.Template.BasePath "/s3-secret.yaml") . | sha256sum }} + spec: + serviceAccountName: {{ include "backupRestore.serviceAccountName" . }} + containers: + - name: {{ .Chart.Name }} + image: {{ template "system_default_registry" . }}{{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: Always + env: + - name: CHART_NAMESPACE + value: {{ .Release.Namespace }} + {{- if .Values.s3.enabled }} + - name: DEFAULT_S3_BACKUP_STORAGE_LOCATION + value: {{ include "backupRestore.s3SecretName" . }} + {{- end }} + {{- if .Values.persistence.enabled }} + - name: DEFAULT_PERSISTENCE_ENABLED + value: "persistence-enabled" + volumeMounts: + - mountPath: "/var/lib/backups" + name: pv-storage + volumes: + - name: pv-storage + persistentVolumeClaim: + claimName: {{ include "backupRestore.pvcName" . }} + {{- end }} + nodeSelector: + kubernetes.io/os: linux + {{- with .Values.nodeSelector }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + tolerations: + {{- include "linux-node-tolerations" . | nindent 8}} + {{- with .Values.tolerations }} + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/rancher-backup/templates/pvc.yaml b/charts/rancher-backup/templates/pvc.yaml new file mode 100644 index 000000000..ff57e4dab --- /dev/null +++ b/charts/rancher-backup/templates/pvc.yaml @@ -0,0 +1,27 @@ +{{- if and .Values.persistence.enabled -}} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "backupRestore.pvcName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "backupRestore.labels" . | nindent 4 }} +spec: + accessModes: + - ReadWriteOnce + resources: + {{- with .Values.persistence }} + requests: + storage: {{ .size | quote }} +{{- if .storageClass }} +{{- if (eq "-" .storageClass) }} + storageClassName: "" +{{- else }} + storageClassName: {{ .storageClass | quote }} +{{- end }} +{{- end }} +{{- if .volumeName }} + volumeName: {{ .volumeName | quote }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/rancher-backup/templates/rancher-resourceset.yaml b/charts/rancher-backup/templates/rancher-resourceset.yaml new file mode 100644 index 000000000..318ca1f2d --- /dev/null +++ b/charts/rancher-backup/templates/rancher-resourceset.yaml @@ -0,0 +1,54 @@ +apiVersion: resources.cattle.io/v1 +kind: ResourceSet +metadata: + name: rancher-resource-set +resourceSelectors: + - apiVersion: "v1" + kindsRegexp: "^namespaces$" + resourceNameRegexp: "^cattle-|^p-|^c-|^user-|^u-" + resourceNames: + - "local" + - apiVersion: "v1" + kindsRegexp: "^Secret$|^serviceaccounts$" + namespaceRegexp: "^cattle-|^p-|^c-|^local$|^user-|^u-" + - apiVersion: "v1" + kindsRegexp: "^configmaps$" + namespaces: + - "cattle-system" + - apiVersion: "rbac.authorization.k8s.io/v1" + kindsRegexp: "^roles$|^rolebindings$" + namespaceRegexp: "^cattle-|^p-|^c-|^local$|^user-|^u-" + - apiVersion: "rbac.authorization.k8s.io/v1" + kindsRegexp: "^clusterrolebindings$" + resourceNameRegexp: "^cattle-|^clusterrolebinding-|^globaladmin-user-|^grb-u-" + resourceNames: + - "eks-operator" + - apiVersion: "rbac.authorization.k8s.io/v1" + kindsRegexp: "^clusterroles$" + resourceNameRegexp: "^cattle-|^p-|^c-|^local-|^user-|^u-|^project-|^create-ns$" + resourceNames: + - "eks-operator" + - apiVersion: "apiextensions.k8s.io/v1beta1" + kindsRegexp: "." + resourceNameRegexp: "management.cattle.io$|project.cattle.io$|catalog.cattle.io$|eks.cattle.io$|resources.cattle.io$" + - apiVersion: "management.cattle.io/v3" + kindsRegexp: "." + - apiVersion: "project.cattle.io/v3" + kindsRegexp: "." + - apiVersion: "catalog.cattle.io/v1" + kindsRegexp: "^clusterrepos$" + - apiVersion: "resources.cattle.io/v1" + kindsRegexp: "^ResourceSet$" + - apiVersion: "eks.cattle.io/v1" + kindsRegexp: "." + - apiVersion: "apps/v1" + kindsRegexp: "^deployments$" + resourceNames: + - "eks-config-operator" + namespaces: + - "cattle-system" +controllerReferences: + - apiVersion: "apps/v1" + resource: "deployments" + name: "rancher" + namespace: "cattle-system" diff --git a/charts/rancher-backup/templates/s3-secret.yaml b/charts/rancher-backup/templates/s3-secret.yaml new file mode 100644 index 000000000..0401b554b --- /dev/null +++ b/charts/rancher-backup/templates/s3-secret.yaml @@ -0,0 +1,31 @@ +{{- if .Values.s3.enabled -}} +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "backupRestore.s3SecretName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "backupRestore.labels" . | nindent 4 }} +type: Opaque +stringData: + {{- with .Values.s3 }} + {{- if .credentialSecretName }} + credentialSecretName: {{ .credentialSecretName }} + credentialSecretNamespace: {{ required "When providing a Secret containing S3 credentials, a valid .Values.credentialSecretNamespace must be provided" .credentialSecretNamespace }} + {{- end }} + {{- if .region }} + region: {{ .region }} + {{- end }} + bucketName: {{ required "A valid .Values.bucketName is required for configuring S3 compatible storage as the default backup storage location" .bucketName }} + {{- if .folder }} + folder: {{ .folder }} + {{- end }} + endpoint: {{ required "A valid .Values.endpoint is required for configuring S3 compatible storage as the default backup storage location" .endpoint }} + {{- if .endpointCA }} + endpointCA: {{ .endpointCA }} + {{- end }} + {{- if .insecureTLSSkipVerify }} + insecureTLSSkipVerify: {{ .insecureTLSSkipVerify }} + {{- end }} + {{- end }} +{{ end }} diff --git a/charts/rancher-backup/templates/serviceaccount.yaml b/charts/rancher-backup/templates/serviceaccount.yaml new file mode 100644 index 000000000..f333b746c --- /dev/null +++ b/charts/rancher-backup/templates/serviceaccount.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "backupRestore.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "backupRestore.labels" . | nindent 4 }} diff --git a/charts/rancher-backup/templates/validate-install-crd.yaml b/charts/rancher-backup/templates/validate-install-crd.yaml new file mode 100644 index 000000000..8f04e51e8 --- /dev/null +++ b/charts/rancher-backup/templates/validate-install-crd.yaml @@ -0,0 +1,16 @@ +#{{- if gt (len (lookup "rbac.authorization.k8s.io/v1" "ClusterRole" "" "")) 0 -}} +# {{- $found := dict -}} +# {{- set $found "resources.cattle.io/v1/Backup" false -}} +# {{- set $found "resources.cattle.io/v1/ResourceSet" false -}} +# {{- set $found "resources.cattle.io/v1/Restore" false -}} +# {{- range .Capabilities.APIVersions -}} +# {{- if hasKey $found (toString .) -}} +# {{- set $found (toString .) true -}} +# {{- end -}} +# {{- end -}} +# {{- range $_, $exists := $found -}} +# {{- if (eq $exists false) -}} +# {{- required "Required CRDs are missing. Please install the rancher-backup-crd chart before installing this chart." "" -}} +# {{- end -}} +# {{- end -}} +#{{- end -}} diff --git a/charts/rancher-backup/values.yaml b/charts/rancher-backup/values.yaml new file mode 100644 index 000000000..24ac9dcf3 --- /dev/null +++ b/charts/rancher-backup/values.yaml @@ -0,0 +1,49 @@ +image: + repository: rancher/backup-restore-operator + tag: v0.1.0-rc1 + +## Default s3 bucket for storing all backup files created by the backup-restore-operator +s3: + enabled: false + ## credentialSecretName if set, should be the name of the Secret containing AWS credentials. + ## To use IAM Role, don't set this field + credentialSecretName: "" + credentialSecretNamespace: "" + region: "" + bucketName: "" + folder: "" + endpoint: "" + endpointCA: "" + insecureTLSSkipVerify: false + +## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ +## If persistence is enabled, operator will create a PVC with mountPath /var/lib/backups +persistence: + enabled: false + + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack). + ## Refer https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1 + ## + storageClass: "-" + + ## If you want to disable dynamic provisioning by setting storageClass to "-" above, + ## and want to target a particular PV, provide name of the target volume + volumeName: "" + + ## Only certain StorageClasses allow resizing PVs; Refer https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/ + size: 2Gi + + +global: + cattle: + systemDefaultRegistry: "" + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/index.yaml b/index.yaml index 0a3320263..fb774635a 100644 --- a/index.yaml +++ b/index.yaml @@ -470,6 +470,96 @@ entries: urls: - assets/fleet-crd/fleet-crd-0.3.0-alpha600.tgz version: 0.3.0-alpha600 + longhorn: + - annotations: + catalog.cattle.io/auto-install: longhorn-crd=match + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: longhorn-system + catalog.cattle.io/provides-gvr: longhorn.io/v1beta1 + catalog.cattle.io/release-name: longhorn + catalog.cattle.io/ui-component: longhorn + apiVersion: v1 + appVersion: v1.0.2 + created: "2020-09-25T21:27:40.522743781Z" + description: Longhorn is a distributed block storage system for Kubernetes. + digest: ff247454026df41123c130c2971dd51f2458d46bc47b0ec9313a6d7906cd7a53 + home: https://github.com/longhorn/longhorn + icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/longhorn/icon/color/longhorn-icon-color.svg + keywords: + - longhorn + - storage + - distributed + - block + - device + - iscsi + kubeVersion: '>=v1.14.0-r0' + maintainers: + - email: maintainers@longhorn.io + name: Longhorn maintainers + - email: sheng@yasker.org + name: Sheng Yang + name: longhorn + sources: + - https://github.com/longhorn/longhorn + - https://github.com/longhorn/longhorn-engine + - https://github.com/longhorn/longhorn-instance-manager + - https://github.com/longhorn/longhorn-manager + - https://github.com/longhorn/longhorn-ui + - https://github.com/longhorn/longhorn-tests + urls: + - assets/longhorn/longhorn-1.0.200.tgz + version: 1.0.200 + longhorn-crd: + - annotations: + catalog.cattle.io/certified: rancher + catalog.cattle.io/hidden: "true" + catalog.cattle.io/namespace: longhorn-system + catalog.cattle.io/release-name: longhorn-crd + apiVersion: v1 + created: "2020-09-25T21:27:40.522946083Z" + description: Installs the CRDs for longhorn. + digest: 4203577c0310a1877ac18f7e13cfbc475cc25f13e03deb57d9c581bdab4cc48a + name: longhorn-crd + type: application + urls: + - assets/longhorn/longhorn-crd-1.0.200.tgz + version: 1.0.200 + rancher-backup: + - annotations: + catalog.cattle.io/auto-install: rancher-backup-crd=match + catalog.cattle.io/certified: rancher + catalog.cattle.io/namespace: cattle-resources-system + catalog.cattle.io/provides-gvr: resources.cattle.io.resourceset/v1 + catalog.cattle.io/release-name: rancher-backup + catalog.cattle.io/ui-component: rancher-backup + apiVersion: v1 + appVersion: v0.1.0-rc1 + created: "2020-09-25T21:27:40.524512896Z" + description: Provides ability to back up and restore the Rancher application running + on any Kubernetes cluster + digest: e3a672fd48b68d0228b812e1f336fe62070c7f31798efd562444b840cd2c7819 + keywords: + - applications + - infrastructure + name: rancher-backup + urls: + - assets/rancher-backup/rancher-backup-0.1.0.tgz + version: 0.1.0 + rancher-backup-crd: + - annotations: + catalog.cattle.io/certified: rancher + catalog.cattle.io/hidden: "true" + catalog.cattle.io/namespace: cattle-resources-system + catalog.cattle.io/release-name: rancher-backup-crd + apiVersion: v1 + created: "2020-09-25T21:27:40.5249197Z" + description: Installs the CRDs for rancher-backup. + digest: e47f707d41a668bb01e928fc8412d4d09edabbb47feb4e8ac0ccafbece317aa9 + name: rancher-backup-crd + type: application + urls: + - assets/rancher-backup/rancher-backup-crd-0.1.0.tgz + version: 0.1.0 rancher-cis-benchmark: - annotations: catalog.cattle.io/auto-install: rancher-cis-benchmark-crd=match @@ -1354,4 +1444,4 @@ entries: urls: - assets/rio/rio-0.8.000.tgz version: 0.8.000 -generated: "2020-09-25T20:19:25.602999395Z" +generated: "2020-09-25T21:27:40.521318869Z" diff --git a/sha256sum/longhorn/longhorn.sum b/sha256sum/longhorn/longhorn.sum new file mode 100644 index 000000000..8f3954cdc --- /dev/null +++ b/sha256sum/longhorn/longhorn.sum @@ -0,0 +1,3 @@ +da86de88f83918e2eb6fbd79d9f08a2a5e2d4c42f9931aa9c1f113e71438ea60 packages/longhorn/overlay/templates/userroles.yaml +2e992fbba0e0f027b83fd10e86a5962e5842819d42e216cf604197d21ee962b2 packages/longhorn/package.yaml +b1a46c54b5178f0a8af63adc4f8ac5ed7d26fc88d8f43a76ea010a88b06f0e00 packages/longhorn/longhorn.patch diff --git a/sha256sum/rancher-backup/rancher-backup.sum b/sha256sum/rancher-backup/rancher-backup.sum new file mode 100644 index 000000000..e37a179d8 --- /dev/null +++ b/sha256sum/rancher-backup/rancher-backup.sum @@ -0,0 +1,14 @@ +6175c33d41cd634800072f926b7edc756fc93ed4f24d607eeb13d2cc41179786 packages/rancher-backup/charts/Chart.yaml +cb3c732b2c06c1b47057c8ee0ff8605b8b5ed0e306afd16783212e09f3d1dc5f packages/rancher-backup/charts/README.md +4a328a380a540f06f0f969f5547b70d9a6823f0faf4574af7e93332bde3461fa packages/rancher-backup/charts/templates/s3-secret.yaml +018e3819ff32db39b66c3fc2e0e9b9ddbc082acf36b921d1eec111bf8642274e packages/rancher-backup/charts/templates/_helpers.tpl +bc862986e3481ef4f93edf43e4e1d4c347a348da04c5b3b4472cee7e30cf00b0 packages/rancher-backup/charts/templates/serviceaccount.yaml +87ac3559c463c089e6f29b236805e0ed5e44dfd369e3510ebc452470d62c6583 packages/rancher-backup/charts/templates/rancher-resourceset.yaml +e63f71dd15261939bd47ae262c2cec8f18694dc86b264c4da2b1af3c5db5eb1c packages/rancher-backup/charts/templates/deployment.yaml +be84d711886fbd515eb68a8681670b077350dda1a5ff60fcdd99e924583344de packages/rancher-backup/charts/templates/clusterrolebinding.yaml +ee02b7e471c51ff5b387fcb5245adfacc0bbb88b44592fbb36ddf7ed1657d6c9 packages/rancher-backup/charts/templates/pvc.yaml +a1abe279c1a5803854e64e9e5255f0cb5f2455ccf058236f0cc62ece7b36d740 packages/rancher-backup/charts/values.yaml +4e1d807b18e99ba7f8922f46356d13a6f684f3b8c6982ab1c7317737081bf142 packages/rancher-backup/charts/crds/resourceset.yaml +1fe59a9505de1a3233c76e4481bd032781919b181b0b4fb1ecd6128f451c65f8 packages/rancher-backup/charts/crds/backup.yaml +a0a510eba97c08bfc8095ed6c52df8471d80ee6d57fbbcd975285b1dec38733a packages/rancher-backup/charts/crds/restore.yaml +951ad1d2a7ded610f857e3c82ee9844eddc8fdc888a70feb709bc50e1e942cb5 packages/rancher-backup/package.yaml