diff --git a/charts/v3.4.7/Chart.yaml b/charts/v3.4.7/Chart.yaml new file mode 100644 index 0000000..7a427c9 --- /dev/null +++ b/charts/v3.4.7/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v2 +name: cloudcasa +version: "3.4.7" +appVersion: "3.1.0" +kubeVersion: ">=1.20.0-0" +description: CloudCasa backup, DR, and migration service agent for Kubernetes +annotations: + charts.openshift.io/name: CloudCasa Agent + cloudcasa.io/installation-method: "helm" +home: https://cloudcasa.io +icon: https://raw.githubusercontent.com/catalogicsoftware/cloudcasa-helmchart/gh-pages/logo.png +keywords: + - backup + - restore + - migration + - catalogic + - cloudcasa + - velero +maintainers: + - name: CloudCasa Support + email: support@cloudcasa.io diff --git a/charts/v3.4.7/README.md b/charts/v3.4.7/README.md new file mode 100644 index 0000000..e631b3c --- /dev/null +++ b/charts/v3.4.7/README.md @@ -0,0 +1,111 @@ +# CloudCasa Kubernetes Agent + +[CloudCasa](https://cloudcasa.io) - Leader in Kubernetes Data Protection and Application Resilience + +# Introduction + +CloudCasa is a data protection, disaster recovery, migration, and replication solution for Kubernetes and cloud-native applications. Configuration is quick and easy, and trial service is free. + +CloudCasa provides centralized backup, DR, and migration services for large, complex, multi-cluster, multi-cloud, and hybrid cloud environments. It includes multi-cloud account integration, managed backup storage, and advanced cross-cloud recovery. + +With CloudCasa you don't need to be a storage or data protection expert to back up and restore your Kubernetes clusters. + +This Helm chart installs and configures the CloudCasa agent on a Kubernetes cluster. +See the CloudCasa [Getting Started Guide](https://cloudcasa.io/get-started) for more information. + +## Prerequisites + +1. Kubernetes 1.20+ +2. Helm 3.0+ + +## CloudCasa Deployment Options + +CloudCasa supports both SaaS and self-hosted deployment models: + +- **SaaS**: Use the default CloudCasa cloud-hosted service at https://home.cloudcasa.io +- **Self-Hosted**: Deploy CloudCasa in your own environment and configure the agent to connect to your self-hosted instance + +## Installation + +### Installing the CloudCasa Agent with SaaS + +1. Log in to https://home.cloudcasa.io and add your Kubernetes cluster under Clusters/Overview. Note the returned cluster ID. +2. Add the CloudCasa Helm repo to your Helm configuration, if it hasn't been added already. + ``` + $ helm repo add cloudcasa-repo https://catalogicsoftware.github.io/cloudcasa-helmchart + ``` +3. To install the agent, execute the following helm commands, replacing `````` with the Cluster ID obtained above: + ``` + $ helm repo update + $ helm install cloudcasa cloudcasa-repo/cloudcasa --set clusterID= + ``` +This will install the CloudCasa agent and complete registration of the cluster with the CloudCasa service. + +### Installing the CloudCasa Agent with Self-Hosted + +For self-hosted CloudCasa deployments, configure the server address and TLS settings: + +1. Obtain your cluster ID from your self-hosted CloudCasa instance. +2. Add the CloudCasa Helm repo to your Helm configuration, if it hasn't been added already. + ``` + $ helm repo add cloudcasa-repo https://catalogicsoftware.github.io/cloudcasa-helmchart + ``` +3. To install the agent, execute the following helm commands, replacing the parameters with your self-hosted instance details: + ``` + $ helm repo update + $ helm install cloudcasa cloudcasa-repo/cloudcasa \ + --set clusterID= \ + --set server.address=: \ + --set server.skipTLSVerification= \ + --set image.repository=/ \ + --set image.tag= + ``` + +**Server Configuration Parameters:** +- `server.address`: The address and port of your self-hosted CloudCasa server (default: agent.cloudcasa.io:443) +- `server.skipTLSVerification`: Skip TLS certificate verification (default: false) - useful for self-signed certificates in testing + +**Container Image Parameters:** +- `image.repository`: The container registry and image name for your self-hosted environment (default: cloudcasaAgent.azurecr.io/catalogicsoftware/amds-kagent) +- `image.tag`: The image tag to use (default: 3.1.0-prod) + +**Note:** For self-hosted deployments, ensure that the container image is available in your specified container registry and that the Kubernetes cluster has the necessary permissions to pull the image. If your registry requires authentication, you can use the `imagePullSecret` parameter to reference a Kubernetes secret with registry credentials. + +### Updating the CloudCasa Agent +1. Log in to https://home.cloudcasa.io (for SaaS) or your self-hosted instance and obtain the cluster ID for your cluster. You can also obtain the current setting with the command ```helm get values cloudcasa```. +2. Execute the following commands to update the agent, replacing `````` with the Cluster ID obtained above: + ``` + $ helm repo update + $ helm upgrade cloudcasa cloudcasa-repo/cloudcasa --set clusterID= + ``` + For self-hosted deployments, also include the `--set server.address=...` parameters as shown in the self-hosted installation section above. + +### Uninstalling the CloudCasa Agent +1. Execute the following commands to uninstall CloudCasa. + ``` + $ helm uninstall cloudcasa + ``` + +2. If you manually created the cloudcasa-io namespace in order to supply a container registry authentication secret (see below), +you may need to manually delete the namespace after uninstall with the command `kubectl delete namespace cloudcasa-io`. + +3. CloudCasa creates some custom resource definitions on installation, which you can remove manually with the command `kubectl delete crd -l component=kubeagent-backup-helper`. + +### Using an alternate image repository + +The agent manager container can be installed from an alternate repository by setting values for image.repository and image.tag. +Add the options --set image.repository= and/or --set image.tag= to the helm install command. + +Note that the alternate repository will also need to be set for the cluster in CloudCasa so that all agent containers will be loaded from it. +See the [CloudCasa User Guide](https://docs.cloudcasa.io/help/cluster-add.html) for more information. + +If the registry you are using requires authentication, you can define a Kubernetes secret with the authentication information +and reference it by setting a value for imagePullSecret. Example: "--set imagePullSecret=registrySecret". +See the [Kubernetes Docs](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) for more information. +Note that the secret must be created in the cloudcasa-io namespace, so you may need to create the namespace first. +Also note that when uninstalling the agent, you may need to delete the cloudcasa-io namespace manually after running helm uninstall with "kubectl delete namespace cloudcasa-io". + +Finally, the secret name will also need to be set in CloudCasa for the cluster, so that it will be used for all agent containers. +See the [CloudCasa User Guide](https://docs.cloudcasa.io/help/cluster-add.html) for more information. + +*CloudCasa is a trademark of Catalogic Software, Inc.* diff --git a/charts/v3.4.7/templates/NOTES.txt b/charts/v3.4.7/templates/NOTES.txt new file mode 100644 index 0000000..0fd3e39 --- /dev/null +++ b/charts/v3.4.7/templates/NOTES.txt @@ -0,0 +1,15 @@ +Please be patient while the CloudCasa agent is being deployed. It may take several minutes. + +The agent is configured with cluster ID: {{ .Values.clusterID }} + +Once the agent completes startup, the state shown for the cluster in the CloudCasa Clusters/Overview +page will change to "Active". If the cluster stays in the "Registered" or "Pending" state, you may have provided the wrong ClusterID. + +{{- if eq .Values.server.address "agent.cloudcasa.io:443" }} +For SaaS deployments, visit: https://home.cloudcasa.io/clusters/overview +{{- else }} +For self-hosted deployments, check your CloudCasa instance's UI at the appropriate URL for your self-hosted environment. +{{- end }} + +You can check the agent deployment status using the command: kubectl get pods -n cloudcasa-io + diff --git a/charts/v3.4.7/templates/cluster-register.yaml b/charts/v3.4.7/templates/cluster-register.yaml new file mode 100644 index 0000000..cc6df54 --- /dev/null +++ b/charts/v3.4.7/templates/cluster-register.yaml @@ -0,0 +1,105 @@ +--- +# This list contains the CloudCasa Agent Manager and RBAC resources +# required to deploy the Cloudcasa agent. +apiVersion: v1 +kind: List +metadata: + name: cloudcasa-agent +items: +{{- if not (lookup "v1" "Namespace" "cloudcasa-io" "cloudcasa-io") }} +- apiVersion: v1 + kind: Namespace + metadata: + creationTimestamp: null + labels: + component: kubeagent-backup-helper + name: cloudcasa-io + spec: {} +{{- end }} +- apiVersion: v1 + kind: ServiceAccount + metadata: + creationTimestamp: null + labels: + component: kubeagent-backup-helper + name: cloudcasa-io + namespace: cloudcasa-io +- apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + creationTimestamp: null + labels: + component: kubeagent-backup-helper + name: cloudcasa-io + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin + subjects: + - kind: ServiceAccount + name: cloudcasa-io + namespace: cloudcasa-io +- apiVersion: apps/v1 + kind: Deployment + metadata: + name: cloudcasa-kubeagent-manager + namespace: cloudcasa-io + labels: + component: cloudcasa-kubeagent-manager + spec: + selector: + matchLabels: + app: cloudcasa-kubeagent-manager + strategy: + type: Recreate + replicas: 1 + template: + metadata: + labels: + app: cloudcasa-kubeagent-manager + spec: + {{- if .Values.imagePullSecret }} + imagePullSecrets: + - name: {{ .Values.imagePullSecret | quote }} + {{- end }} + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + args: ["/usr/local/bin/kubeagentmanager", "--server_addr", "{{ .Values.server.address }}", "--tls", "true", "--skip_tls_verification", "{{ .Values.server.skipTLSVerification }}"] + name: kubeagentmanager + resources: + requests: + memory: "64Mi" + cpu: "250m" + limits: + memory: "128Mi" + cpu: "500m" + volumeMounts: + - mountPath: /scratch + name: scratch + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: AMDS_CLUSTER_ID + value: {{ .Values.clusterID }} + - name: KUBEMOVER_IMAGE + value: {{ .Values.image.repository }}:{{ .Values.image.tag }} + - name: DEPLOYMENT_PLATFORM + {{- if (lookup "v1" "Namespace" "" "cattle-system") }} + value: "rancher" + {{- else if (lookup "v1" "Namespace" "" "openshift") }} + value: "openshift" + {{- else }} + value: "other" + {{- end }} + - name: AGENT_INSTALLATION_METHOD + value: {{ (index .Chart.Annotations "cloudcasa.io/installation-method" | default "helm") | quote }} + - name: GRPC_ENFORCE_ALPN_ENABLED + value: "false" + restartPolicy: Always + terminationGracePeriodSeconds: 0 + serviceAccountName: cloudcasa-io + volumes: + - emptyDir: {} + name: scratch diff --git a/charts/v3.4.7/templates/tests/test-agent.yaml b/charts/v3.4.7/templates/tests/test-agent.yaml new file mode 100644 index 0000000..e49be0e --- /dev/null +++ b/charts/v3.4.7/templates/tests/test-agent.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "cloudcasa-test-agent" + namespace: cloudcasa-io + annotations: + "helm.sh/hook": test +spec: + {{ if .Values.imagePullSecret }} + imagePullSecrets: + - name: {{ .Values.imagePullSecret | quote }} + {{ end }} + containers: + - name: kubeagentmanager-test + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + command: ["bin/bash", "-c"] + args: + - kubectl get deployment cloudcasa-kubeagent-manager + - -o=jsonpath='{.status.conditions[?(@.type=="Available")].status}' | + - grep -q "True" + serviceAccountName: cloudcasa-io + restartPolicy: Never diff --git a/charts/v3.4.7/values.schema.json b/charts/v3.4.7/values.schema.json new file mode 100644 index 0000000..7cd10e6 --- /dev/null +++ b/charts/v3.4.7/values.schema.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Values", + "type": "object", + "properties": { + "clusterID": { + "description": "Cluster ID", + "type": "string" + }, + "image": { + "description": "Container Image", + "type": "object", + "properties": { + "repository": { + "type": "string" + }, + "tag": { + "type": "string" + } + }, + "required": [ + "repository", + "tag" + ] + }, + "imagePullSecret": { + "description": "Name of secret to use for image registry credentials", + "type": [ + "string", + "null" + ] + }, + "server": { + "description": "CloudCasa server configuration", + "type": "object", + "properties": { + "address": { + "description": "Server address and port", + "type": "string" + }, + "skipTLSVerification": { + "description": "Skip TLS certificate verification (useful for self-signed certificates)", + "type": "boolean" + } + }, + "required": [ + "address", + "skipTLSVerification" + ] + } + }, + "required": [ + "image" + ] +} \ No newline at end of file diff --git a/charts/v3.4.7/values.yaml b/charts/v3.4.7/values.yaml new file mode 100644 index 0000000..6ae5aeb --- /dev/null +++ b/charts/v3.4.7/values.yaml @@ -0,0 +1,15 @@ +# clusterID is the CloudCasa Cluster ID. To be provided by the user. +clusterID: "" + +# image is the container repository and tag for the agent manager +image: + repository: "cloudcasaAgent.azurecr.io/catalogicsoftware/amds-kagent" + tag: "3.1.0-prod" + +# imagePullSecret is the name of the secret to use for image registry credentials (optional) +imagePullSecret: + +# server is the configuration for the CloudCasa server. +server: + address: "agent.cloudcasa.io:443" + skipTLSVerification: false