diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 96a12f89e4..80a946b129 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -15,4 +15,4 @@ /quickstarts/whereami/ @theemadnes @yoshi-approver @GoogleCloudPlatform/dee-platform-ops /security/language-vulns/ @yoshi-approver @GoogleCloudPlatform/dee-platform-ops /streaming/ @aburhan @pwschuurman @yoshi-approver @GoogleCloudPlatform/dee-platform-ops -/windows/ @ibabou @yoshi-approver @GoogleCloudPlatform/dee-platform-ops +/windows/ @ibabou @yoshi-approver @GoogleCloudPlatform/dee-platform-ops \ No newline at end of file diff --git a/.github/workflows/app-design-center-ci.yml b/.github/workflows/app-design-center-ci.yml new file mode 100644 index 0000000000..9c847123f4 --- /dev/null +++ b/.github/workflows/app-design-center-ci.yml @@ -0,0 +1,53 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: app-design-center-ci +"on": + push: + branches: + - main + paths: + - .github/workflows/app-design-center-ci.yml + - app-design-center/** + pull_request: + paths: + - .github/workflows/app-design-center-ci.yml + - app-design-center/** +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Helm + uses: azure/setup-helm@v4 + - name: Lint, template, and dry-run app-design-center/ai-inference + run: | + helm lint app-design-center/ai-inference + helm template app-design-center/ai-inference + helm template ai-inference-test app-design-center/ai-inference + - name: Lint, template, and dry-run app-design-center/enterprise-production + run: | + helm lint app-design-center/enterprise-production + helm template app-design-center/enterprise-production + helm template enterprise-production-test app-design-center/enterprise-production + - name: Lint, template, and dry-run app-design-center/simple-app-multi-region + run: | + helm lint app-design-center/simple-app-multi-region + helm template app-design-center/simple-app-multi-region + helm template simple-app-multi-region-test app-design-center/simple-app-multi-region + - name: Lint, template, and dry-run app-design-center/simple-app-single-region + run: | + helm lint app-design-center/simple-app-single-region + helm template app-design-center/simple-app-single-region + helm template simple-app-single-region-test app-design-center/simple-app-single-region \ No newline at end of file diff --git a/app-design-center/ai-inference/Chart.yaml b/app-design-center/ai-inference/Chart.yaml new file mode 100644 index 0000000000..9a04291944 --- /dev/null +++ b/app-design-center/ai-inference/Chart.yaml @@ -0,0 +1,20 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v2 +name: gemma +description: A Helm chart for deploying the Gemma 2 27B model for inference +type: application +version: 0.1.0 +appVersion: "1.0" \ No newline at end of file diff --git a/app-design-center/ai-inference/README.md b/app-design-center/ai-inference/README.md new file mode 100644 index 0000000000..d9d99bfd0b --- /dev/null +++ b/app-design-center/ai-inference/README.md @@ -0,0 +1,3 @@ +# AI Inference Helm Chart + +These samples show how to deploy a Gemma 2 27B model for inference. Visit https://cloud.google.com/kubernetes-engine/docs/ to follow the tutorial. diff --git a/app-design-center/ai-inference/templates/_helpers.tpl b/app-design-center/ai-inference/templates/_helpers.tpl new file mode 100644 index 0000000000..9d610b7d07 --- /dev/null +++ b/app-design-center/ai-inference/templates/_helpers.tpl @@ -0,0 +1,66 @@ +{{/* +Copyright 2025 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "gemma.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). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "gemma.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart labels for a chart. +*/}} +{{- define "gemma.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "gemma.labels" -}} +helm.sh/chart: {{ include "gemma.chart" . }} +{{ include "gemma.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "gemma.selectorLabels" -}} +app.kubernetes.io/name: {{ include "gemma.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} \ No newline at end of file diff --git a/app-design-center/ai-inference/templates/deployment.yaml b/app-design-center/ai-inference/templates/deployment.yaml new file mode 100644 index 0000000000..d5a3eeaad5 --- /dev/null +++ b/app-design-center/ai-inference/templates/deployment.yaml @@ -0,0 +1,74 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "gemma.fullname" . }} + labels: + {{- include "gemma.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "gemma.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "gemma.selectorLabels" . | nindent 8 }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + args: + - --model=$(MODEL_ID) + - --disable-log-requests + - --tensor-parallel-size={{ .Values.tensorParallelSize }} + - --max-num-seq=512 + - --gpu-memory-utilization=0.95 + - --num-scheduler-steps=8 + - --max-model-len={{ .Values.maxModelLen }} + command: + - python3 + - -m + - vllm.entrypoints.openai.api_server + env: + - name: MODEL_ID + value: {{ .Values.model.id }} + - name: HUGGING_FACE_HUB_TOKEN + valueFrom: + secretKeyRef: + key: hf_api_token + name: {{ .Values.model.hfSecret }} + ports: + - containerPort: 8000 + name: metrics + readinessProbe: + failureThreshold: 6000 + httpGet: + path: /health + port: 8000 + periodSeconds: 10 + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumeMounts: + - mountPath: /dev/shm + name: dshm + nodeSelector: + {{- toYaml .Values.nodeSelector | nindent 8 }} + volumes: + - emptyDir: + medium: Memory + name: dshm diff --git a/app-design-center/ai-inference/templates/hpa.yaml b/app-design-center/ai-inference/templates/hpa.yaml new file mode 100644 index 0000000000..13a3a39eb3 --- /dev/null +++ b/app-design-center/ai-inference/templates/hpa.yaml @@ -0,0 +1,37 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{- if .Values.hpa.enabled }} +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "gemma.fullname" . }} + labels: + {{- include "gemma.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "gemma.fullname" . }} + minReplicas: {{ .Values.hpa.minReplicas }} + maxReplicas: {{ .Values.hpa.maxReplicas }} + metrics: + - pods: + metric: + name: prometheus.googleapis.com|vllm:gpu_cache_usage_perc|gauge + target: + averageValue: 504m + type: AverageValue + type: Pods +{{- end }} \ No newline at end of file diff --git a/app-design-center/ai-inference/templates/pdb.yaml b/app-design-center/ai-inference/templates/pdb.yaml new file mode 100644 index 0000000000..a4df308d4f --- /dev/null +++ b/app-design-center/ai-inference/templates/pdb.yaml @@ -0,0 +1,27 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{ if .Values.pdb.enabled -}} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "gemma.fullname" . }} + labels: + {{- include "gemma.labels" . | nindent 4 }} +spec: + minAvailable: {{ .Values.pdb.minAvailable }} + selector: + matchLabels: + {{- include "gemma.selectorLabels" . | nindent 6 }} +{{- end }} \ No newline at end of file diff --git a/app-design-center/ai-inference/templates/service.yaml b/app-design-center/ai-inference/templates/service.yaml new file mode 100644 index 0000000000..1badeab238 --- /dev/null +++ b/app-design-center/ai-inference/templates/service.yaml @@ -0,0 +1,29 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: Service +metadata: + name: {{ include "gemma.fullname" . }} + labels: + {{- include "gemma.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: 8000 + targetPort: 8000 + protocol: TCP + name: http + selector: + {{- include "gemma.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/app-design-center/ai-inference/values.yaml b/app-design-center/ai-inference/values.yaml new file mode 100644 index 0000000000..b8c5107e55 --- /dev/null +++ b/app-design-center/ai-inference/values.yaml @@ -0,0 +1,57 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Default values for gemma chart. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: vllm/vllm-openai + tag: v0.7.2 + pullPolicy: IfNotPresent + +model: + id: google/gemma-7b-it + hfSecret: hf-secret + +resources: + limits: + nvidia.com/gpu: "1" + requests: + nvidia.com/gpu: "1" + +nodeSelector: + cloud.google.com/gke-accelerator: nvidia-l4 + +hpa: + enabled: true + minReplicas: 1 + maxReplicas: 10 + targetCPUUtilizationPercentage: 80 + +# -- Number of GPUs to distribute the model across +tensorParallelSize: 1 + +# -- Maximum sequence length for the model +maxModelLen: 512 + +service: + type: ClusterIP + port: 80 + +pdb: + enabled: true + minAvailable: 1 \ No newline at end of file diff --git a/app-design-center/enterprise-production/Chart.yaml b/app-design-center/enterprise-production/Chart.yaml new file mode 100644 index 0000000000..40339f6adb --- /dev/null +++ b/app-design-center/enterprise-production/Chart.yaml @@ -0,0 +1,20 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law. or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v2 +name: enterprise-app +description: A Helm chart for deploying a stateless web application +type: application +version: 0.1.0 +appVersion: "2.0" \ No newline at end of file diff --git a/app-design-center/enterprise-production/README.md b/app-design-center/enterprise-production/README.md new file mode 100644 index 0000000000..4a1a43c1f1 --- /dev/null +++ b/app-design-center/enterprise-production/README.md @@ -0,0 +1,3 @@ +# Enterprise Production Helm Chart + +These samples show how to deploy a stateless web application for production. Visit https://cloud.google.com/kubernetes-engine/docs/ to follow the tutorial. diff --git a/app-design-center/enterprise-production/templates/_helpers.tpl b/app-design-center/enterprise-production/templates/_helpers.tpl new file mode 100644 index 0000000000..42ca6e87a9 --- /dev/null +++ b/app-design-center/enterprise-production/templates/_helpers.tpl @@ -0,0 +1,85 @@ +{{/* +Copyright 2025 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} +{{/* +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). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "enterprise_app.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "enterprise_app.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Common labels +*/}} +{{- define "enterprise_app.labels" -}} +helm.sh/chart: {{ include "enterprise_app.chart" . }} +{{ include "enterprise_app.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end -}} + +{{/* +Selector labels +*/}} +{{- define "enterprise_app.selectorLabels" -}} +app.kubernetes.io/name: {{ include "enterprise_app.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "enterprise_app.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} +{{- default (include "enterprise_app.fullname" .) .Values.serviceAccount.name -}} +{{- else -}} +{{- default "default" .Values.serviceAccount.name -}} +{{- end -}} +{{- end -}} + +{{/* +Return the appropriate apiVersion for networkpolicy. +*/}} +{{- define "enterprise_app.networkPolicy.apiVersion" -}} +{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}} +{{- print "networking.k8s.io/v1" -}} +{{- else -}} +{{- print "extensions/v1beta1" -}} +{{- end -}} +{{- end -}} + +{{- define "enterprise_app.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/app-design-center/enterprise-production/templates/deployment.yaml b/app-design-center/enterprise-production/templates/deployment.yaml new file mode 100644 index 0000000000..b0d6758327 --- /dev/null +++ b/app-design-center/enterprise-production/templates/deployment.yaml @@ -0,0 +1,40 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "enterprise_app.fullname" . }} + labels: + {{- include "enterprise_app.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "enterprise_app.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "enterprise_app.selectorLabels" . | nindent 8 }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 8080 + protocol: TCP + resources: + {{- toYaml .Values.resources | nindent 12 }} \ No newline at end of file diff --git a/app-design-center/enterprise-production/templates/networkpolicy.yaml b/app-design-center/enterprise-production/templates/networkpolicy.yaml new file mode 100644 index 0000000000..f428bfbe5a --- /dev/null +++ b/app-design-center/enterprise-production/templates/networkpolicy.yaml @@ -0,0 +1,37 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{- if .Values.networkPolicy.enabled }} +apiVersion: {{ include "enterprise_app.networkPolicy.apiVersion" . }} +kind: NetworkPolicy +metadata: + name: {{ include "enterprise_app.fullname" . }} + labels: + {{- include "enterprise_app.labels" . | nindent 4 }} +spec: + podSelector: + matchLabels: + {{- include "enterprise_app.selectorLabels" . | nindent 6 }} + policyTypes: + - Ingress + ingress: + - from: + - podSelector: + matchLabels: + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + ports: + - protocol: TCP + port: 8080 +{{- end }} diff --git a/app-design-center/enterprise-production/templates/pdb.yaml b/app-design-center/enterprise-production/templates/pdb.yaml new file mode 100644 index 0000000000..1ab8d34b71 --- /dev/null +++ b/app-design-center/enterprise-production/templates/pdb.yaml @@ -0,0 +1,25 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "enterprise_app.fullname" . }} + labels: + {{- include "enterprise_app.labels" . | nindent 4 }} +spec: + minAvailable: {{ .Values.pdb.minAvailable }} + selector: + matchLabels: + {{- include "enterprise_app.selectorLabels" . | nindent 6 }} diff --git a/app-design-center/enterprise-production/templates/service.yaml b/app-design-center/enterprise-production/templates/service.yaml new file mode 100644 index 0000000000..fb62a26f5a --- /dev/null +++ b/app-design-center/enterprise-production/templates/service.yaml @@ -0,0 +1,29 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: Service +metadata: + name: {{ include "enterprise_app.fullname" . }} + labels: + {{- include "enterprise_app.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "enterprise_app.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/app-design-center/enterprise-production/values.yaml b/app-design-center/enterprise-production/values.yaml new file mode 100644 index 0000000000..2e579540f8 --- /dev/null +++ b/app-design-center/enterprise-production/values.yaml @@ -0,0 +1,43 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Default values for enterprise-app chart. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 3 + +image: + repository: gcr.io/google-samples/hello-app + tag: "2.0" + pullPolicy: IfNotPresent + +resources: + requests: + cpu: "100m" + memory: "128Mi" + limits: + cpu: "250m" + memory: "256Mi" + +networkPolicy: + enabled: true + +service: + type: ClusterIP + port: 80 + +pdb: + enabled: true + minAvailable: 1 \ No newline at end of file diff --git a/app-design-center/simple-app-multi-region/Chart.yaml b/app-design-center/simple-app-multi-region/Chart.yaml new file mode 100644 index 0000000000..66dd230203 --- /dev/null +++ b/app-design-center/simple-app-multi-region/Chart.yaml @@ -0,0 +1,20 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v2 +name: multi-region-app +description: A Helm chart for deploying a multi-region web application +type: application +version: 0.1.0 +appVersion: "1.0" \ No newline at end of file diff --git a/app-design-center/simple-app-multi-region/README.md b/app-design-center/simple-app-multi-region/README.md new file mode 100644 index 0000000000..0e2db5b98e --- /dev/null +++ b/app-design-center/simple-app-multi-region/README.md @@ -0,0 +1,3 @@ +# Simple App Multi-Region Helm Chart + +These samples show how to deploy a multi-region web application. Visit https://cloud.google.com/kubernetes-engine/docs/ to follow the tutorial. diff --git a/app-design-center/simple-app-multi-region/templates/_helpers.tpl b/app-design-center/simple-app-multi-region/templates/_helpers.tpl new file mode 100644 index 0000000000..924cebce20 --- /dev/null +++ b/app-design-center/simple-app-multi-region/templates/_helpers.tpl @@ -0,0 +1,74 @@ +{{/* +Copyright 2025 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} +{{/* +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). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "multi_region_app.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "multi_region_app.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Common labels +*/}} +{{- define "multi_region_app.labels" -}} +helm.sh/chart: {{ include "multi_region_app.chart" . }} +{{ include "multi_region_app.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end -}} + +{{/* +Selector labels +*/}} +{{- define "multi_region_app.selectorLabels" -}} +app.kubernetes.io/name: {{ include "multi_region_app.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "multi_region_app.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} +{{- default (include "multi_region_app.fullname" .) .Values.serviceAccount.name -}} +{{- else -}} +{{- default "default" .Values.serviceAccount.name -}} +{{- end -}} +{{- end -}} + +{{- define "multi_region_app.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/app-design-center/simple-app-multi-region/templates/deployment.yaml b/app-design-center/simple-app-multi-region/templates/deployment.yaml new file mode 100644 index 0000000000..5bf37edee7 --- /dev/null +++ b/app-design-center/simple-app-multi-region/templates/deployment.yaml @@ -0,0 +1,43 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "multi_region_app.fullname" . }} + labels: + {{- include "multi_region_app.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "multi_region_app.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "multi_region_app.selectorLabels" . | nindent 8 }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 8080 + protocol: TCP + resources: + requests: + memory: "128Mi" + limits: + memory: "128Mi" \ No newline at end of file diff --git a/app-design-center/simple-app-multi-region/templates/multiclusteringress.yaml b/app-design-center/simple-app-multi-region/templates/multiclusteringress.yaml new file mode 100644 index 0000000000..dcb469f314 --- /dev/null +++ b/app-design-center/simple-app-multi-region/templates/multiclusteringress.yaml @@ -0,0 +1,28 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{- if .Values.isConfigCluster }} +apiVersion: networking.gke.io/v1 +kind: MultiClusterIngress +metadata: + name: {{ include "multi_region_app.fullname" . }} + labels: + {{- include "multi_region_app.labels" . | nindent 4 }} +spec: + template: + spec: + backend: + serviceName: {{ include "multi_region_app.fullname" . }} + servicePort: 8080 +{{- end }} diff --git a/app-design-center/simple-app-multi-region/templates/multiclusterservice.yaml b/app-design-center/simple-app-multi-region/templates/multiclusterservice.yaml new file mode 100644 index 0000000000..2c3bffa5d9 --- /dev/null +++ b/app-design-center/simple-app-multi-region/templates/multiclusterservice.yaml @@ -0,0 +1,30 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: networking.gke.io/v1 +kind: MultiClusterService +metadata: + name: {{ include "multi_region_app.fullname" . }} + labels: + {{- include "multi_region_app.labels" . | nindent 4 }} +spec: + template: + spec: + selector: + app: {{ include "multi_region_app.name" . }} + ports: + - name: http + protocol: TCP + port: 8080 + targetPort: 8080 \ No newline at end of file diff --git a/app-design-center/simple-app-multi-region/templates/pdb.yaml b/app-design-center/simple-app-multi-region/templates/pdb.yaml new file mode 100644 index 0000000000..be4f8e8191 --- /dev/null +++ b/app-design-center/simple-app-multi-region/templates/pdb.yaml @@ -0,0 +1,27 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{ if .Values.pdb.enabled -}} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "multi_region_app.fullname" . }} + labels: + {{- include "multi_region_app.labels" . | nindent 4 }} +spec: + minAvailable: {{ .Values.pdb.minAvailable }} + selector: + matchLabels: + {{- include "multi_region_app.selectorLabels" . | nindent 6 }} +{{- end }} \ No newline at end of file diff --git a/app-design-center/simple-app-multi-region/templates/service.yaml b/app-design-center/simple-app-multi-region/templates/service.yaml new file mode 100644 index 0000000000..77b6ffa974 --- /dev/null +++ b/app-design-center/simple-app-multi-region/templates/service.yaml @@ -0,0 +1,29 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: Service +metadata: + name: {{ include "multi_region_app.fullname" . }} + labels: + {{- include "multi_region_app.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "multi_region_app.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/app-design-center/simple-app-multi-region/values.yaml b/app-design-center/simple-app-multi-region/values.yaml new file mode 100644 index 0000000000..9ad1d2a4b5 --- /dev/null +++ b/app-design-center/simple-app-multi-region/values.yaml @@ -0,0 +1,35 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Default values for multi-region-app chart. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 2 + +image: + repository: gcr.io/google-samples/hello-app + tag: "1.0" + pullPolicy: IfNotPresent + +# -- Set to true for the cluster that should manage the MultiClusterIngress and MultiClusterService +isConfigCluster: false + +service: + type: ClusterIP + port: 8080 + +pdb: + enabled: true + minAvailable: 1 diff --git a/app-design-center/simple-app-single-region/Chart.yaml b/app-design-center/simple-app-single-region/Chart.yaml new file mode 100644 index 0000000000..52f4df492f --- /dev/null +++ b/app-design-center/simple-app-single-region/Chart.yaml @@ -0,0 +1,20 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v2 +name: simple-app +description: A Helm chart for deploying a simple web application +type: application +version: 0.1.0 +appVersion: "1.0" \ No newline at end of file diff --git a/app-design-center/simple-app-single-region/README.md b/app-design-center/simple-app-single-region/README.md new file mode 100644 index 0000000000..2bdb65fed9 --- /dev/null +++ b/app-design-center/simple-app-single-region/README.md @@ -0,0 +1,3 @@ +# Simple App Single-Region Helm Chart + +These samples show how to deploy a simple web application in a single region. Visit https://cloud.google.com/kubernetes-engine/docs/ to follow the tutorial. diff --git a/app-design-center/simple-app-single-region/templates/_helpers.tpl b/app-design-center/simple-app-single-region/templates/_helpers.tpl new file mode 100644 index 0000000000..ee68954d27 --- /dev/null +++ b/app-design-center/simple-app-single-region/templates/_helpers.tpl @@ -0,0 +1,74 @@ +{{/* +Copyright 2025 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} +{{/* +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). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "simple_app.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "simple_app.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Common labels +*/}} +{{- define "simple_app.labels" -}} +helm.sh/chart: {{ include "simple_app.chart" . }} +{{ include "simple_app.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end -}} + +{{/* +Selector labels +*/}} +{{- define "simple_app.selectorLabels" -}} +app.kubernetes.io/name: {{ include "simple_app.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "simple_app.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} +{{- default (include "simple_app.fullname" .) .Values.serviceAccount.name -}} +{{- else -}} +{{- default "default" .Values.serviceAccount.name -}} +{{- end -}} +{{- end -}} + +{{- define "simple_app.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/app-design-center/simple-app-single-region/templates/deployment.yaml b/app-design-center/simple-app-single-region/templates/deployment.yaml new file mode 100644 index 0000000000..60b60c14c5 --- /dev/null +++ b/app-design-center/simple-app-single-region/templates/deployment.yaml @@ -0,0 +1,42 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "simple_app.fullname" . }} + labels: + {{- include "simple_app.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "simple_app.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "simple_app.selectorLabels" . | nindent 8 }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 8080 + protocol: TCP + resources: + limits: + memory: "128Mi" + {{- toYaml .Values.resources | nindent 12 }} \ No newline at end of file diff --git a/app-design-center/simple-app-single-region/templates/hpa.yaml b/app-design-center/simple-app-single-region/templates/hpa.yaml new file mode 100644 index 0000000000..f3a6f40795 --- /dev/null +++ b/app-design-center/simple-app-single-region/templates/hpa.yaml @@ -0,0 +1,34 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "simple_app.fullname" . }} + labels: + {{- include "simple_app.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "simple_app.fullname" . }} + minReplicas: {{ .Values.hpa.minReplicas }} + maxReplicas: {{ .Values.hpa.maxReplicas }} + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{ .Values.hpa.targetCPUUtilizationPercentage }} \ No newline at end of file diff --git a/app-design-center/simple-app-single-region/templates/pdb.yaml b/app-design-center/simple-app-single-region/templates/pdb.yaml new file mode 100644 index 0000000000..3ee36ccab3 --- /dev/null +++ b/app-design-center/simple-app-single-region/templates/pdb.yaml @@ -0,0 +1,27 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{ if .Values.pdb.enabled -}} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "simple_app.fullname" . }} + labels: + {{- include "simple_app.labels" . | nindent 4 }} +spec: + minAvailable: {{ .Values.pdb.minAvailable }} + selector: + matchLabels: + {{- include "simple_app.selectorLabels" . | nindent 6 }} +{{- end }} diff --git a/app-design-center/simple-app-single-region/templates/service.yaml b/app-design-center/simple-app-single-region/templates/service.yaml new file mode 100644 index 0000000000..fb4add6c83 --- /dev/null +++ b/app-design-center/simple-app-single-region/templates/service.yaml @@ -0,0 +1,29 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: Service +metadata: + name: {{ include "simple_app.fullname" . }} + labels: + {{- include "simple_app.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "simple_app.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/app-design-center/simple-app-single-region/values.yaml b/app-design-center/simple-app-single-region/values.yaml new file mode 100644 index 0000000000..5cd91f7b3d --- /dev/null +++ b/app-design-center/simple-app-single-region/values.yaml @@ -0,0 +1,43 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Default values for simple-app chart. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 2 + +image: + repository: gcr.io/google-samples/hello-app + tag: "1.0" + pullPolicy: IfNotPresent + +resources: + requests: + cpu: "100m" + memory: "128Mi" + +hpa: + enabled: true + minReplicas: 2 + maxReplicas: 10 + targetCPUUtilizationPercentage: 60 + +service: + type: ClusterIP + port: 80 + +pdb: + enabled: true + minAvailable: 1 \ No newline at end of file