diff --git a/examples/longhorn/README.md b/examples/longhorn/README.md new file mode 100644 index 0000000000..4a7710a094 --- /dev/null +++ b/examples/longhorn/README.md @@ -0,0 +1,49 @@ +# Longhorn + +This example shows how you how to deploy [Longhorn](longhorn.io) using Zarf + +Before deploying Longhorn make sure your nodes are configured with the [Longhorn Installation Requirements](https://longhorn.io/docs/1.4.0/deploy/install/#installation-requirements). + +You will need [open-iscsi](https://longhorn.io/docs/1.4.0/deploy/install/#installing-open-iscsi) installed. + +If you wish to support RWX access modes you'll need to install an [NFSv4 client](https://longhorn.io/docs/1.4.0/deploy/install/#installing-nfsv4-client) on each node. + +If you're working with K3s, there is extra setup required see [Longhorn CSI on K3s](https://longhorn.io/docs/1.4.0/advanced-resources/os-distro-specific/csi-on-k3s/). + +The values file from this example was pulled using the directions at [Customizing Default Settings](https://longhorn.io/docs/1.4.0/advanced-resources/deploy/customizing-default-settings/#using-helm) as the path for kubelet needs to be set for K3s as per [Longhorn CSI on K3s](https://longhorn.io/docs/1.4.0/advanced-resources/os-distro-specific/csi-on-k3s/) + +You do not need to use the values file and can remove it from the Zarf package configuration if you're not using K3s and don't need that variable set. + +:::info + +To view the example source code, select the `Edit this page` link below the article and select the parent folder. + +::: + +``` +components: + - name: longhorn + required: true + description: "Deploy Longhorn into a Kubernetes cluster. https://longhorn.io" + charts: + - name: longhorn + url: https://charts.longhorn.io + version: 1.4.0 + namespace: longhorn-system + valuesFiles: + - "values.yaml" + images: + - longhornio/csi-attacher:v3.4.0 + - longhornio/csi-provisioner:v2.1.2 + - longhornio/csi-resizer:v1.3.0 + - longhornio/csi-snapshotter:v5.0.1 + - longhornio/csi-node-driver-registrar:v2.5.0 + - longhornio/livenessprobe:v2.8.0 + - longhornio/backing-image-manager:v1.4.0 + - longhornio/longhorn-engine:v1.4.0 + - longhornio/longhorn-instance-manager:v1.4.0 + - longhornio/longhorn-manager:v1.4.0 + - longhornio/longhorn-share-manager:v1.4.0 + - longhornio/longhorn-ui:v1.4.0 + - longhornio/support-bundle-kit:v0.0.17 +``` diff --git a/examples/longhorn/connect.yaml b/examples/longhorn/connect.yaml new file mode 100644 index 0000000000..baa5ff07e9 --- /dev/null +++ b/examples/longhorn/connect.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: zarf-connect-longhorn-ui + labels: + # Enables "zarf connect longhorn-ui" + zarf.dev/connect-name: longhorn-ui + annotations: + zarf.dev/connect-description: "Connect to the Longhorn User Interface" +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: http + selector: + app: longhorn-ui diff --git a/examples/longhorn/values.yaml b/examples/longhorn/values.yaml new file mode 100644 index 0000000000..3f4b5a46f5 --- /dev/null +++ b/examples/longhorn/values.yaml @@ -0,0 +1,332 @@ +# Default values for longhorn. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +global: + cattle: + systemDefaultRegistry: "" + windowsCluster: + # Enable this to allow Longhorn to run on the Rancher deployed Windows cluster + enabled: false + # Tolerate Linux node taint + tolerations: + - key: "cattle.io/os" + value: "linux" + effect: "NoSchedule" + operator: "Equal" + # Select Linux nodes + nodeSelector: + kubernetes.io/os: "linux" + # Recognize toleration and node selector for Longhorn run-time created components + defaultSetting: + taintToleration: cattle.io/os=linux:NoSchedule + systemManagedComponentsNodeSelector: kubernetes.io/os:linux + +image: + longhorn: + engine: + repository: longhornio/longhorn-engine + tag: v1.4.0 + manager: + repository: longhornio/longhorn-manager + tag: v1.4.0 + ui: + repository: longhornio/longhorn-ui + tag: v1.4.0 + instanceManager: + repository: longhornio/longhorn-instance-manager + tag: v1.4.0 + shareManager: + repository: longhornio/longhorn-share-manager + tag: v1.4.0 + backingImageManager: + repository: longhornio/backing-image-manager + tag: v1.4.0 + supportBundleKit: + repository: longhornio/support-bundle-kit + tag: v0.0.17 + csi: + attacher: + repository: longhornio/csi-attacher + tag: v3.4.0 + provisioner: + repository: longhornio/csi-provisioner + tag: v2.1.2 + nodeDriverRegistrar: + repository: longhornio/csi-node-driver-registrar + tag: v2.5.0 + resizer: + repository: longhornio/csi-resizer + tag: v1.3.0 + snapshotter: + repository: longhornio/csi-snapshotter + tag: v5.0.1 + livenessProbe: + repository: longhornio/livenessprobe + tag: v2.8.0 + pullPolicy: IfNotPresent + +service: + ui: + type: ClusterIP + nodePort: null + manager: + type: ClusterIP + nodePort: "" + loadBalancerIP: "" + loadBalancerSourceRanges: "" + +persistence: + defaultClass: true + defaultFsType: ext4 + defaultMkfsParams: "" + defaultClassReplicaCount: 3 + defaultDataLocality: disabled # best-effort otherwise + reclaimPolicy: Delete + migratable: false + recurringJobSelector: + enable: false + jobList: [] + backingImage: + enable: false + name: ~ + dataSourceType: ~ + dataSourceParameters: ~ + expectedChecksum: ~ + defaultNodeSelector: + enable: false # disable by default + selector: [] + removeSnapshotsDuringFilesystemTrim: ignored # "enabled" or "disabled" otherwise + +csi: + kubeletRootDir: "/var/lib/kubelet" + attacherReplicaCount: ~ + provisionerReplicaCount: ~ + resizerReplicaCount: ~ + snapshotterReplicaCount: ~ + +defaultSettings: + backupTarget: ~ + backupTargetCredentialSecret: ~ + allowRecurringJobWhileVolumeDetached: ~ + createDefaultDiskLabeledNodes: ~ + defaultDataPath: ~ + defaultDataLocality: ~ + replicaSoftAntiAffinity: ~ + replicaAutoBalance: ~ + storageOverProvisioningPercentage: ~ + storageMinimalAvailablePercentage: ~ + upgradeChecker: ~ + defaultReplicaCount: ~ + defaultLonghornStaticStorageClass: ~ + backupstorePollInterval: ~ + failedBackupTTL: ~ + restoreVolumeRecurringJobs: ~ + recurringSuccessfulJobsHistoryLimit: ~ + recurringFailedJobsHistoryLimit: ~ + supportBundleFailedHistoryLimit: ~ + taintToleration: ~ + systemManagedComponentsNodeSelector: ~ + priorityClass: ~ + autoSalvage: ~ + autoDeletePodWhenVolumeDetachedUnexpectedly: ~ + disableSchedulingOnCordonedNode: ~ + replicaZoneSoftAntiAffinity: ~ + nodeDownPodDeletionPolicy: ~ + allowNodeDrainWithLastHealthyReplica: ~ + mkfsExt4Parameters: ~ + disableReplicaRebuild: ~ + replicaReplenishmentWaitInterval: ~ + concurrentReplicaRebuildPerNodeLimit: ~ + concurrentVolumeBackupRestorePerNodeLimit: ~ + disableRevisionCounter: ~ + systemManagedPodsImagePullPolicy: ~ + allowVolumeCreationWithDegradedAvailability: ~ + autoCleanupSystemGeneratedSnapshot: ~ + concurrentAutomaticEngineUpgradePerNodeLimit: ~ + backingImageCleanupWaitInterval: ~ + backingImageRecoveryWaitInterval: ~ + guaranteedEngineManagerCPU: ~ + guaranteedReplicaManagerCPU: ~ + kubernetesClusterAutoscalerEnabled: ~ + orphanAutoDeletion: ~ + storageNetwork: ~ + deletingConfirmationFlag: ~ + engineReplicaTimeout: ~ + snapshotDataIntegrity: ~ + snapshotDataIntegrityImmediateCheckAfterSnapshotCreation: ~ + snapshotDataIntegrityCronjob: ~ + removeSnapshotsDuringFilesystemTrim: ~ + fastReplicaRebuildEnabled: ~ + replicaFileSyncHttpClientTimeout: ~ +privateRegistry: + createSecret: ~ + registryUrl: ~ + registryUser: ~ + registryPasswd: ~ + registrySecret: ~ + +longhornManager: + log: + ## Allowed values are `plain` or `json`. + format: plain + priorityClass: ~ + tolerations: [] + ## If you want to set tolerations for Longhorn Manager DaemonSet, delete the `[]` in the line above + ## and uncomment this example block + # - key: "key" + # operator: "Equal" + # value: "value" + # effect: "NoSchedule" + nodeSelector: {} + ## If you want to set node selector for Longhorn Manager DaemonSet, delete the `{}` in the line above + ## and uncomment this example block + # label-key1: "label-value1" + # label-key2: "label-value2" + serviceAnnotations: {} + ## If you want to set annotations for the Longhorn Manager service, delete the `{}` in the line above + ## and uncomment this example block + # annotation-key1: "annotation-value1" + # annotation-key2: "annotation-value2" + +longhornDriver: + priorityClass: ~ + tolerations: [] + ## If you want to set tolerations for Longhorn Driver Deployer Deployment, delete the `[]` in the line above + ## and uncomment this example block + # - key: "key" + # operator: "Equal" + # value: "value" + # effect: "NoSchedule" + nodeSelector: {} + ## If you want to set node selector for Longhorn Driver Deployer Deployment, delete the `{}` in the line above + ## and uncomment this example block + # label-key1: "label-value1" + # label-key2: "label-value2" + +longhornUI: + replicas: 2 + priorityClass: ~ + tolerations: [] + ## If you want to set tolerations for Longhorn UI Deployment, delete the `[]` in the line above + ## and uncomment this example block + # - key: "key" + # operator: "Equal" + # value: "value" + # effect: "NoSchedule" + nodeSelector: {} + ## If you want to set node selector for Longhorn UI Deployment, delete the `{}` in the line above + ## and uncomment this example block + # label-key1: "label-value1" + # label-key2: "label-value2" + +longhornConversionWebhook: + replicas: 2 + priorityClass: ~ + tolerations: [] + ## If you want to set tolerations for Longhorn conversion webhook Deployment, delete the `[]` in the line above + ## and uncomment this example block + # - key: "key" + # operator: "Equal" + # value: "value" + # effect: "NoSchedule" + nodeSelector: {} + ## If you want to set node selector for Longhorn conversion webhook Deployment, delete the `{}` in the line above + ## and uncomment this example block + # label-key1: "label-value1" + # label-key2: "label-value2" + +longhornAdmissionWebhook: + replicas: 2 + priorityClass: ~ + tolerations: [] + ## If you want to set tolerations for Longhorn admission webhook Deployment, delete the `[]` in the line above + ## and uncomment this example block + # - key: "key" + # operator: "Equal" + # value: "value" + # effect: "NoSchedule" + nodeSelector: {} + ## If you want to set node selector for Longhorn admission webhook Deployment, delete the `{}` in the line above + ## and uncomment this example block + # label-key1: "label-value1" + # label-key2: "label-value2" + +longhornRecoveryBackend: + replicas: 2 + priorityClass: ~ + tolerations: [] + ## If you want to set tolerations for Longhorn recovery backend Deployment, delete the `[]` in the line above + ## and uncomment this example block + # - key: "key" + # operator: "Equal" + # value: "value" + # effect: "NoSchedule" + nodeSelector: {} + ## If you want to set node selector for Longhorn recovery backend Deployment, delete the `{}` in the line above + ## and uncomment this example block + # label-key1: "label-value1" + # label-key2: "label-value2" + +ingress: + ## Set to true to enable ingress record generation + enabled: false + + ## Add ingressClassName to the Ingress + ## Can replace the kubernetes.io/ingress.class annotation on v1.18+ + ingressClassName: ~ + + host: sslip.io + + ## Set this to true in order to enable TLS on the ingress record + tls: false + + ## Enable this in order to enable that the backend service will be connected at port 443 + secureBackends: false + + ## If TLS is set to true, you must declare what secret will store the key/certificate for TLS + tlsSecret: longhorn.local-tls + + ## If ingress is enabled you can set the default ingress path + ## then you can access the UI by using the following full path {{host}}+{{path}} + path: / + + ## 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: + +# For Kubernetes < v1.25, if your cluster enables Pod Security Policy admission controller, +# set this to `true` to ship longhorn-psp which allow privileged Longhorn pods to start +enablePSP: false + +## Specify override namespace, specifically this is useful for using longhorn as sub-chart +## and its release namespace is not the `longhorn-system` +namespaceOverride: "" + +# Annotations to add to the Longhorn Manager DaemonSet Pods. Optional. +annotations: {} + +serviceAccount: + # Annotations to add to the service account + annotations: {} diff --git a/examples/longhorn/zarf.yaml b/examples/longhorn/zarf.yaml new file mode 100644 index 0000000000..f356e6abfb --- /dev/null +++ b/examples/longhorn/zarf.yaml @@ -0,0 +1,34 @@ +kind: ZarfPackageConfig +metadata: + name: longhorn-example + description: "Example package for Longhorn cloud native distributed block storage for Kubernetes" +components: + - name: longhorn + required: true + description: "Deploy Longhorn into a Kubernetes cluster. https://longhorn.io" + manifests: + - name: longhorn-connect + namespace: longhorn-system + files: + - connect.yaml + charts: + - name: longhorn + url: https://charts.longhorn.io + version: 1.4.0 + namespace: longhorn-system + valuesFiles: + - "values.yaml" + images: + - longhornio/csi-attacher:v3.4.0 + - longhornio/csi-provisioner:v2.1.2 + - longhornio/csi-resizer:v1.3.0 + - longhornio/csi-snapshotter:v5.0.1 + - longhornio/csi-node-driver-registrar:v2.5.0 + - longhornio/livenessprobe:v2.8.0 + - longhornio/backing-image-manager:v1.4.0 + - longhornio/longhorn-engine:v1.4.0 + - longhornio/longhorn-instance-manager:v1.4.0 + - longhornio/longhorn-manager:v1.4.0 + - longhornio/longhorn-share-manager:v1.4.0 + - longhornio/longhorn-ui:v1.4.0 + - longhornio/support-bundle-kit:v0.0.17