From e352557e519ee1a9b593d687ab1cc18f0a7ceb72 Mon Sep 17 00:00:00 2001 From: addetz <43963729+addetz@users.noreply.github.com> Date: Mon, 9 Sep 2024 19:29:36 +0100 Subject: [PATCH 1/2] feat: add hello-universe 1.2.0 pack DOC-1138 This PR includes a new version of the Hello Universe pack in the Spectro Cloud community repo. It bumps the version of the Hello Universe image to 1.2.0 and the API & DB versions to 1.1.0. Hello Universe is a demo web application that helps users learn more about Palette and its features. --- packs/hello-universe-1.2.0/README.md | 91 +++++ packs/hello-universe-1.2.0/logo.png | Bin 0 -> 88384 bytes .../manifests/hello-universe.yaml | 329 ++++++++++++++++++ packs/hello-universe-1.2.0/pack.json | 15 + packs/hello-universe-1.2.0/presets.yaml | 50 +++ packs/hello-universe-1.2.0/schema.yaml | 104 ++++++ packs/hello-universe-1.2.0/values.yaml | 16 + 7 files changed, 605 insertions(+) create mode 100644 packs/hello-universe-1.2.0/README.md create mode 100644 packs/hello-universe-1.2.0/logo.png create mode 100644 packs/hello-universe-1.2.0/manifests/hello-universe.yaml create mode 100644 packs/hello-universe-1.2.0/pack.json create mode 100644 packs/hello-universe-1.2.0/presets.yaml create mode 100644 packs/hello-universe-1.2.0/schema.yaml create mode 100644 packs/hello-universe-1.2.0/values.yaml diff --git a/packs/hello-universe-1.2.0/README.md b/packs/hello-universe-1.2.0/README.md new file mode 100644 index 00000000..9d4fee71 --- /dev/null +++ b/packs/hello-universe-1.2.0/README.md @@ -0,0 +1,91 @@ +# Hello Universe + +[Hello Universe](https://github.com/spectrocloud/hello-universe) is a demo web application utilized to help users learn more about [Palette](https://docs.spectrocloud.com/introduction) and its features. + +You can deploy it using two preset configurations: +- A standalone front-end application. It provides a frontend for Spacetastic, a fictional company used as a Spectro Cloud use case. It provides multiple pages with facts about space. +- A three-tier application with a front-end application, API server and PostgreSQL database into a Kubernetes cluster. It provides an events counter that is saved in the deployed database which tracks the activity on the Spacetastic pages provided by the frontend. You can read more about this configuration on the Hello Universe [README](https://github.com/spectrocloud/hello-universe?tab=readme-ov-file#reverse-proxy-with-kubernetes). + +## Prerequisites + +- A Palette account. + +- A cluster profile where the Hello Universe pack can be integrated. + +- A Palette cluster with port `:8080` available. If port 8080 is not available, you can set a different port in the **values.yaml** file. + +- If you are using the **Enable Hello Universe API** preset, you will need the `:3000` port available on your cluster too. Check out the [Usage](#usage) section for further details. + +- Ensure sufficient CPU resources within the cluster to allocate a minimum of 500 milliCPU and a maximum of 500 milliCPU per replica. + +## Parameters + +The following parameters are applied to the **hello-universe.yaml** manifest through the **values.yaml** file. Users do not need to take any additional actions regarding these parameters. + +| **Parameter** | **Description** | **Default Value** | **Required** | +| --------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------- | ------------ | +| `manifests.namespace` | The namespace in which the application will be deployed. | `hello-universe` | Yes | +| `manifests.images.hellouniverse` | The [`hello-universe`](https://github.com/spectrocloud/hello-universe) application image that will be utilized to create the containers. | `ghcr.io/spectrocloud/hello-universe:1.2.0`/ `ghcr.io/spectrocloud/hello-universe:1.2.0-proxy` | Yes | +| `manifests.images.hellouniverseapi` | The [`hello-universe-api`](https://github.com/spectrocloud/hello-universe-api) application image that will be utilized to create the containers. | `ghcr.io/spectrocloud/hello-universe-api:1.1.0` | No | +| `manifests.images.hellouniversedb` | The [`hello-universe-db`](https://github.com/spectrocloud/hello-universe-db) application image that will be utilized to create the containers. | `ghcr.io/spectrocloud/hello-universe-db:1.1.0` | No | +| `manifests.apiEnabled` | The flag that indicates whether to deploy the UI application as standalone or together with the API server. | `false` | Yes | +| `manifests.port` | The cluster port number on which the service will listen for incoming traffic. | `8080` | Yes | +| `manifests.replicas` | The number of Pods to be created. | `1` | Yes | +| `manifests.dbPassword` | The base64 encoded database password to connect to the API database. | `REPLACE_ME` | No | +| `manifests.authToken` | The base64 encoded auth token for the API connection. | `REPLACE_ME` | No | +| `manifests.hello-universe.ui.useTolerations` | Flag to indicate whether to use tolerations for the UI pods. | `false` | No | +| `manifests.hello-universe.api.useTolerations` | Flag to indicate whether to use tolerations for the API pods. | `false` | No | +| `manifests.hello-universe.postgres.useTolerations` | Flag to indicate whether to use tolerations for the Postgres pods. | `false` | No | +| `manifests.hello-universe.ui.tolerations.effect` | The toleration effect to use for the Hello Universe UI pods. The allowed values are `PreferNoSchedule`, `NoSchedule` and `NoExecute`. | `PreferNoSchedule` | No | +| `manifests.hello-universe.api.tolerations.effect` | The toleration effect to use for the Hello Universe API pods. The allowed values are `PreferNoSchedule`, `NoSchedule` and `NoExecute`. | `PreferNoSchedule` | No | +| `manifests.hello-universe.postgres.tolerations.effect` | The toleration effect to use for the Hello Universe Postgres pods. The allowed values are `PreferNoSchedule`, `NoSchedule` and `NoExecute`. | `PreferNoSchedule` | No | +| `manifests.hello-universe.ui.tolerations.key` | The tolerations key to use for the Hello Universe UI pods. | `app` | No | +| `manifests.hello-universe.api.tolerations.key` | The tolerations key to use for the Hello Universe API pods. | `app` | No | +| `manifests.hello-universe.postgres.tolerations.key` | The tolerations key to use for the Hello Universe Postgres pods. | `app` | No | +| `manifests.hello-universe.ui.tolerations.value` | The tolerations value to use for the Hello Universe UI pods. | `ui` | No | +| `manifests.hello-universe.api.tolerations.value` | The tolerations value to use for the Hello Universe API pods. | `api` | No | +| `manifests.hello-universe.postgres.tolerations.value` | The tolerations value to use for the Hello Universe Postgres pods. | `postgres` | No | + +## Upgrade + +Upgrades from the [hello-universe-1.1.1](../hello-universe-1.1.1/README.md) pack are not supported. If you want to upgrade the pack, you must first remove it from the cluster profile. Then, you can add the upgraded version as a cluster profile layer. + +## Usage + +The Hello Universe pack has two presets that you can select: +- **Disable Hello Universe API** configures Hello Universe as a standalone frontend application. This is the default configuration of the pack. +- **Enable Hello Universe API** configures Hello Universe as a three-tier application with a frontend, API server, and Postgres database. + +To utilize the Hello Universe pack, create either a [full Palette cluster profile](https://docs.spectrocloud.com/profiles/cluster-profiles/create-cluster-profiles/create-full-profile) or an [add-on Palette cluster profile](https://docs.spectrocloud.com/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/) and add the pack to your profile. You can select the preset you wish to deploy on the cluster profile creation page. + +If your infrastructure provider does not offer a native load balancer solution, such as VMware and MAAS, the [MetalLB](https://docs.spectrocloud.com/integrations/metallb) pack must be included to the cluster profile to help the LoadBalancer service specified in the manifest obtain an IP address. + +After defining the cluster profile, use it to deploy a new cluster or attach it as an add-on profile to an existing cluster. + +Once the cluster status displays **Running** and **Healthy**, access the Hello Universe application through the exposed service URL along with the displayed port number. + +### Tolerations + +The Hello Universe pack provides parameters for providing pod tolerations. These make it possible to provide [Kubernetes Taints](https://docs.spectrocloud.com/clusters/cluster-management/taints/#taints). You can only apply toleration for the UI, API, and Postgres pods. + +The parameters are applied using the `Equal` operator as demonstrated below: + +```yaml + tolerations: + - effect: {{ .Values.ui.tolerations.effect }} + key: {{ .Values.ui.tolerations.key }} + operator: Equal + value: {{ .Values.ui.tolerations.value }} +``` + +## References + +- [Hello Universe GitHub Repository](https://github.com/spectrocloud/hello-universe) + +- [Hello Universe API GitHub Repository](https://github.com/spectrocloud/hello-universe-api) + +- [Deploy a Custom Pack Tutorial](https://docs.spectrocloud.com/registries-and-packs/deploy-pack/) + +- [Registries and Packs](https://docs.spectrocloud.com/registries-and-packs/) + +- [Node Labels and Taints](https://docs.spectrocloud.com/clusters/cluster-management/taints/) diff --git a/packs/hello-universe-1.2.0/logo.png b/packs/hello-universe-1.2.0/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..eeae3434e51b554c16914826c5d992b4f4dd90a7 GIT binary patch literal 88384 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 EKb9;gUjP6A literal 0 HcmV?d00001 diff --git a/packs/hello-universe-1.2.0/manifests/hello-universe.yaml b/packs/hello-universe-1.2.0/manifests/hello-universe.yaml new file mode 100644 index 00000000..cfb34574 --- /dev/null +++ b/packs/hello-universe-1.2.0/manifests/hello-universe.yaml @@ -0,0 +1,329 @@ +{{ if not .Values.apiEnabled }} + +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.namespace }} +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-universe-service + namespace: {{ .Values.namespace }} +spec: + type: LoadBalancer + selector: + app: hello-universe + ports: + - protocol: TCP + port: {{ .Values.port }} + targetPort: 8080 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hello-universe-deployment + namespace: {{ .Values.namespace }} +spec: + replicas: {{ .Values.replicas }} + selector: + matchLabels: + app: hello-universe + template: + metadata: + labels: + app: hello-universe + spec: + containers: + - name: hello-universe + image: {{ .Values.images.hellouniverse }} + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + resources: + requests: + cpu: "100m" # requesting 100 milliCPU + memory: "512Mi" # requesting 512 MiB of memory + limits: + cpu: "200m" # limiting to 200 milliCPU + memory: "1024Mi" # requesting 1024 MiB of memory + +{{ end }} + +{{ if .Values.apiEnabled }} + +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: service-reader +rules: + - apiGroups: [""] + resources: ["services"] + verbs: ["get", "list", "watch"] +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: hello-universe-role + namespace: {{ .Values.namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: service-reader-binding +subjects: + - kind: ServiceAccount + name: hello-universe-role + namespace: {{ .Values.namespace }} +roleRef: + kind: ClusterRole + name: service-reader + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: v1 +kind: Service +metadata: + name: ui + namespace: {{ .Values.namespace }} +spec: + selector: + app: ui + ports: + - protocol: TCP + name: ui + port: {{ .Values.port }} + targetPort: 8080 + - protocol: TCP + name: api + port: 3000 + targetPort: 3000 + type: LoadBalancer +--- +apiVersion: v1 +kind: Secret +metadata: + name: db-password + namespace: {{ .Values.namespace }} +type: Opaque +data: + db-password: {{ .Values.dbPassword }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: auth-token + namespace: {{ .Values.namespace }} +type: Opaque +data: + auth-token: {{ .Values.authToken }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres + namespace: {{ .Values.namespace }} +spec: + selector: + matchLabels: + app: postgres + replicas: 1 + template: + metadata: + labels: + app: postgres + spec: + containers: + - name: postgres + image: {{ .Values.images.hellouniversedb }} + ports: + - containerPort: 5432 + name: postgres + resources: + limits: + memory: "500Mi" + cpu: "500m" + requests: + memory: "500Mi" + cpu: "500m" + {{ if .Values.postgres.useTolerations -}} + tolerations: + - effect: {{ .Values.postgres.tolerations.effect }} + key: {{ .Values.postgres.tolerations.key }} + operator: Equal + value: {{ .Values.postgres.tolerations.value }} + {{- end }} +--- +apiVersion: v1 +kind: Service +metadata: + name: postgres + namespace: {{ .Values.namespace }} +spec: + selector: + app: postgres + ports: + - protocol: TCP + port: 5432 + targetPort: 5432 + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: api + namespace: {{ .Values.namespace }} +spec: + selector: + matchLabels: + app: api + replicas: 1 + template: + metadata: + labels: + app: api + spec: + serviceAccountName: hello-universe-role + containers: + - name: api + image: {{ .Values.images.hellouniverseapi }} + ports: + - containerPort: 3000 + name: api + env: + - name: db-password + valueFrom: + secretKeyRef: + name: db-password + key: db-password + - name: DB_HOST + value: "postgres.{{ .Values.namespace }}.svc.cluster.local" + - name: PORT + value: "3000" + - name: DB_USER + value: "postgres" + - name: DB_NAME + value: "counter" + - name: DB_ENCRYPTION + value: "disable" + - name: DB_INIT + value: "false" + - name: AUTHORIZATION + value: "true" + resources: + limits: + memory: "500Mi" + cpu: "500m" + requests: + memory: "500Mi" + cpu: "500m" + livenessProbe: + httpGet: + path: /api/v1/health + port: 3000 + initialDelaySeconds: 35 + periodSeconds: 3 + readinessProbe: + httpGet: + path: /api/v1/health + port: 3000 + initialDelaySeconds: 30 + periodSeconds: 3 + {{ if .Values.api.useTolerations -}} + tolerations: + - effect: {{ .Values.api.tolerations.effect }} + key: {{ .Values.api.tolerations.key }} + operator: Equal + value: {{ .Values.api.tolerations.value }} + {{- end }} +--- +apiVersion: v1 +kind: Service +metadata: + name: api + namespace: {{ .Values.namespace }} +spec: + selector: + app: api + ports: + - protocol: TCP + port: 3000 + targetPort: 3000 + type: ClusterIP # If you want to expose the API service, change this value to LoadBalancer. See below for an example. + # type: Loadbalancer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ui + namespace: {{ .Values.namespace }} +spec: + selector: + matchLabels: + app: ui + replicas: {{ .Values.replicas }} + template: + metadata: + labels: + app: ui + spec: + serviceAccountName: hello-universe-role + initContainers: + - name: init-container + image: busybox + command: + ["/bin/sh", "-c", "echo 'sleeping for 30 seconds' && sleep 30"] + containers: + - name: ui + image: {{ .Values.images.hellouniverse }} + imagePullPolicy: Always + ports: + - containerPort: 8080 + name: ui + env: + - name: TOKEN + valueFrom: + secretKeyRef: + name: auth-token + key: auth-token + - name: API_URI + # Leave empty and set QUERY_K8S_API to true to leverage a single loadbalancer. + # Otherwise, set to the API service's URL and set QUERY_K8S_API to false + value: "" + - name: SVC_URI + value: "api.{{ .Values.namespace }}.svc.cluster.local:3000" + - name: API_VERSION + value: "1" + - name: QUERY_K8S_API + value: "true" + resources: + limits: + memory: "500Mi" + cpu: "500m" + requests: + memory: "500Mi" + cpu: "500m" + livenessProbe: + httpGet: + path: / + port: 8080 + initialDelaySeconds: 40 + periodSeconds: 3 + readinessProbe: + httpGet: + path: / + port: 8080 + initialDelaySeconds: 35 + periodSeconds: 3 + {{ if .Values.ui.useTolerations -}} + tolerations: + - effect: {{ .Values.ui.tolerations.effect }} + key: {{ .Values.ui.tolerations.key }} + operator: Equal + value: {{ .Values.ui.tolerations.value }} + {{- end }} +{{ end }} diff --git a/packs/hello-universe-1.2.0/pack.json b/packs/hello-universe-1.2.0/pack.json new file mode 100644 index 00000000..00c53c88 --- /dev/null +++ b/packs/hello-universe-1.2.0/pack.json @@ -0,0 +1,15 @@ +{ + "addonType": "app services", + "annotations": { + "source": "community", + "contributor": "spectrocloud" + }, + "cloudTypes": ["all"], + "displayName": "Hello Universe", + "kubeManifests": [ + "manifests/hello-universe.yaml" + ], + "layer": "addon", + "name": "hello-universe", + "version": "1.2.0" +} diff --git a/packs/hello-universe-1.2.0/presets.yaml b/packs/hello-universe-1.2.0/presets.yaml new file mode 100644 index 00000000..2ded6575 --- /dev/null +++ b/packs/hello-universe-1.2.0/presets.yaml @@ -0,0 +1,50 @@ +presets: + - name: "disable-api" + displayName: "Disable Hello Universe API" + group: "Backend" + remove: [] + add: | + manifests: + hello-universe: + images: + hellouniverse: ghcr.io/spectrocloud/hello-universe:1.2.0 + apiEnabled: false + namespace: hello-universe + port: 8080 + replicas: 1 + + - name: "enable-api" + displayName: "Enable Hello Universe API" + group: "Backend" + remove: [] + add: | + manifests: + hello-universe: + images: + hellouniverse: ghcr.io/spectrocloud/hello-universe:1.2.0-proxy + hellouniverseapi: ghcr.io/spectrocloud/hello-universe-api:1.1.0 + hellouniversedb: ghcr.io/spectrocloud/hello-universe-db:1.1.0 + apiEnabled: true + namespace: hello-universe + port: 8080 + replicas: 1 + dbPassword: REPLACE_ME # Add base64 encoded password + authToken: REPLACE_ME # Add base64 encoded token + ui: + useTolerations: false + tolerations: + effect: PreferNoSchedule + key: app + value: ui + api: + useTolerations: false + tolerations: + effect: PreferNoSchedule + key: app + value: api + postgres: + useTolerations: false + tolerations: + effect: PreferNoSchedule + key: app + value: postgres diff --git a/packs/hello-universe-1.2.0/schema.yaml b/packs/hello-universe-1.2.0/schema.yaml new file mode 100644 index 00000000..a4609c29 --- /dev/null +++ b/packs/hello-universe-1.2.0/schema.yaml @@ -0,0 +1,104 @@ +manifests.hello-universe.namespace: + # The namespace in which the UI application will be deployed. + # The namespace should be specified as a string. + schema: '{{ required | format "${string}" | hints "Enter the namespace in which the application will be deployed."}}' + +manifests.hello-universe.images.hellouniverse: + # The application image. + # Ensure that the image follows the required format: registry/repository:version. + schema: '{{ required | format "${string}" | hints "Enter the UI application image. Ensure that it follows the required format: registry/repository:version." }}' + +manifests.hello-universe.images.hellouniverseapi: + # The hello-universe-api application image. + # Ensure that the image follows the required format: registry/repository:version. + schema: '{{ format "${string}" | hints "Enter the API application image. Ensure that it follows the required format: registry/repository:version." }}' + +manifests.hello-universe.images.hellouniversedb: + # The hello-universe-db application image. + # Ensure that the image follows the required format: registry/repository:version. + schema: '{{ format "${string}" | hints "Enter the API application image. Ensure that it follows the required format: registry/repository:version." }}' + +manifests.hello-universe.port: + # The cluster port number on which the UI service will listen for incoming traffic. + # The port should be specified as a number. + schema: '{{ required | format "${number}" | hints "Enter the cluster port number on which the UI service will listen for incoming traffic."}}' + +manifests.hello-universe.replicas: + # The number of replicas of the UI application to be created. + # The replicas should be specified as a number. + schema: '{{ required | format "${number}" | hints "Enter the number of replicas of the UI application."}}' + +manifests.hello-universe.dbPassword: + # The database password to connect the hello-universe-api to the hello-universe-db. + # The password should be specified as a base64 encoded string. + schema: '{{ format "${string}" | hints "Enter the base64 encoded database password to connect to."}}' + +manifests.hello-universe.authToken: + # The auth token to connect the hello-universe-api to the hello-universe-db. + # The token should be specified as a base64 encoded string. + schema: '{{ format "${string}" | hints "Enter the base64 encoded auth token to connect to the API with."}}' + +manifests.hello-universe.apiEnabled: + # Flag to indicate whether Hello Universe should be deployed with API server or not. + # The flag should be specified with true or false. + schema: '{{ required | format "${boolean}" | hints "Enter whether to deploy Hello Universe as a three-tier application."}}' + +manifests.hello-universe.ui.useTolerations: + # Flag to indicate whether to use tolerations for the UI pods. + # The flag should be specified with true or false. + schema: '{{ format "${boolean}" | hints "Enter whether to use toleratios for the Hello Universe UI pods."}}' + +manifests.hello-universe.api.useTolerations: + # Flag to indicate whether to use tolerations for the API pods. + # The flag should be specified with true or false. + schema: '{{ format "${boolean}" | hints "Enter whether to use toleratios for the Hello Universe API pods."}}' + +manifests.hello-universe.postgres.useTolerations: + # Flag to indicate whether to use tolerations for the postgres pods. + # The flag should be specified with true or false. + schema: '{{ format "${boolean}" | hints "Enter whether to use toleratios for the Hello Universe API pods."}}' + +manifests.hello-universe.ui.tolerations.effect: + # The toleration effect to use for the Hello Universe UI pods. + # The allowed values are PreferNoSchedule, NoSchedule and NoExecute. + schema: '{{ format "${list:[PreferNoSchedule,NoSchedule,NoExecute]}" | hints "Enter the toleration effect for the UI pods."}}' + +manifests.hello-universe.api.tolerations.effect: + # The effect to use for the Hello Universe API pods. + # The allowed values are PreferNoSchedule, NoSchedule and NoExecute. + schema: '{{ format "${list:[PreferNoSchedule,NoSchedule,NoExecute]}" | hints "Enter the toleration effect for the API pods."}}' + +manifests.hello-universe.postgres.tolerations.effect: + # The effect to use for the Hello Universe API pods. + # The allowed values are PreferNoSchedule, NoSchedule and NoExecute. + schema: '{{ format "${list:[PreferNoSchedule,NoSchedule,NoExecute]}" | hints "Enter the toleration effect for the Postgres pods."}}' + +manifests.hello-universe.ui.tolerations.key: + # The tolerations key to use for the Hello Universe UI pods. + # The key should be specified as a string. + schema: '{{ format "${string}" | hints "Enter the toleration key for the UI pods."}}' + +manifests.hello-universe.api.tolerations.key: + # The tolerations key to use for the Hello Universe API pods. + # The key should be specified as a string. + schema: '{{ format "${string}" | hints "Enter the toleration key for the API pods."}}' + +manifests.hello-universe.postgres.tolerations.key: + # The tolerations key to use for the Hello Universe Postgres pods. + # The key should be specified as a string. + schema: '{{ format "${string}" | hints "Enter the toleration key for the Postgres pods."}}' + +manifests.hello-universe.ui.tolerations.value: + # The tolerations value to use for the Hello Universe UI pods. + # The value should be specified as a string. + schema: '{{ format "${string}" | hints "Enter the toleration value for the UI pods."}}' + +manifests.hello-universe.api.tolerations.value: + # The tolerations value to use for the Hello Universe API pods. + # The value should be specified as a string. + schema: '{{ format "${string}" | hints "Enter the toleration value for the API pods."}}' + +manifests.hello-universe.postgres.tolerations.value: + # The tolerations value to use for the Hello Universe Postgres pods. + # The value should be specified as a string. + schema: '{{ format "${string}" | hints "Enter the toleration value for the Postgres pods."}}' diff --git a/packs/hello-universe-1.2.0/values.yaml b/packs/hello-universe-1.2.0/values.yaml new file mode 100644 index 00000000..dd4e0824 --- /dev/null +++ b/packs/hello-universe-1.2.0/values.yaml @@ -0,0 +1,16 @@ +# spectrocloud.com/enabled-presets: Backend:disable-api + +pack: + content: + images: + - image: ghcr.io/spectrocloud/hello-universe:1.2.0 + + +manifests: + hello-universe: + images: + hellouniverse: ghcr.io/spectrocloud/hello-universe:1.2.0 + apiEnabled: false + namespace: hello-universe + port: 8080 + replicas: 1 From b4ed8e27d6da0f8ba67a43600ae255cfc8560e55 Mon Sep 17 00:00:00 2001 From: addetz <43963729+addetz@users.noreply.github.com> Date: Wed, 11 Sep 2024 13:25:46 +0100 Subject: [PATCH 2/2] docs: adjust CPU prerequisites --- packs/hello-universe-1.1.2/README.md | 2 +- packs/hello-universe-1.1.3/README.md | 2 +- packs/hello-universe-1.2.0/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packs/hello-universe-1.1.2/README.md b/packs/hello-universe-1.1.2/README.md index 3b1bbf98..379d2c36 100644 --- a/packs/hello-universe-1.1.2/README.md +++ b/packs/hello-universe-1.1.2/README.md @@ -16,7 +16,7 @@ You can deploy it using two preset configurations: - If you are using the **Enable Hello Universe API** preset, you will need the `:3000` port available on your cluster too. Check out the [Usage](#usage) section for further details. -- Ensure sufficient CPU resources within the cluster to allocate a minimum of 500 milliCPU and a maximum of 500 milliCPU per replica. +- Ensure sufficient CPU resources within the cluster to allocate a minimum of 100 milliCPU and a maximum of 200 milliCPU per replica. ## Parameters diff --git a/packs/hello-universe-1.1.3/README.md b/packs/hello-universe-1.1.3/README.md index 0995f9f6..61970248 100644 --- a/packs/hello-universe-1.1.3/README.md +++ b/packs/hello-universe-1.1.3/README.md @@ -16,7 +16,7 @@ You can deploy it using two preset configurations: - If you are using the **Enable Hello Universe API** preset, you will need the `:3000` port available on your cluster too. Check out the [Usage](#usage) section for further details. -- Ensure sufficient CPU resources within the cluster to allocate a minimum of 500 milliCPU and a maximum of 500 milliCPU per replica. +- Ensure sufficient CPU resources within the cluster to allocate a minimum of 100 milliCPU and a maximum of 200 milliCPU per replica. ## Parameters diff --git a/packs/hello-universe-1.2.0/README.md b/packs/hello-universe-1.2.0/README.md index 9d4fee71..8c67d50d 100644 --- a/packs/hello-universe-1.2.0/README.md +++ b/packs/hello-universe-1.2.0/README.md @@ -16,7 +16,7 @@ You can deploy it using two preset configurations: - If you are using the **Enable Hello Universe API** preset, you will need the `:3000` port available on your cluster too. Check out the [Usage](#usage) section for further details. -- Ensure sufficient CPU resources within the cluster to allocate a minimum of 500 milliCPU and a maximum of 500 milliCPU per replica. +- Ensure sufficient CPU resources within the cluster to allocate a minimum of 100 milliCPU and a maximum of 200 milliCPU per replica. ## Parameters