mirror of https://github.com/backstage/charts.git
Compare commits
68 Commits
backstage-
...
main
Author | SHA1 | Date |
---|---|---|
|
c1b06c96dd | |
|
3b72b98b16 | |
|
45ba9bd1de | |
|
a8c862044a | |
|
6dcd9bb905 | |
|
dd66752014 | |
|
ebba2e3094 | |
|
63ec4eb19e | |
|
da59cbc874 | |
|
cb7f0d4955 | |
|
9bbdaf000b | |
|
c06522e9c5 | |
|
c34f95a3ec | |
|
56dcd7b10c | |
|
2df03a970e | |
|
174eb0ea08 | |
|
672bf55dd3 | |
|
165d184f37 | |
|
593e6d312e | |
|
65f39ba05c | |
|
cb8ddd1c15 | |
|
14b574f9b8 | |
|
805abd937f | |
|
1a215fc9dc | |
|
f035007788 | |
|
0972ad802e | |
|
df1d5e8e63 | |
|
51294434ea | |
|
b0e982d951 | |
|
560f425eb7 | |
|
3c11e5bf74 | |
|
963ffa5b00 | |
|
04027ec1e5 | |
|
cacc587fa0 | |
|
d77bf20a9a | |
|
d8e2ab88cc | |
|
e7efd3e447 | |
|
9ffb2b1045 | |
|
978e586ef7 | |
|
b2e1d7dad3 | |
|
9385bf3a19 | |
|
112e1f743d | |
|
c0b0a9b21d | |
|
0aa17f4fd6 | |
|
9d0c0627b5 | |
|
88240ce7a0 | |
|
e1a709207c | |
|
d8fe7d03ca | |
|
d16ce968d8 | |
|
864c683f5f | |
|
b77ce14166 | |
|
ddaaa45fa1 | |
|
d0314410f4 | |
|
bcf7046104 | |
|
5cc3fc62b0 | |
|
62c2605e13 | |
|
21e6b5fa4a | |
|
0bf76cc58d | |
|
68d8aec463 | |
|
9343f0d312 | |
|
259c020ffd | |
|
e7cd943334 | |
|
63d747303f | |
|
45c7cc6a9a | |
|
dbdef5923a | |
|
659962de79 | |
|
f270900ea2 | |
|
77d3ea2e8b |
|
@ -0,0 +1,2 @@
|
|||
[codespell]
|
||||
ignore-words-list = NotIn,notin
|
|
@ -14,7 +14,7 @@ jobs:
|
|||
pull-requests: write # for actions/stale to close stale PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0
|
||||
- uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
|
||||
id: stale
|
||||
with:
|
||||
stale-issue-message: >
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
name: Lint Charts
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GO111MODULE: on
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v3
|
||||
|
||||
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # pin@v4
|
||||
with:
|
||||
python-version: 3.12
|
||||
|
||||
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # pin@v3
|
||||
with:
|
||||
go-version: ^1
|
||||
|
||||
- name: Setup helm-docs
|
||||
run: go install github.com/norwoodj/helm-docs/cmd/helm-docs@latest
|
||||
|
||||
- name: Run pre-commit
|
||||
uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # pin@v3.0.1
|
|
@ -18,7 +18,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
@ -27,29 +27,25 @@ jobs:
|
|||
git config user.name "$GITHUB_ACTOR"
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
- name: Add dependencies
|
||||
run: |
|
||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: helm/chart-releaser-action@a917fd15b20e8b64b94d9158ad54cd6345335584 # pin@v1.6.0
|
||||
uses: helm/chart-releaser-action@cae68fefc6b5f367a0275617c9f83181ba54714f # pin@v1.7.0
|
||||
with:
|
||||
config: cr.yaml
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d #pin@v3.0.0
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 #pin@v3.4.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install Cosign
|
||||
uses: sigstore/cosign-installer@e1523de7571e31dbe865fd2e80c5c7c23ae71eb4 #pin@v3.4.0
|
||||
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac #pin@v3.9.1
|
||||
|
||||
- name: Install Oras
|
||||
uses: oras-project/setup-oras@ee7dbe1144cb00080a89497f937dae78f85fce29 # v1.1.0
|
||||
uses: oras-project/setup-oras@8d34698a59f5ffe24821f0b48ab62a3de8b64b20 # v1.2.3
|
||||
|
||||
- name: Publish and Sign OCI Charts
|
||||
run: |
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
name: Codespell
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
codespell:
|
||||
name: Codespell
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
- name: Codespell
|
||||
uses: codespell-project/actions-codespell@v2
|
||||
with:
|
||||
skip: .git
|
||||
check_filenames: true
|
||||
check_hidden: true
|
|
@ -1,64 +1,39 @@
|
|||
name: Lint Charts
|
||||
name: Test Charts
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- "charts/**"
|
||||
|
||||
jobs:
|
||||
check-readme:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GO111MODULE: on
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v3
|
||||
|
||||
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # pin@v4
|
||||
with:
|
||||
python-version: 3.7
|
||||
|
||||
- uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # pin@v3
|
||||
with:
|
||||
go-version: ^1
|
||||
|
||||
- name: Setup helm-docs
|
||||
run: go install github.com/norwoodj/helm-docs/cmd/helm-docs@latest
|
||||
|
||||
- name: Run pre-commit
|
||||
uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # pin@v3.0.1
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@5119fcb9089d432beecbf79bb2c7915207344b78 # pin@v3.5
|
||||
uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 # pin@v4.3.0
|
||||
with:
|
||||
version: v3.10.0
|
||||
|
||||
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # pin@v4
|
||||
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # pin@v4
|
||||
with:
|
||||
python-version: 3.7
|
||||
python-version: 3.12
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: helm/chart-testing-action@e6669bcd63d7cb57cb4380c33043eebe5d111992 # pin@v2.3.0
|
||||
uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b # pin@v2.3.0
|
||||
|
||||
- name: "Add NGINX Ingress and Bitnami Repository"
|
||||
run: |
|
||||
helm repo add ingress-nginx "https://kubernetes.github.io/ingress-nginx"
|
||||
helm repo add bitnami "https://charts.bitnami.com/bitnami"
|
||||
helm repo update
|
||||
|
||||
- name: Run chart-testing (lint)
|
||||
run: ct lint --config ct.yaml
|
||||
|
||||
- name: Create KIND Cluster
|
||||
uses: helm/kind-action@99576bfa6ddf9a8e612d83b513da5a75875caced # pin@v1.9.0
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # pin@v1.12.0
|
||||
|
||||
- name: Install Ingress Controller
|
||||
run: "helm install ingress-nginx/ingress-nginx --generate-name --set controller.service.type='NodePort' --set controller.admissionWebhooks.enabled=false"
|
||||
|
|
|
@ -14,7 +14,12 @@ repos:
|
|||
hooks:
|
||||
- id: jsonschema-dereference
|
||||
name: jsonschema-dereference
|
||||
entry: python .pre-commit/jsonschema-dereference.py
|
||||
entry: python .pre-commit/jsonschema_dereference.py
|
||||
additional_dependencies: [jsonref]
|
||||
language: python
|
||||
types_or: [yaml, json]
|
||||
|
||||
- repo: https://github.com/codespell-project/codespell
|
||||
rev: v2.4.1
|
||||
hooks:
|
||||
- id: codespell
|
|
@ -1,34 +0,0 @@
|
|||
import json
|
||||
from typing import List, Dict, Any
|
||||
from pathlib import Path
|
||||
|
||||
import jsonref
|
||||
|
||||
JSONSCHEMA_TEMPLATE_NAME = "values.schema.tmpl.json"
|
||||
JSONSCHEMA_NAME = "values.schema.json"
|
||||
CHART_LOCK = "Chart.lock"
|
||||
|
||||
def load_template_schema(chart_dir: Path) -> Dict[str, Any]:
|
||||
"""Load values.schema.tmpl.json and template it via Jinja2."""
|
||||
with open(chart_dir / JSONSCHEMA_TEMPLATE_NAME, "r") as f:
|
||||
return json.loads(f.read())
|
||||
|
||||
def save(chart_dir: Path, schema: Any):
|
||||
"""Take schema containing $refs and dereference them."""
|
||||
with open(chart_dir / JSONSCHEMA_NAME, "w") as f:
|
||||
json.dump(schema, f, indent=4, sort_keys=True)
|
||||
|
||||
if __name__ == '__main__':
|
||||
charts = [p.parent for p in Path(".").rglob(CHART_LOCK)]
|
||||
|
||||
errors: List[BaseException] = []
|
||||
for chart in charts:
|
||||
try:
|
||||
schema_template = load_template_schema(chart)
|
||||
schema = jsonref.replace_refs(schema_template)
|
||||
save(chart, schema)
|
||||
except BaseException as e:
|
||||
print(f"Could not process schema for '{chart}': {e}")
|
||||
errors.append(e)
|
||||
if errors:
|
||||
exit(1)
|
|
@ -0,0 +1,54 @@
|
|||
"""
|
||||
This Python module:
|
||||
- Searches for JSON Schema templates with the name values.schema.tmpl.json
|
||||
- Dereferences any $refs contained in those files
|
||||
- Outputs the new Schema to a values.schema.json file in the same directory
|
||||
"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
from typing import List, Dict, Any
|
||||
from pathlib import Path
|
||||
|
||||
# External library dependency
|
||||
# Install with 'pip install jsonref'
|
||||
import jsonref
|
||||
|
||||
# File to write the dereferenced JSON Schema to
|
||||
JSONSCHEMA_NAME = "values.schema.json"
|
||||
# File that contains the JSON Schema that needs dereferencing
|
||||
JSONSCHEMA_TEMPLATE_NAME = "values.schema.tmpl.json"
|
||||
|
||||
def load_template_schema(schema_dir: Path) -> Dict[str, Any]:
|
||||
"""Load the schema template values.schema.tmpl.json"""
|
||||
with open(schema_dir / JSONSCHEMA_TEMPLATE_NAME, "r", encoding="utf-8") as f:
|
||||
return json.loads(f.read())
|
||||
|
||||
def save(schema_dir: Path, schema_data: Any):
|
||||
"""Save the dereferenced schema to values.schema.json"""
|
||||
with open(schema_dir / JSONSCHEMA_NAME, "w", encoding="utf-8") as f:
|
||||
json.dump(schema_data, f, indent=4, sort_keys=True)
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Search for all values.schema.tmpl.json files
|
||||
schema_templates = [p.parent for p in Path(".").rglob(JSONSCHEMA_TEMPLATE_NAME)]
|
||||
|
||||
# Create a list to hold any exceptions
|
||||
errors: List[BaseException] = []
|
||||
# Iterate over the List of found schema templates
|
||||
for schema_template in schema_templates:
|
||||
try:
|
||||
# Load the schema into a variable as JSON
|
||||
st = load_template_schema(schema_template)
|
||||
# Dereference all of the $refs
|
||||
s = jsonref.replace_refs(st)
|
||||
# Save the dereferenced JSON
|
||||
save(schema_template, s)
|
||||
except BaseException as e:
|
||||
# Print any errors to the screen
|
||||
print(f"Could not process schema for '{schema_template}': {e}")
|
||||
# Append any exceptions to the errors List
|
||||
errors.append(e)
|
||||
if errors:
|
||||
# Exit with status 1 if any exceptions were thrown
|
||||
sys.exit(1)
|
|
@ -0,0 +1,8 @@
|
|||
# Contributing to Backstage Charts
|
||||
|
||||
Before making a contribution to the [Backstage Helm Chart](https://github.com/backstage/charts) you will need to ensure the following steps have been done:
|
||||
- [Sign your commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits)
|
||||
- Run `helm template` on the changes you're making to ensure they are correctly rendered into Kubernetes manifests.
|
||||
- Lint tests has been run for the Chart using the [Chart Testing](https://github.com/helm/chart-testing) tool and the `ct lint` command.
|
||||
- Ensure variables are documented in `values.yaml` and the [pre-commit](https://pre-commit.com/) hook has been run with `pre-commit run --all-files` to generate the `README.md` documentation. To preview the content, use `helm-docs --dry-run`.
|
||||
- If you are making changes to the Chart - remember to bump the Chart version following [SemVer](https://semver.org/). You will need to change the [Chart Version](https://github.com/backstage/charts/blob/main/charts/backstage/Chart.yaml#L41) and the [Chart Badge](https://github.com/backstage/charts/blob/main/charts/backstage/README.md?plain=1#L5) on the README.
|
11
README.md
11
README.md
|
@ -4,19 +4,23 @@
|
|||
|
||||
Backstage unifies all your infrastructure tooling, services, and documentation to create a streamlined development environment from end to end.
|
||||
|
||||
> Disclaimer: This Helm chart deploys a pre-packaged container image which contains a vanilla Backstage instance for demo purposes. This image is probably not suitable for use in production. For further customization of the Backstage instance (plugin installation, UI changes, etc.) please create your own custom instance and container image. For details please consult the [Backstage documentation](https://backstage.io/docs)
|
||||
> [!CAUTION]
|
||||
> This Helm chart deploys a pre-packaged container image which contains a vanilla Backstage instance for demo purposes. This image is probably not suitable for use in production. For further customization of the Backstage instance (plugin installation, UI changes, etc.) please create your own custom instance and container image. For details please consult the [Backstage documentation](https://backstage.io/docs)
|
||||
|
||||
## Scope
|
||||
|
||||
This chart focuses on providing users the same experience and functionality no matter what flavor of Kubernetes they use. This chart will support only patterns that are either customary for all Kubernetes flavors, are commonly used in the Bitnami charts ecosystem, and recognized as Backstage official patterns.
|
||||
|
||||
We welcome other, more specialized, charts to use this cannonical chart as a direct dependency, expanding the feature set further, beyond this scope.
|
||||
We welcome other, more specialized, charts to use this canonical chart as a direct dependency, expanding the feature set further, beyond this scope.
|
||||
|
||||
A list of derived charts:
|
||||
- OpenShift specialized chart: [Janus Backstage Helm chart](https://github.com/janus-idp/helm-backstage/tree/main/charts/backstage)
|
||||
- OpenShift specialized chart: [Red Hat Developer Hub Helm chart](https://github.com/redhat-developer/rhdh-chart/tree/main/charts/backstage)
|
||||
|
||||
## Usage
|
||||
|
||||
> [!NOTE]
|
||||
> Documentation for the Backstage chart can be found [here](charts/backstage)
|
||||
|
||||
Charts are available in the following formats:
|
||||
|
||||
* [Chart Repository](https://helm.sh/docs/topics/chart_repository/)
|
||||
|
@ -27,7 +31,6 @@ Charts are available in the following formats:
|
|||
The following command can be used to add the chart repository:
|
||||
|
||||
```console
|
||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||
helm repo add backstage https://backstage.github.io/charts
|
||||
```
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
dependencies:
|
||||
- name: common
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
repository: oci://registry-1.docker.io/bitnamicharts
|
||||
version: 2.10.0
|
||||
- name: postgresql
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
repository: oci://registry-1.docker.io/bitnamicharts
|
||||
version: 12.10.0
|
||||
digest: sha256:e50e9681e108218aed1e8acaf4877290278a857a785dcd0cd28b92a73f2e8b05
|
||||
generated: "2023-09-05T14:49:26.276046+02:00"
|
||||
digest: sha256:77630aa988cef5e3a9f64a9fc3427345f451534e973dbece805850be587cb59e
|
||||
generated: "2024-05-11T14:39:32.274594+01:00"
|
||||
|
|
|
@ -12,14 +12,14 @@ apiVersion: v2
|
|||
description: A Helm chart for deploying a Backstage application
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
repository: oci://registry-1.docker.io/bitnamicharts
|
||||
tags:
|
||||
- bitnami-common
|
||||
version: 2.x.x
|
||||
version: 2.10.0
|
||||
- condition: postgresql.enabled
|
||||
name: postgresql
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
version: 12.x.x
|
||||
repository: oci://registry-1.docker.io/bitnamicharts
|
||||
version: 12.10.0
|
||||
home: https://backstage.io
|
||||
icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/backstage/icon/color/backstage-icon-color.svg
|
||||
keywords:
|
||||
|
@ -38,4 +38,4 @@ sources:
|
|||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 1.9.2
|
||||
version: 2.6.0
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Backstage Helm Chart
|
||||
|
||||
[](https://artifacthub.io/packages/search?repo=backstage)
|
||||

|
||||

|
||||

|
||||
|
||||
A Helm chart for deploying a Backstage application
|
||||
|
@ -31,7 +31,6 @@ Backstage unifies all your infrastructure tooling, services, and documentation t
|
|||
## TL;DR
|
||||
|
||||
```console
|
||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||
helm repo add backstage https://backstage.github.io/charts
|
||||
|
||||
helm install my-release backstage/backstage
|
||||
|
@ -52,7 +51,7 @@ This chart bootstraps a [Backstage](https://backstage.io/docs/deployment/docker)
|
|||
|
||||
This chart focuses on providing users the same experience and functionality no matter what flavor of Kubernetes they use. This chart will support only patterns that are either customary for all Kubernetes flavors, are commonly used in the Bitnami charts ecosystem, and recognized as Backstage official patterns.
|
||||
|
||||
We welcome other, more specialized, charts to use this cannonical chart as a direct dependency, expanding the feature set further, beyond this scope.
|
||||
We welcome other, more specialized, charts to use this canonical chart as a direct dependency, expanding the feature set further, beyond this scope.
|
||||
|
||||
A list of derived charts:
|
||||
- OpenShift specialized chart: [Janus Backstage Helm chart](https://github.com/janus-idp/helm-backstage/tree/main/charts/backstage)
|
||||
|
@ -106,8 +105,8 @@ Kubernetes: `>= 1.19.0-0`
|
|||
|
||||
| Repository | Name | Version |
|
||||
|------------|------|---------|
|
||||
| https://charts.bitnami.com/bitnami | common | 2.x.x |
|
||||
| https://charts.bitnami.com/bitnami | postgresql | 12.x.x |
|
||||
| oci://registry-1.docker.io/bitnamicharts | common | 2.10.0 |
|
||||
| oci://registry-1.docker.io/bitnamicharts | postgresql | 12.10.0 |
|
||||
|
||||
## Values
|
||||
|
||||
|
@ -118,6 +117,7 @@ Kubernetes: `>= 1.19.0-0`
|
|||
| backstage.annotations | Additional custom annotations for the `Deployment` resource | object | `{}` |
|
||||
| backstage.appConfig | Generates ConfigMap and configures it in the Backstage pods | object | `{}` |
|
||||
| backstage.args | Backstage container command arguments | list | `[]` |
|
||||
| backstage.autoscaling | Autoscaling configuration. <br /> Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ | object | `{"enabled":false,"maxReplicas":100,"minReplicas":1,"targetCPUUtilizationPercentage":80}` |
|
||||
| backstage.command | Backstage container command | list | `["node","packages/backend"]` |
|
||||
| backstage.containerPorts | Container ports on the Deployment | object | `{"backend":7007}` |
|
||||
| backstage.containerSecurityContext | Security settings for a Container. <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container | object | `{}` |
|
||||
|
@ -126,8 +126,11 @@ Kubernetes: `>= 1.19.0-0`
|
|||
| backstage.extraEnvVars | Backstage container environment variables | list | `[]` |
|
||||
| backstage.extraEnvVarsCM | Backstage container environment variables from existing ConfigMaps | list | `[]` |
|
||||
| backstage.extraEnvVarsSecrets | Backstage container environment variables from existing Secrets | list | `[]` |
|
||||
| backstage.extraPorts | Backstage container additional ports | list | `[]` |
|
||||
| backstage.extraVolumeMounts | Backstage container additional volume mounts | list | `[]` |
|
||||
| backstage.extraVolumes | Backstage container additional volumes | list | `[]` |
|
||||
| backstage.hostAliases | Host Aliases for the pod <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ | list | `[]` |
|
||||
| backstage.image.digest | Backstage image digest (digest takes precedence over image tag) | string | `""` |
|
||||
| backstage.image.pullPolicy | Specify a imagePullPolicy. Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' <br /> Ref: https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy | string | `"Always"` |
|
||||
| backstage.image.pullSecrets | Optionally specify an array of imagePullSecrets. Secrets must be manually created in the namespace. <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ <br /> E.g: `pullSecrets: [myRegistryKeySecretName]` | list | `[]` |
|
||||
| backstage.image.registry | Backstage image registry | string | `"ghcr.io"` |
|
||||
|
@ -135,17 +138,19 @@ Kubernetes: `>= 1.19.0-0`
|
|||
| backstage.image.tag | Backstage image tag (immutable tags are recommended) | string | `"latest"` |
|
||||
| backstage.initContainers | Backstage container init containers | list | `[]` |
|
||||
| backstage.installDir | Directory containing the backstage installation | string | `"/app"` |
|
||||
| backstage.livenessProbe | Liveness Probe Backstage doesn't provide any health endpoints by default. A simple one can be added like this: https://backstage.io/docs/plugins/observability/#health-checks <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes <!-- E.g. livenessProbe: failureThreshold: 3 httpGet: path: /healthcheck port: 7007 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 2 | object | `{}` |
|
||||
| backstage.livenessProbe | Liveness Probe Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes <!-- E.g. livenessProbe: failureThreshold: 3 httpGet: path: /.backstage/health/v1/liveness port: 7007 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 2 | object | `{"httpGet":{"path":"/.backstage/health/v1/liveness","port":7007,"scheme":"HTTP"}}` |
|
||||
| backstage.nodeSelector | Node labels for pod assignment <br /> Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector | object | `{}` |
|
||||
| backstage.pdb | Pod Disruption Budget configuration ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/ | object | `{"create":false,"maxUnavailable":"","minAvailable":""}` |
|
||||
| backstage.podAnnotations | Annotations to add to the backend deployment pods | object | `{}` |
|
||||
| backstage.podLabels | Labels to add to the backend deployment pods | object | `{}` |
|
||||
| backstage.podSecurityContext | Security settings for a Pod. The security settings that you specify for a Pod apply to all Containers in the Pod. <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod | object | `{}` |
|
||||
| backstage.readinessProbe | Readiness Probe Backstage doesn't provide any health endpoints by default. A simple one can be added like this: https://backstage.io/docs/plugins/observability/#health-checks <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes <!-- E.g. readinessProbe: failureThreshold: 3 httpGet: path: /healthcheck port: 7007 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 2 timeoutSeconds: 2 | object | `{}` |
|
||||
| backstage.readinessProbe | Readiness Probe Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes <!-- E.g. readinessProbe: failureThreshold: 3 httpGet: path: /.backstage/health/v1/readiness port: 7007 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 2 timeoutSeconds: 2 | object | `{"httpGet":{"path":"/.backstage/health/v1/readiness","port":7007,"scheme":"HTTP"}}` |
|
||||
| backstage.replicas | Number of deployment replicas | int | `1` |
|
||||
| backstage.resources | Resource requests/limits <br /> Ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#resource-requests-and-limits-of-pod-and-container <!-- E.g. resources: limits: memory: 1Gi cpu: 1000m requests: memory: 250Mi cpu: 100m --> | object | `{}` |
|
||||
| backstage.revisionHistoryLimit | Define the [count of deployment revisions](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#clean-up-policy) to be kept. May be set to 0 in case of GitOps deployment approach. | int | `10` |
|
||||
| backstage.startupProbe | Startup Probe Backstage doesn't provide any health endpoints by default. A simple one can be added like this: https://backstage.io/docs/plugins/observability/#health-checks <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes <!-- E.g. startupProbe: failureThreshold: 3 httpGet: path: /healthcheck port: 7007 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 2 | object | `{}` |
|
||||
| backstage.startupProbe | Startup Probe Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes <!-- E.g. startupProbe: failureThreshold: 3 httpGet: path: /.backstage/health/v1/liveness port: 7007 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 2 | object | `{"httpGet":{"path":"/.backstage/health/v1/liveness","port":7007,"scheme":"HTTP"}}` |
|
||||
| backstage.tolerations | Node tolerations for server scheduling to nodes with taints <br /> Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ | list | `[]` |
|
||||
| backstage.topologySpreadConstraints | Topology Spread Constraints for pod assignment <br /> Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#pod-topology-spread-constraints | list | `[]` |
|
||||
| clusterDomain | Default Kubernetes cluster domain | string | `"cluster.local"` |
|
||||
| commonAnnotations | Annotations to add to all deployed objects | object | `{}` |
|
||||
| commonLabels | Labels to add to all deployed objects | object | `{}` |
|
||||
|
@ -158,22 +163,26 @@ Kubernetes: `>= 1.19.0-0`
|
|||
| global | Global parameters Global Docker image parameters Please, note that this will override the image parameters, including dependencies, configured to use the global value Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass | object | See below |
|
||||
| global.imagePullSecrets | Global Docker registry secret names as an array </br> E.g. `imagePullSecrets: [myRegistryKeySecretName]` | list | `[]` |
|
||||
| global.imageRegistry | Global Docker image registry | string | `""` |
|
||||
| ingress | Ingress parameters | object | `{"annotations":{},"className":"","enabled":false,"host":"","tls":{"enabled":false,"secretName":""}}` |
|
||||
| ingress | Ingress parameters | object | `{"annotations":{},"className":"","enabled":false,"extraHosts":[],"extraTls":[],"host":"","path":"/","tls":{"enabled":false,"secretName":""}}` |
|
||||
| ingress.annotations | Additional annotations for the Ingress resource | object | `{}` |
|
||||
| ingress.className | Name of the IngressClass cluster resource which defines which controller will implement the resource (e.g nginx) | string | `""` |
|
||||
| ingress.enabled | Enable the creation of the ingress resource | bool | `false` |
|
||||
| ingress.extraHosts | List of additional hostnames to be covered with this ingress record (e.g. a CNAME) <!-- E.g. extraHosts: - name: backstage.env.example.com path: / (Optional) pathType: Prefix (Optional) port: 7007 (Optional) --> | list | `[]` |
|
||||
| ingress.extraTls | The TLS configuration for additional hostnames to be covered with this ingress record. <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls <!-- E.g. extraTls: - hosts: - backstage.env.example.com secretName: backstage-env --> | list | `[]` |
|
||||
| ingress.host | Hostname to be used to expose the route to access the backstage application (e.g: backstage.IP.nip.io) | string | `""` |
|
||||
| ingress.path | Path to be used to expose the full route to access the backstage application (e.g: IP.nip.io/backstage) | string | `"/"` |
|
||||
| ingress.tls | Ingress TLS parameters | object | `{"enabled":false,"secretName":""}` |
|
||||
| ingress.tls.enabled | Enable TLS configuration for the host defined at `ingress.host` parameter | bool | `false` |
|
||||
| ingress.tls.secretName | The name to which the TLS Secret will be called | string | `""` |
|
||||
| kubeVersion | Override Kubernetes version | string | `""` |
|
||||
| metrics | Metrics configuration | object | `{"serviceMonitor":{"annotations":{},"enabled":false,"interval":null,"labels":{},"path":"/metrics"}}` |
|
||||
| metrics.serviceMonitor | ServiceMonitor configuration <br /> Allows configuring your backstage instance as a scrape target for [Prometheus](https://github.com/prometheus/prometheus) using a ServiceMonitor custom resource that [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) can understand. | object | `{"annotations":{},"enabled":false,"interval":null,"labels":{},"path":"/metrics"}` |
|
||||
| metrics | Metrics configuration | object | `{"serviceMonitor":{"annotations":{},"enabled":false,"interval":null,"labels":{},"path":"/metrics","port":"http-backend"}}` |
|
||||
| metrics.serviceMonitor | ServiceMonitor configuration <br /> Allows configuring your backstage instance as a scrape target for [Prometheus](https://github.com/prometheus/prometheus) using a ServiceMonitor custom resource that [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) can understand. | object | `{"annotations":{},"enabled":false,"interval":null,"labels":{},"path":"/metrics","port":"http-backend"}` |
|
||||
| metrics.serviceMonitor.annotations | ServiceMonitor annotations | object | `{}` |
|
||||
| metrics.serviceMonitor.enabled | If enabled, a ServiceMonitor resource for Prometheus Operator is created <br /> Prometheus Operator must be installed in your cluster prior to enabling. | bool | `false` |
|
||||
| metrics.serviceMonitor.interval | ServiceMonitor scrape interval | string | `nil` |
|
||||
| metrics.serviceMonitor.labels | Additional ServiceMonitor labels | object | `{}` |
|
||||
| metrics.serviceMonitor.path | ServiceMonitor endpoint path <br /> Note that the /metrics endpoint is NOT present in a freshly scaffolded Backstage app. To setup, follow the [Prometheus metrics tutorial](https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/prometheus-metrics.md). | string | `"/metrics"` |
|
||||
| metrics.serviceMonitor.port | ServiceMonitor endpoint port <br /> The port where the metrics are exposed. If using OpenTelemetry as [documented here](https://backstage.io/docs/tutorials/setup-opentelemetry/), then the port needs to be explicitly specified. OpenTelemetry's default port is 9464. | string | `"http-backend"` |
|
||||
| nameOverride | String to partially override common.names.fullname | string | `""` |
|
||||
| networkPolicy.egressRules.customRules | Additional custom egress rules | list | `[]` |
|
||||
| networkPolicy.egressRules.denyConnectionsToExternal | Deny external connections. Should not be enabled when working with an external database. | bool | `false` |
|
||||
|
@ -197,6 +206,8 @@ Kubernetes: `>= 1.19.0-0`
|
|||
| service.clusterIP | Backstage service Cluster IP <br /> E.g `clusterIP: None` | string | `""` |
|
||||
| service.externalTrafficPolicy | Backstage service external traffic policy Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip | string | `"Cluster"` |
|
||||
| service.extraPorts | Extra ports to expose in the Backstage service (normally used with the `sidecar` value) | list | `[]` |
|
||||
| service.ipFamilies | IP Families <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack | list | `[]` |
|
||||
| service.ipFamilyPolicy | IP Family Policy <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack | string | `""` |
|
||||
| service.loadBalancerIP | Backstage service Load Balancer IP <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer | string | `""` |
|
||||
| service.loadBalancerSourceRanges | Load Balancer sources <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer <br /> E.g `loadBalancerSourceRanges: [10.10.10.0/24]` | list | `[]` |
|
||||
| service.nodePorts | Node port for the Backstage client connections Choose port between `30000-32767` | object | `{"backend":""}` |
|
||||
|
|
|
@ -25,7 +25,6 @@ Backstage unifies all your infrastructure tooling, services, and documentation t
|
|||
## TL;DR
|
||||
|
||||
```console
|
||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||
helm repo add backstage https://backstage.github.io/charts
|
||||
|
||||
helm install my-release backstage/backstage
|
||||
|
@ -46,7 +45,7 @@ This chart bootstraps a [Backstage](https://backstage.io/docs/deployment/docker)
|
|||
|
||||
This chart focuses on providing users the same experience and functionality no matter what flavor of Kubernetes they use. This chart will support only patterns that are either customary for all Kubernetes flavors, are commonly used in the Bitnami charts ecosystem, and recognized as Backstage official patterns.
|
||||
|
||||
We welcome other, more specialized, charts to use this cannonical chart as a direct dependency, expanding the feature set further, beyond this scope.
|
||||
We welcome other, more specialized, charts to use this canonical chart as a direct dependency, expanding the feature set further, beyond this scope.
|
||||
|
||||
A list of derived charts:
|
||||
- OpenShift specialized chart: [Janus Backstage Helm chart](https://github.com/janus-idp/helm-backstage/tree/main/charts/backstage)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
backstage:
|
||||
appConfig:
|
||||
techdocs:
|
||||
builder: "local"
|
||||
app:
|
||||
# Let's test that everything is fine with comments
|
||||
title: The very best Backstage Helm Chart! :D
|
||||
|
@ -8,3 +10,7 @@ backstage:
|
|||
baseUrl: https://somedomain.tl
|
||||
listen:
|
||||
port: 12345
|
||||
auth:
|
||||
keys:
|
||||
# Is just a random b64 string for test purposes
|
||||
- secret: N4+P+zJrErWRUGm0ZbVVhX1ZC81aSP81
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
backstage:
|
||||
autoscaling:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 3
|
||||
targetCPUUtilizationPercentage: 75
|
||||
targetMemoryUtilizationPercentage: 90
|
|
@ -0,0 +1,5 @@
|
|||
backstage:
|
||||
image:
|
||||
registry: ghcr.io
|
||||
repository: backstage/backstage
|
||||
digest: "sha256:f9ffa809e2c3f351699129d57edd6e64ca9ea5a4d4dd6339fed1ec80a30bc042"
|
|
@ -0,0 +1,12 @@
|
|||
ingress:
|
||||
enabled: true
|
||||
host: backstage.example.com
|
||||
tls:
|
||||
enabled: true
|
||||
secretName: "backstage-tls"
|
||||
extraHosts:
|
||||
- name: backstage.dev.example.com
|
||||
extraTls:
|
||||
- hosts:
|
||||
- backstage.dev.example.com
|
||||
secretName: "backstage-dev-tls"
|
|
@ -0,0 +1,6 @@
|
|||
ingress:
|
||||
enabled: true
|
||||
host: backstage.example.com
|
||||
tls:
|
||||
enabled: true
|
||||
secretName: "backstage-tls"
|
|
@ -0,0 +1,8 @@
|
|||
postgresql:
|
||||
enabled: true
|
||||
|
||||
# we enable postgres and allow the subchart to automatically generate the credentials
|
||||
# that backstage will use
|
||||
auth:
|
||||
existingSecret: ""
|
||||
password: ""
|
|
@ -0,0 +1,8 @@
|
|||
postgresql:
|
||||
enabled: true
|
||||
|
||||
auth:
|
||||
existingSecret: ""
|
||||
# we provide a password for the subchart to use.
|
||||
# this is just a password for purposes of CI tests
|
||||
password: "mytestpassword"
|
|
@ -1,8 +1,21 @@
|
|||
backstage:
|
||||
appConfig:
|
||||
techdocs:
|
||||
builder: "local"
|
||||
app:
|
||||
# Let's test that everything is fine with comments
|
||||
title: The very best Backstage Helm Chart! :D
|
||||
baseUrl: https://somedomain.tl
|
||||
backend:
|
||||
baseUrl: https://somedomain.tl
|
||||
auth:
|
||||
keys:
|
||||
# Is just a random b64 string for test purposes
|
||||
- secret: N4+P+zJrErWRUGm0ZbVVhX1ZC81aSP81
|
||||
readinessProbe:
|
||||
failureThreshold: 3
|
||||
httpGet:
|
||||
path: /healthcheck
|
||||
path: /.backstage/health/v1/readiness
|
||||
port: 7007
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 30
|
||||
|
@ -12,7 +25,7 @@ backstage:
|
|||
livenessProbe:
|
||||
failureThreshold: 3
|
||||
httpGet:
|
||||
path: /healthcheck
|
||||
path: /.backstage/health/v1/liveness
|
||||
port: 7007
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 60
|
||||
|
@ -22,7 +35,7 @@ backstage:
|
|||
startupProbe:
|
||||
failureThreshold: 3
|
||||
httpGet:
|
||||
path: /healthcheck
|
||||
path: /.backstage/health/v1/liveness
|
||||
port: 7007
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 60
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
service:
|
||||
ipFamilyPolicy: PreferDualStack
|
||||
ipFamilies:
|
||||
- IPv4
|
|
@ -0,0 +1,9 @@
|
|||
metrics:
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
annotations:
|
||||
test: test
|
||||
labels:
|
||||
test: test
|
||||
path: /metrics
|
||||
port: http-backend
|
|
@ -0,0 +1,10 @@
|
|||
backstage:
|
||||
topologySpreadConstraints:
|
||||
- maxSkew: 1
|
||||
topologyKey: kubernetes.io/hostname
|
||||
whenUnsatisfiable: DoNotSchedule
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/component: backstage
|
||||
matchLabelKeys:
|
||||
- pod-template-hash
|
|
@ -3,6 +3,7 @@ apiVersion: v1
|
|||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "common.names.fullname" . }}-app-config
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
data:
|
||||
app-config.yaml: |
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.appConfig "context" $) | nindent 4 }}
|
||||
|
|
|
@ -20,7 +20,9 @@ metadata:
|
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.annotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if not .Values.backstage.autoscaling.enabled }}
|
||||
replicas: {{ .Values.backstage.replicas }}
|
||||
{{- end }}
|
||||
revisionHistoryLimit: {{ .Values.backstage.revisionHistoryLimit }}
|
||||
selector:
|
||||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
|
||||
|
@ -47,6 +49,10 @@ spec:
|
|||
affinity:
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.affinity "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backstage.topologySpreadConstraints }}
|
||||
topologySpreadConstraints:
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.topologySpreadConstraints "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backstage.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.nodeSelector "context" $) | nindent 8 }}
|
||||
|
@ -55,6 +61,10 @@ spec:
|
|||
tolerations:
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.tolerations "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backstage.hostAliases }}
|
||||
hostAliases:
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.hostAliases "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
{{- if (or .Values.backstage.extraAppConfig (and .Values.backstage.extraVolumeMounts .Values.backstage.extraVolumes)) }}
|
||||
{{- range .Values.backstage.extraAppConfig }}
|
||||
|
@ -154,6 +164,9 @@ spec:
|
|||
- name: backend
|
||||
containerPort: {{ .Values.backstage.containerPorts.backend }}
|
||||
protocol: TCP
|
||||
{{- if .Values.backstage.extraPorts }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.extraPorts "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if (or .Values.backstage.extraAppConfig .Values.backstage.appConfig (and .Values.backstage.extraVolumeMounts .Values.backstage.extraVolumes)) }}
|
||||
volumeMounts:
|
||||
{{- range .Values.backstage.extraAppConfig }}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
{{- if .Values.backstage.autoscaling.enabled }}
|
||||
apiVersion: autoscaling/v2
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
labels: {{ include "common.labels.standard" . | nindent 4 }}
|
||||
app.kubernetes.io/component: backstage
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
annotations:
|
||||
{{- if .Values.commonAnnotations }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backstage.annotations }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.annotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
minReplicas: {{ .Values.backstage.autoscaling.minReplicas }}
|
||||
maxReplicas: {{ .Values.backstage.autoscaling.maxReplicas }}
|
||||
metrics:
|
||||
{{- if .Values.backstage.autoscaling.targetCPUUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: cpu
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: {{ .Values.backstage.autoscaling.targetCPUUtilizationPercentage }}
|
||||
{{- end }}
|
||||
{{- if .Values.backstage.autoscaling.targetMemoryUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: memory
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: {{ .Values.backstage.autoscaling.targetMemoryUtilizationPercentage }}
|
||||
{{- end }}
|
||||
{{- end }}
|
|
@ -20,21 +20,38 @@ spec:
|
|||
{{- if .Values.ingress.className }}
|
||||
ingressClassName: {{ .Values.ingress.className | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.tls.enabled }}
|
||||
{{- if or .Values.ingress.tls.enabled .Values.ingress.extraTls }}
|
||||
tls:
|
||||
{{- if .Values.ingress.tls.enabled }}
|
||||
- hosts:
|
||||
- {{ include "common.tplvalues.render" ( dict "value" .Values.ingress.host "context" $ ) }}
|
||||
secretName: {{ include "common.tplvalues.render" ( dict "value" .Values.ingress.tls.secretName "context" $ ) }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.extraTls }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.ingress.extraTls "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- host: {{ include "common.tplvalues.render" ( dict "value" .Values.ingress.host "context" $ ) }}
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
- path: {{ .Values.ingress.path }}
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
port:
|
||||
number: {{ .Values.service.ports.backend }}
|
||||
{{- range .Values.ingress.extraHosts }}
|
||||
- host: {{ .name | quote }}
|
||||
http:
|
||||
paths:
|
||||
- path: {{ default $.Values.ingress.path .path }}
|
||||
pathType: {{ default "Prefix" .pathType }}
|
||||
backend:
|
||||
service:
|
||||
name: {{ include "common.names.fullname" $ }}
|
||||
port:
|
||||
number: {{ default $.Values.service.ports.backend .port }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
{{- if .Values.backstage.pdb.create }}
|
||||
apiVersion: policy/v1
|
||||
kind: PodDisruptionBudget
|
||||
metadata:
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
labels: {{ include "common.labels.standard" . | nindent 4 }}
|
||||
app.kubernetes.io/component: backstage
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
annotations:
|
||||
{{- if .Values.commonAnnotations }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backstage.annotations }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.backstage.annotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.backstage.pdb.minAvailable }}
|
||||
minAvailable: {{ .Values.backstage.pdb.minAvailable }}
|
||||
{{- end }}
|
||||
{{- if or .Values.backstage.pdb.maxUnavailable ( not .Values.backstage.pdb.minAvailable ) }}
|
||||
maxUnavailable: {{ .Values.backstage.pdb.maxUnavailable | default 1 }}
|
||||
{{- end }}
|
||||
selector:
|
||||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: backstage
|
||||
{{- end }}
|
|
@ -34,6 +34,13 @@ spec:
|
|||
{{- if .Values.service.sessionAffinity }}
|
||||
sessionAffinity: {{ .Values.service.sessionAffinity }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.ipFamilyPolicy }}
|
||||
ipFamilyPolicy: {{ .Values.service.ipFamilyPolicy }}
|
||||
{{- end }}
|
||||
{{- with .Values.service.ipFamilies }}
|
||||
ipFamilies:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: {{ .Values.service.ports.name }}
|
||||
port: {{ .Values.service.ports.backend }}
|
||||
|
|
|
@ -29,7 +29,7 @@ spec:
|
|||
matchLabels: {{ include "common.labels.standard" . | nindent 6 }}
|
||||
app.kubernetes.io/component: backstage
|
||||
endpoints:
|
||||
- port: http-backend
|
||||
- port: {{ .Values.metrics.serviceMonitor.port | quote }}
|
||||
path: {{ .Values.metrics.serviceMonitor.path }}
|
||||
{{- with .Values.metrics.serviceMonitor.interval }}
|
||||
interval: {{ . }}
|
||||
|
|
|
@ -244,7 +244,7 @@
|
|||
"x-kubernetes-map-type": "atomic"
|
||||
},
|
||||
"matchLabelKeys": {
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -252,7 +252,7 @@
|
|||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"mismatchLabelKeys": {
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -388,7 +388,7 @@
|
|||
"x-kubernetes-map-type": "atomic"
|
||||
},
|
||||
"matchLabelKeys": {
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -396,7 +396,7 @@
|
|||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"mismatchLabelKeys": {
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -476,7 +476,7 @@
|
|||
"description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.",
|
||||
"properties": {
|
||||
"preferredDuringSchedulingIgnoredDuringExecution": {
|
||||
"description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.",
|
||||
"description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and subtracting \"weight\" from the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.",
|
||||
"items": {
|
||||
"description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
|
||||
"properties": {
|
||||
|
@ -529,7 +529,7 @@
|
|||
"x-kubernetes-map-type": "atomic"
|
||||
},
|
||||
"matchLabelKeys": {
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -537,7 +537,7 @@
|
|||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"mismatchLabelKeys": {
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -673,7 +673,7 @@
|
|||
"x-kubernetes-map-type": "atomic"
|
||||
},
|
||||
"matchLabelKeys": {
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -681,7 +681,7 @@
|
|||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"mismatchLabelKeys": {
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||
"description": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
|
@ -792,6 +792,38 @@
|
|||
"title": "Backstage container command arguments",
|
||||
"type": "array"
|
||||
},
|
||||
"autoscaling": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enabled": {
|
||||
"default": false,
|
||||
"description": "Enable autoscaling",
|
||||
"title": "Backstage Autoscaling",
|
||||
"type": "boolean"
|
||||
},
|
||||
"maxReplicas": {
|
||||
"default": 100,
|
||||
"title": "Maximum number of Backstage pod replicas that the autoscaler is allowed to scale up to",
|
||||
"type": "integer"
|
||||
},
|
||||
"minReplicas": {
|
||||
"default": 1,
|
||||
"title": "Minimum number of Backstage pod replicas that the autoscaler is allowed to scale down to",
|
||||
"type": "integer"
|
||||
},
|
||||
"targetCPUUtilizationPercentage": {
|
||||
"default": 80,
|
||||
"title": "Percentage of CPU that each Backstage pod should be using on average before the autoscaler decides to scale",
|
||||
"type": "integer"
|
||||
},
|
||||
"targetMemoryUtilizationPercentage": {
|
||||
"title": "Percentage of memory that each Backstage pod should be using on average before the autoscaler decides to scale",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"title": "Autoscaling parameters",
|
||||
"type": "object"
|
||||
},
|
||||
"command": {
|
||||
"default": [
|
||||
"node",
|
||||
|
@ -874,7 +906,7 @@
|
|||
"type": "boolean"
|
||||
},
|
||||
"procMount": {
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"type": "string"
|
||||
},
|
||||
"readOnlyRootFilesystem": {
|
||||
|
@ -1011,7 +1043,7 @@
|
|||
"description": "EnvVar represents an environment variable present in a Container.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the environment variable. Must be a C_IDENTIFIER.",
|
||||
"description": "Name of the environment variable. May consist of any printable ASCII characters except '='.",
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
|
@ -1029,7 +1061,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -1097,7 +1129,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -1129,15 +1161,15 @@
|
|||
"x-kubernetes-patch-strategy": "merge"
|
||||
},
|
||||
"envFrom": {
|
||||
"description": "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
|
||||
"description": "List of sources to populate environment variables in the container. The keys defined within a source may consist of any printable ASCII characters except '='. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
|
||||
"items": {
|
||||
"description": "EnvFromSource represents the source of a set of ConfigMaps",
|
||||
"description": "EnvFromSource represents the source of a set of ConfigMaps or Secrets",
|
||||
"properties": {
|
||||
"configMapRef": {
|
||||
"description": "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -1148,14 +1180,14 @@
|
|||
"type": "object"
|
||||
},
|
||||
"prefix": {
|
||||
"description": "An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.",
|
||||
"description": "Optional text to prepend to the name of each environment variable. May consist of any printable ASCII characters except '='.",
|
||||
"type": "string"
|
||||
},
|
||||
"secretRef": {
|
||||
"description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -1403,6 +1435,10 @@
|
|||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"stopSignal": {
|
||||
"description": "StopSignal defines which signal will be sent to a container when it is being stopped. If not specified, the default is defined by the container runtime in use. StopSignal can only be set for Pods with a non-empty .spec.os.name",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
|
@ -1430,6 +1466,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -1620,6 +1657,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -1775,6 +1813,10 @@
|
|||
"name": {
|
||||
"description": "Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.",
|
||||
"type": "string"
|
||||
},
|
||||
"request": {
|
||||
"description": "Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
@ -1882,7 +1924,7 @@
|
|||
"type": "boolean"
|
||||
},
|
||||
"procMount": {
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"type": "string"
|
||||
},
|
||||
"readOnlyRootFilesystem": {
|
||||
|
@ -1998,6 +2040,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -2177,7 +2220,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"mountPropagation": {
|
||||
"description": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.",
|
||||
"description": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified (which defaults to None).",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
|
@ -2188,6 +2231,10 @@
|
|||
"description": "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"recursiveReadOnly": {
|
||||
"description": "RecursiveReadOnly specifies whether read-only mounts should be handled recursively.\n\nIf ReadOnly is false, this field has no meaning and must be unspecified.\n\nIf ReadOnly is true, and this field is set to Disabled, the mount is not made recursively read-only. If this field is set to IfPossible, the mount is made recursively read-only, if it is supported by the container runtime. If this field is set to Enabled, the mount is made recursively read-only if it is supported by the container runtime, otherwise the pod will not be started and an error will be generated to indicate the reason.\n\nIf this field is set to IfPossible or Enabled, MountPropagation must be set to None (or be unspecified, which defaults to None).\n\nIf this field is not specified, it is treated as an equivalent of Disabled.",
|
||||
"type": "string"
|
||||
},
|
||||
"subPath": {
|
||||
"description": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).",
|
||||
"type": "string"
|
||||
|
@ -2238,7 +2285,7 @@
|
|||
"description": "EnvVar represents an environment variable present in a Container.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the environment variable. Must be a C_IDENTIFIER.",
|
||||
"description": "Name of the environment variable. May consist of any printable ASCII characters except '='.",
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
|
@ -2256,7 +2303,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -2324,7 +2371,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -2378,6 +2425,42 @@
|
|||
"title": "Backstage container environment variables from existing Secrets",
|
||||
"type": "array"
|
||||
},
|
||||
"extraPorts": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"description": "ContainerPort represents a network port in a single container.",
|
||||
"properties": {
|
||||
"containerPort": {
|
||||
"description": "Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.",
|
||||
"format": "int32",
|
||||
"type": "integer"
|
||||
},
|
||||
"hostIP": {
|
||||
"description": "What host IP to bind the external port to.",
|
||||
"type": "string"
|
||||
},
|
||||
"hostPort": {
|
||||
"description": "Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.",
|
||||
"format": "int32",
|
||||
"type": "integer"
|
||||
},
|
||||
"name": {
|
||||
"description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.",
|
||||
"type": "string"
|
||||
},
|
||||
"protocol": {
|
||||
"description": "Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"containerPort"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"title": "Extra ports to expose in the Backstage container",
|
||||
"type": "array"
|
||||
},
|
||||
"extraVolumeMounts": {
|
||||
"default": [],
|
||||
"items": {
|
||||
|
@ -2388,7 +2471,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"mountPropagation": {
|
||||
"description": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.",
|
||||
"description": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified (which defaults to None).",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
|
@ -2399,6 +2482,10 @@
|
|||
"description": "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"recursiveReadOnly": {
|
||||
"description": "RecursiveReadOnly specifies whether read-only mounts should be handled recursively.\n\nIf ReadOnly is false, this field has no meaning and must be unspecified.\n\nIf ReadOnly is true, and this field is set to Disabled, the mount is not made recursively read-only. If this field is set to IfPossible, the mount is made recursively read-only, if it is supported by the container runtime. If this field is set to Enabled, the mount is made recursively read-only if it is supported by the container runtime, otherwise the pod will not be started and an error will be generated to indicate the reason.\n\nIf this field is set to IfPossible or Enabled, MountPropagation must be set to None (or be unspecified, which defaults to None).\n\nIf this field is not specified, it is treated as an equivalent of Disabled.",
|
||||
"type": "string"
|
||||
},
|
||||
"subPath": {
|
||||
"description": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).",
|
||||
"type": "string"
|
||||
|
@ -2531,7 +2618,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -2563,7 +2650,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -2617,7 +2704,7 @@
|
|||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -2642,7 +2729,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -2967,6 +3054,7 @@
|
|||
"x-kubernetes-map-type": "atomic"
|
||||
},
|
||||
"dataSourceRef": {
|
||||
"description": "TypedObjectReference contains enough information to let you locate the typed referenced object",
|
||||
"properties": {
|
||||
"apiGroup": {
|
||||
"description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.",
|
||||
|
@ -3075,7 +3163,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"volumeAttributesClassName": {
|
||||
"description": "volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. If specified, the CSI driver will create or update the volume with the attributes defined in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass will be applied to the claim but it's not allowed to reset this field to empty string once it is set. If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass will be set by the persistentvolume controller if it exists. If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.",
|
||||
"description": "volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. If specified, the CSI driver will create or update the volume with the attributes defined in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass will be applied to the claim but it's not allowed to reset this field to empty string once it is set. If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass will be set by the persistentvolume controller if it exists. If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).",
|
||||
"type": "string"
|
||||
},
|
||||
"volumeMode": {
|
||||
|
@ -3159,7 +3247,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -3237,7 +3325,7 @@
|
|||
"description": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.",
|
||||
"properties": {
|
||||
"endpoints": {
|
||||
"description": "endpoints is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
|
||||
"description": "endpoints is the endpoint name that details Glusterfs topology.",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
|
@ -3272,6 +3360,20 @@
|
|||
],
|
||||
"type": "object"
|
||||
},
|
||||
"image": {
|
||||
"description": "ImageVolumeSource represents a image volume resource.",
|
||||
"properties": {
|
||||
"pullPolicy": {
|
||||
"description": "Policy for pulling OCI objects. Possible values are: Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails. Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present. IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.",
|
||||
"type": "string"
|
||||
},
|
||||
"reference": {
|
||||
"description": "Required: Image or artifact reference to be used. Behaves in the same way as pod.spec.containers[*].image. Pull secrets will be assembled in the same way as for the container image by looking up node credentials, SA image pull secrets, and pod spec image pull secrets. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"iscsi": {
|
||||
"description": "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.",
|
||||
"properties": {
|
||||
|
@ -3320,7 +3422,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -3429,9 +3531,9 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"sources": {
|
||||
"description": "sources is the list of volume projections",
|
||||
"description": "sources is the list of volume projections. Each entry in this list handles one source.",
|
||||
"items": {
|
||||
"description": "Projection that may be projected along with other supported volume types",
|
||||
"description": "Projection that may be projected along with other supported volume types. Exactly one of these fields must be set.",
|
||||
"properties": {
|
||||
"clusterTrustBundle": {
|
||||
"description": "ClusterTrustBundleProjection describes how to select a set of ClusterTrustBundle objects and project their contents into the pod filesystem.",
|
||||
|
@ -3535,7 +3637,7 @@
|
|||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -3652,7 +3754,7 @@
|
|||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -3762,7 +3864,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -3803,7 +3905,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -3900,7 +4002,7 @@
|
|||
"description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
@ -3952,9 +4054,42 @@
|
|||
"title": "Backstage container additional volumes",
|
||||
"type": "array"
|
||||
},
|
||||
"hostAliases": {
|
||||
"default": [],
|
||||
"description": "Ref: https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/#adding-additional-entries-with-hostaliases",
|
||||
"items": {
|
||||
"description": "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.",
|
||||
"properties": {
|
||||
"hostnames": {
|
||||
"description": "Hostnames for the above IP address.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array",
|
||||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"ip": {
|
||||
"description": "IP address of the host file entry.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"ip"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"title": "Adding entries to a Pod's /etc/hosts file provides Pod-level override of hostname resolution when DNS and other options are not applicable",
|
||||
"type": "array"
|
||||
},
|
||||
"image": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"digest": {
|
||||
"default": "",
|
||||
"description": "digest takes precedence over image tag",
|
||||
"title": "Backstage image digest",
|
||||
"type": "string"
|
||||
},
|
||||
"pullPolicy": {
|
||||
"default": "Always",
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy",
|
||||
|
@ -4029,7 +4164,7 @@
|
|||
"description": "EnvVar represents an environment variable present in a Container.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the environment variable. Must be a C_IDENTIFIER.",
|
||||
"description": "Name of the environment variable. May consist of any printable ASCII characters except '='.",
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
|
@ -4047,7 +4182,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -4115,7 +4250,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -4147,15 +4282,15 @@
|
|||
"x-kubernetes-patch-strategy": "merge"
|
||||
},
|
||||
"envFrom": {
|
||||
"description": "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
|
||||
"description": "List of sources to populate environment variables in the container. The keys defined within a source may consist of any printable ASCII characters except '='. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
|
||||
"items": {
|
||||
"description": "EnvFromSource represents the source of a set of ConfigMaps",
|
||||
"description": "EnvFromSource represents the source of a set of ConfigMaps or Secrets",
|
||||
"properties": {
|
||||
"configMapRef": {
|
||||
"description": "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -4166,14 +4301,14 @@
|
|||
"type": "object"
|
||||
},
|
||||
"prefix": {
|
||||
"description": "An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.",
|
||||
"description": "Optional text to prepend to the name of each environment variable. May consist of any printable ASCII characters except '='.",
|
||||
"type": "string"
|
||||
},
|
||||
"secretRef": {
|
||||
"description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"description": "Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||
"type": "string"
|
||||
},
|
||||
"optional": {
|
||||
|
@ -4421,6 +4556,10 @@
|
|||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"stopSignal": {
|
||||
"description": "StopSignal defines which signal will be sent to a container when it is being stopped. If not specified, the default is defined by the container runtime in use. StopSignal can only be set for Pods with a non-empty .spec.os.name",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
|
@ -4448,6 +4587,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -4638,6 +4778,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -4793,6 +4934,10 @@
|
|||
"name": {
|
||||
"description": "Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.",
|
||||
"type": "string"
|
||||
},
|
||||
"request": {
|
||||
"description": "Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
@ -4900,7 +5045,7 @@
|
|||
"type": "boolean"
|
||||
},
|
||||
"procMount": {
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"type": "string"
|
||||
},
|
||||
"readOnlyRootFilesystem": {
|
||||
|
@ -5016,6 +5161,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -5195,7 +5341,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"mountPropagation": {
|
||||
"description": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.",
|
||||
"description": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified (which defaults to None).",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
|
@ -5206,6 +5352,10 @@
|
|||
"description": "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"recursiveReadOnly": {
|
||||
"description": "RecursiveReadOnly specifies whether read-only mounts should be handled recursively.\n\nIf ReadOnly is false, this field has no meaning and must be unspecified.\n\nIf ReadOnly is true, and this field is set to Disabled, the mount is not made recursively read-only. If this field is set to IfPossible, the mount is made recursively read-only, if it is supported by the container runtime. If this field is set to Enabled, the mount is made recursively read-only if it is supported by the container runtime, otherwise the pod will not be started and an error will be generated to indicate the reason.\n\nIf this field is set to IfPossible or Enabled, MountPropagation must be set to None (or be unspecified, which defaults to None).\n\nIf this field is not specified, it is treated as an equivalent of Disabled.",
|
||||
"type": "string"
|
||||
},
|
||||
"subPath": {
|
||||
"description": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).",
|
||||
"type": "string"
|
||||
|
@ -5270,6 +5420,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -5400,6 +5551,35 @@
|
|||
"title": "Node labels for pod assignment",
|
||||
"type": "object"
|
||||
},
|
||||
"pdb": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"create": {
|
||||
"default": false,
|
||||
"description": "Create a PDB",
|
||||
"title": "Backstage PDB",
|
||||
"type": "boolean"
|
||||
},
|
||||
"maxUnavailable": {
|
||||
"default": "",
|
||||
"title": "Backstage PDB maxUnavailable",
|
||||
"type": [
|
||||
"string",
|
||||
"integer"
|
||||
]
|
||||
},
|
||||
"minAvailable": {
|
||||
"default": "",
|
||||
"title": "Backstage PDB minAvailable",
|
||||
"type": [
|
||||
"string",
|
||||
"integer"
|
||||
]
|
||||
}
|
||||
},
|
||||
"title": "PDB parameters",
|
||||
"type": "object"
|
||||
},
|
||||
"podAnnotations": {
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
|
@ -5475,7 +5655,7 @@
|
|||
"type": "boolean"
|
||||
},
|
||||
"procMount": {
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"description": "procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows.",
|
||||
"type": "string"
|
||||
},
|
||||
"readOnlyRootFilesystem": {
|
||||
|
@ -5591,6 +5771,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -5729,6 +5910,10 @@
|
|||
"name": {
|
||||
"description": "Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.",
|
||||
"type": "string"
|
||||
},
|
||||
"request": {
|
||||
"description": "Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
@ -5802,6 +5987,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"grpc": {
|
||||
"description": "GRPCAction specifies an action involving a GRPC service.",
|
||||
"properties": {
|
||||
"port": {
|
||||
"description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
|
||||
|
@ -5955,6 +6141,102 @@
|
|||
},
|
||||
"title": "Node tolerations for server scheduling to nodes with taints",
|
||||
"type": "array"
|
||||
},
|
||||
"topologySpreadConstraints": {
|
||||
"default": [],
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#pod-topology-spread-constraints",
|
||||
"items": {
|
||||
"description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.",
|
||||
"properties": {
|
||||
"labelSelector": {
|
||||
"description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.",
|
||||
"properties": {
|
||||
"matchExpressions": {
|
||||
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||
"items": {
|
||||
"description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.",
|
||||
"properties": {
|
||||
"key": {
|
||||
"description": "key is the label key that the selector applies to.",
|
||||
"type": "string"
|
||||
},
|
||||
"operator": {
|
||||
"description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.",
|
||||
"type": "string"
|
||||
},
|
||||
"values": {
|
||||
"description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array",
|
||||
"x-kubernetes-list-type": "atomic"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"key",
|
||||
"operator"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"type": "array",
|
||||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"matchLabels": {
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"x-kubernetes-map-type": "atomic"
|
||||
},
|
||||
"matchLabelKeys": {
|
||||
"description": "MatchLabelKeys is a set of pod label keys to select the pods over which spreading will be calculated. The keys are used to lookup values from the incoming pod labels, those key-value labels are ANDed with labelSelector to select the group of existing pods over which spreading will be calculated for the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. MatchLabelKeys cannot be set when LabelSelector isn't set. Keys that don't exist in the incoming pod labels will be ignored. A null or empty list means only match against labelSelector.\n\nThis is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array",
|
||||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"maxSkew": {
|
||||
"description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. The global minimum is the minimum number of matching pods in an eligible domain or zero if the number of eligible domains is less than MinDomains. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 2/2/1: In this case, the global minimum is 1. | zone1 | zone2 | zone3 | | P P | P P | P | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2; scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.",
|
||||
"format": "int32",
|
||||
"type": "integer"
|
||||
},
|
||||
"minDomains": {
|
||||
"description": "MinDomains indicates a minimum number of eligible domains. When the number of eligible domains with matching topology keys is less than minDomains, Pod Topology Spread treats \"global minimum\" as 0, and then the calculation of Skew is performed. And when the number of eligible domains with matching topology keys equals or greater than minDomains, this value has no effect on scheduling. As a result, when the number of eligible domains is less than minDomains, scheduler won't schedule more than maxSkew Pods to those domains. If value is nil, the constraint behaves as if MinDomains is equal to 1. Valid values are integers greater than 0. When value is not nil, WhenUnsatisfiable must be DoNotSchedule.\n\nFor example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same labelSelector spread as 2/2/2: | zone1 | zone2 | zone3 | | P P | P P | P P | The number of domains is less than 5(MinDomains), so \"global minimum\" is treated as 0. In this situation, new pod with the same labelSelector cannot be scheduled, because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones, it will violate MaxSkew.",
|
||||
"format": "int32",
|
||||
"type": "integer"
|
||||
},
|
||||
"nodeAffinityPolicy": {
|
||||
"description": "NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector when calculating pod topology spread skew. Options are: - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations. - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.\n\nIf this value is nil, the behavior is equivalent to the Honor policy.",
|
||||
"type": "string"
|
||||
},
|
||||
"nodeTaintsPolicy": {
|
||||
"description": "NodeTaintsPolicy indicates how we will treat node taints when calculating pod topology spread skew. Options are: - Honor: nodes without taints, along with tainted nodes for which the incoming pod has a toleration, are included. - Ignore: node taints are ignored. All nodes are included.\n\nIf this value is nil, the behavior is equivalent to the Ignore policy.",
|
||||
"type": "string"
|
||||
},
|
||||
"topologyKey": {
|
||||
"description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each <key, value> as a \"bucket\", and try to put balanced number of pods into each bucket. We define a domain as a particular instance of a topology. Also, we define an eligible domain as a domain whose nodes meet the requirements of nodeAffinityPolicy and nodeTaintsPolicy. e.g. If TopologyKey is \"kubernetes.io/hostname\", each Node is a domain of that topology. And, if TopologyKey is \"topology.kubernetes.io/zone\", each zone is a domain of that topology. It's a required field.",
|
||||
"type": "string"
|
||||
},
|
||||
"whenUnsatisfiable": {
|
||||
"description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"maxSkew",
|
||||
"topologyKey",
|
||||
"whenUnsatisfiable"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"title": "Topology Spread Constraint for pod assignment",
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"title": "Backstage parameters",
|
||||
|
@ -6080,6 +6362,52 @@
|
|||
"title": "Enable the creation of the ingress resource",
|
||||
"type": "boolean"
|
||||
},
|
||||
"extraHosts": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"type": "string"
|
||||
},
|
||||
"pathType": {
|
||||
"type": "string"
|
||||
},
|
||||
"port": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"title": "List of additional hostnames to be covered with this ingress record",
|
||||
"type": "array"
|
||||
},
|
||||
"extraTls": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"description": "IngressTLS describes the transport layer security associated with an ingress.",
|
||||
"properties": {
|
||||
"hosts": {
|
||||
"description": "hosts is a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array",
|
||||
"x-kubernetes-list-type": "atomic"
|
||||
},
|
||||
"secretName": {
|
||||
"description": "secretName is the name of the secret used to terminate TLS traffic on port 443. Field is left optional to allow TLS routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the \"Host\" header is used for routing.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"title": "The TLS configuration for additional hostnames to be covered with this ingress record.",
|
||||
"type": "array"
|
||||
},
|
||||
"host": {
|
||||
"default": "",
|
||||
"examples": [
|
||||
|
@ -6088,6 +6416,14 @@
|
|||
"title": "Hostname to be used to expose the route to access the backstage application.",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"default": "/",
|
||||
"examples": [
|
||||
"/backstage"
|
||||
],
|
||||
"title": "Path to be used to expose the full route to access the backstage application.",
|
||||
"type": "string"
|
||||
},
|
||||
"tls": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
|
@ -6158,6 +6494,19 @@
|
|||
"description": "ote that the /metrics endpoint is NOT present in a freshly scaffolded Backstage app. To setup, follow the Prometheus metrics tutorial. https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/prometheus-metrics.md",
|
||||
"title": "ServiceMonitor endpoint path",
|
||||
"type": "string"
|
||||
},
|
||||
"port": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "integer"
|
||||
}
|
||||
],
|
||||
"default": "http-backend",
|
||||
"description": "The port where the metrics are exposed. If using OpenTelemetry as [documented here](https://backstage.io/docs/tutorials/setup-opentelemetry/), then the port needs to be explicitly specified. OpenTelemetry's default port is 9464.",
|
||||
"title": "ServiceMonitor endpoint port"
|
||||
}
|
||||
},
|
||||
"title": "ServiceMonitor configuration",
|
||||
|
@ -6771,6 +7120,31 @@
|
|||
"title": "Extra ports to expose in the Backstage service",
|
||||
"type": "array"
|
||||
},
|
||||
"ipFamilies": {
|
||||
"default": [],
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services",
|
||||
"items": {
|
||||
"enum": [
|
||||
"IPv4",
|
||||
"IPv6"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Backstage service IP families",
|
||||
"type": "array"
|
||||
},
|
||||
"ipFamilyPolicy": {
|
||||
"default": "",
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services",
|
||||
"enum": [
|
||||
"",
|
||||
"SingleStack",
|
||||
"PreferDualStack",
|
||||
"RequireDualStack"
|
||||
],
|
||||
"title": "Backstage service IP family policy",
|
||||
"type": "string"
|
||||
},
|
||||
"loadBalancerIP": {
|
||||
"default": "",
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer",
|
||||
|
|
|
@ -143,6 +143,37 @@
|
|||
"backstage.10.0.0.1.nip.io"
|
||||
]
|
||||
},
|
||||
"extraHosts": {
|
||||
"title": "List of additional hostnames to be covered with this ingress record",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"type": "string"
|
||||
},
|
||||
"pathType": {
|
||||
"type": "string"
|
||||
},
|
||||
"port": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"path": {
|
||||
"title": "Path to be used to expose the full route to access the backstage application.",
|
||||
"type": "string",
|
||||
"default": "/",
|
||||
"examples": [
|
||||
"/backstage"
|
||||
]
|
||||
},
|
||||
"tls": {
|
||||
"title": "Ingress TLS parameters",
|
||||
"type": "object",
|
||||
|
@ -160,6 +191,14 @@
|
|||
"default": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"extraTls": {
|
||||
"title": "The TLS configuration for additional hostnames to be covered with this ingress record.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master/_definitions.json#/definitions/io.k8s.api.networking.v1.IngressTLS"
|
||||
},
|
||||
"default": []
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -185,6 +224,12 @@
|
|||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"digest": {
|
||||
"default": "",
|
||||
"description": "digest takes precedence over image tag",
|
||||
"title": "Backstage image digest",
|
||||
"type": "string"
|
||||
},
|
||||
"registry": {
|
||||
"title": "Backstage image registry",
|
||||
"type": "string",
|
||||
|
@ -230,6 +275,67 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autoscaling": {
|
||||
"title": "Autoscaling parameters",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enabled": {
|
||||
"description": "Enable autoscaling",
|
||||
"title": "Backstage Autoscaling",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"minReplicas": {
|
||||
"title": "Minimum number of Backstage pod replicas that the autoscaler is allowed to scale down to",
|
||||
"type": "integer",
|
||||
"default": 1
|
||||
},
|
||||
"maxReplicas": {
|
||||
"title": "Maximum number of Backstage pod replicas that the autoscaler is allowed to scale up to",
|
||||
"type": "integer",
|
||||
"default": 100
|
||||
},
|
||||
"targetCPUUtilizationPercentage": {
|
||||
"title": "Percentage of CPU that each Backstage pod should be using on average before the autoscaler decides to scale",
|
||||
"type": "integer",
|
||||
"default": 80
|
||||
},
|
||||
"targetMemoryUtilizationPercentage": {
|
||||
"title": "Percentage of memory that each Backstage pod should be using on average before the autoscaler decides to scale",
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pdb": {
|
||||
"title": "PDB parameters",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"create": {
|
||||
"description": "Create a PDB",
|
||||
"title": "Backstage PDB",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"minAvailable": {
|
||||
"title": "Backstage PDB minAvailable",
|
||||
"type": [
|
||||
"string",
|
||||
"integer"
|
||||
],
|
||||
"default": ""
|
||||
},
|
||||
"maxUnavailable": {
|
||||
"title": "Backstage PDB maxUnavailable",
|
||||
"type": [
|
||||
"string",
|
||||
"integer"
|
||||
],
|
||||
"default": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"containerPorts": {
|
||||
"title": "Container ports on the Deployment",
|
||||
"type": "object",
|
||||
|
@ -273,6 +379,15 @@
|
|||
"title": "Affinity for pod assignment",
|
||||
"type": "object"
|
||||
},
|
||||
"topologySpreadConstraints": {
|
||||
"default": [],
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#pod-topology-spread-constraints",
|
||||
"items": {
|
||||
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master/_definitions.json#/definitions/io.k8s.api.core.v1.TopologySpreadConstraint"
|
||||
},
|
||||
"title": "Topology Spread Constraint for pod assignment",
|
||||
"type": "array"
|
||||
},
|
||||
"args": {
|
||||
"title": "Backstage container command arguments",
|
||||
"type": "array",
|
||||
|
@ -350,6 +465,14 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"extraPorts": {
|
||||
"title": "Extra ports to expose in the Backstage container",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master/_definitions.json#/definitions/io.k8s.api.core.v1.ContainerPort"
|
||||
},
|
||||
"default": []
|
||||
},
|
||||
"extraVolumeMounts": {
|
||||
"title": "Backstage container additional volume mounts",
|
||||
"type": "array",
|
||||
|
@ -401,12 +524,18 @@
|
|||
"title": "Readiness probe",
|
||||
"description": "Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
|
||||
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master/_definitions.json#/definitions/io.k8s.api.core.v1.Probe",
|
||||
"default": {},
|
||||
"default": {
|
||||
"httpGet": {
|
||||
"path": "/.backstage/health/v1/readiness",
|
||||
"port": 7007,
|
||||
"scheme": "HTTP"
|
||||
}
|
||||
},
|
||||
"examples": [
|
||||
{
|
||||
"failureThreshold": 3,
|
||||
"httpGet": {
|
||||
"path": "/healthcheck",
|
||||
"path": "/.backstage/health/v1/readiness",
|
||||
"port": 7007,
|
||||
"scheme": "HTTP"
|
||||
},
|
||||
|
@ -421,12 +550,18 @@
|
|||
"title": "Liveness probe",
|
||||
"description": "Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
|
||||
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master/_definitions.json#/definitions/io.k8s.api.core.v1.Probe",
|
||||
"default": {},
|
||||
"default": {
|
||||
"httpGet": {
|
||||
"path": "/.backstage/health/v1/liveness",
|
||||
"port": 7007,
|
||||
"scheme": "HTTP"
|
||||
}
|
||||
},
|
||||
"examples": [
|
||||
{
|
||||
"failureThreshold": 3,
|
||||
"httpGet": {
|
||||
"path": "/healthcheck",
|
||||
"path": "/.backstage/health/v1/liveness",
|
||||
"port": 7007,
|
||||
"scheme": "HTTP"
|
||||
},
|
||||
|
@ -441,12 +576,18 @@
|
|||
"title": "Startup probe",
|
||||
"description": "Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
|
||||
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master/_definitions.json#/definitions/io.k8s.api.core.v1.Probe",
|
||||
"default": {},
|
||||
"default": {
|
||||
"httpGet": {
|
||||
"path": "/.backstage/health/v1/liveness",
|
||||
"port": 7007,
|
||||
"scheme": "HTTP"
|
||||
}
|
||||
},
|
||||
"examples": [
|
||||
{
|
||||
"failureThreshold": 3,
|
||||
"httpGet": {
|
||||
"path": "/healthcheck",
|
||||
"path": "/.backstage/health/v1/liveness",
|
||||
"port": 7007,
|
||||
"scheme": "HTTP"
|
||||
},
|
||||
|
@ -502,6 +643,15 @@
|
|||
},
|
||||
"default": []
|
||||
},
|
||||
"hostAliases": {
|
||||
"title": "Adding entries to a Pod's /etc/hosts file provides Pod-level override of hostname resolution when DNS and other options are not applicable",
|
||||
"description": "Ref: https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/#adding-additional-entries-with-hostaliases",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master/_definitions.json#/definitions/io.k8s.api.core.v1.HostAlias"
|
||||
},
|
||||
"default": []
|
||||
},
|
||||
"podAnnotations": {
|
||||
"title": "Annotations to add to the backend deployment pods",
|
||||
"type": "object",
|
||||
|
@ -641,6 +791,28 @@
|
|||
"type": "object"
|
||||
},
|
||||
"default": []
|
||||
},
|
||||
"ipFamilyPolicy": {
|
||||
"title": "Backstage service IP family policy",
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"enum": [
|
||||
"",
|
||||
"SingleStack",
|
||||
"PreferDualStack",
|
||||
"RequireDualStack"
|
||||
]
|
||||
},
|
||||
"ipFamilies": {
|
||||
"title": "Backstage service IP families",
|
||||
"description": "Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": ["IPv4", "IPv6"]
|
||||
},
|
||||
"default": []
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -792,10 +964,23 @@
|
|||
"description": "ote that the /metrics endpoint is NOT present in a freshly scaffolded Backstage app. To setup, follow the Prometheus metrics tutorial. https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/prometheus-metrics.md",
|
||||
"type": "string",
|
||||
"default": "/metrics"
|
||||
},
|
||||
"port": {
|
||||
"default": "http-backend",
|
||||
"description": "The port where the metrics are exposed. If using OpenTelemetry as [documented here](https://backstage.io/docs/tutorials/setup-opentelemetry/), then the port needs to be explicitly specified. OpenTelemetry's default port is 9464.",
|
||||
"title": "ServiceMonitor endpoint port",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "integer"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -67,6 +67,18 @@ ingress:
|
|||
# -- Hostname to be used to expose the route to access the backstage application (e.g: backstage.IP.nip.io)
|
||||
host: ""
|
||||
|
||||
# -- List of additional hostnames to be covered with this ingress record (e.g. a CNAME)
|
||||
# <!-- E.g.
|
||||
# extraHosts:
|
||||
# - name: backstage.env.example.com
|
||||
# path: / (Optional)
|
||||
# pathType: Prefix (Optional)
|
||||
# port: 7007 (Optional) -->
|
||||
extraHosts: []
|
||||
|
||||
# -- Path to be used to expose the full route to access the backstage application (e.g: IP.nip.io/backstage)
|
||||
path: "/"
|
||||
|
||||
# -- Ingress TLS parameters
|
||||
tls:
|
||||
|
||||
|
@ -76,6 +88,15 @@ ingress:
|
|||
# -- The name to which the TLS Secret will be called
|
||||
secretName: ""
|
||||
|
||||
# -- The TLS configuration for additional hostnames to be covered with this ingress record.
|
||||
# <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
|
||||
# <!-- E.g.
|
||||
# extraTls:
|
||||
# - hosts:
|
||||
# - backstage.env.example.com
|
||||
# secretName: backstage-env -->
|
||||
extraTls: []
|
||||
|
||||
# -- Backstage parameters
|
||||
# @default -- See below
|
||||
backstage:
|
||||
|
@ -98,6 +119,9 @@ backstage:
|
|||
# -- Backstage image tag (immutable tags are recommended)
|
||||
tag: latest
|
||||
|
||||
# -- Backstage image digest (digest takes precedence over image tag)
|
||||
digest: ""
|
||||
|
||||
# -- Specify a imagePullPolicy.
|
||||
# Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
|
||||
# <br /> Ref: https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy
|
||||
|
@ -109,6 +133,22 @@ backstage:
|
|||
# <br /> E.g: `pullSecrets: [myRegistryKeySecretName]`
|
||||
pullSecrets: []
|
||||
|
||||
# -- Pod Disruption Budget configuration
|
||||
# ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
|
||||
pdb:
|
||||
create: false
|
||||
minAvailable: ""
|
||||
maxUnavailable: ""
|
||||
|
||||
# -- Autoscaling configuration.
|
||||
# <br /> Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
|
||||
autoscaling:
|
||||
enabled: false
|
||||
minReplicas: 1
|
||||
maxReplicas: 100
|
||||
targetCPUUtilizationPercentage: 80
|
||||
# targetMemoryUtilizationPercentage: 80
|
||||
|
||||
# -- Container ports on the Deployment
|
||||
containerPorts:
|
||||
backend: 7007
|
||||
|
@ -134,6 +174,9 @@ backstage:
|
|||
# -- Backstage container environment variables from existing Secrets
|
||||
extraEnvVarsSecrets: []
|
||||
|
||||
# -- Backstage container additional ports
|
||||
extraPorts: []
|
||||
|
||||
# -- Backstage container additional volume mounts
|
||||
extraVolumeMounts: []
|
||||
|
||||
|
@ -159,52 +202,61 @@ backstage:
|
|||
resources: {}
|
||||
|
||||
# -- Readiness Probe
|
||||
# Backstage doesn't provide any health endpoints by default. A simple one can be added like this: https://backstage.io/docs/plugins/observability/#health-checks
|
||||
# <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
|
||||
# Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
|
||||
# <!-- E.g.
|
||||
# readinessProbe:
|
||||
# failureThreshold: 3
|
||||
# httpGet:
|
||||
# path: /healthcheck
|
||||
# path: /.backstage/health/v1/readiness
|
||||
# port: 7007
|
||||
# scheme: HTTP
|
||||
# initialDelaySeconds: 30
|
||||
# periodSeconds: 10
|
||||
# successThreshold: 2
|
||||
# timeoutSeconds: 2
|
||||
readinessProbe: {}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /.backstage/health/v1/readiness
|
||||
port: 7007
|
||||
scheme: HTTP
|
||||
|
||||
# -- Liveness Probe
|
||||
# Backstage doesn't provide any health endpoints by default. A simple one can be added like this: https://backstage.io/docs/plugins/observability/#health-checks
|
||||
# <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
|
||||
# Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
|
||||
# <!-- E.g.
|
||||
# livenessProbe:
|
||||
# failureThreshold: 3
|
||||
# httpGet:
|
||||
# path: /healthcheck
|
||||
# path: /.backstage/health/v1/liveness
|
||||
# port: 7007
|
||||
# scheme: HTTP
|
||||
# initialDelaySeconds: 60
|
||||
# periodSeconds: 10
|
||||
# successThreshold: 1
|
||||
# timeoutSeconds: 2
|
||||
livenessProbe: {}
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /.backstage/health/v1/liveness
|
||||
port: 7007
|
||||
scheme: HTTP
|
||||
|
||||
# -- Startup Probe
|
||||
# Backstage doesn't provide any health endpoints by default. A simple one can be added like this: https://backstage.io/docs/plugins/observability/#health-checks
|
||||
# <br /> Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
|
||||
# -- Startup Probe
|
||||
# Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
|
||||
# <!-- E.g.
|
||||
# startupProbe:
|
||||
# failureThreshold: 3
|
||||
# httpGet:
|
||||
# path: /healthcheck
|
||||
# path: /.backstage/health/v1/liveness
|
||||
# port: 7007
|
||||
# scheme: HTTP
|
||||
# initialDelaySeconds: 60
|
||||
# periodSeconds: 10
|
||||
# successThreshold: 1
|
||||
# timeoutSeconds: 2
|
||||
startupProbe: {}
|
||||
startupProbe:
|
||||
httpGet:
|
||||
path: /.backstage/health/v1/liveness
|
||||
port: 7007
|
||||
scheme: HTTP
|
||||
|
||||
# -- Security settings for a Pod.
|
||||
# The security settings that you specify for a Pod apply to all Containers in the Pod.
|
||||
|
@ -229,6 +281,10 @@ backstage:
|
|||
# <br /> Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
affinity: {}
|
||||
|
||||
# -- Topology Spread Constraints for pod assignment
|
||||
# <br /> Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#pod-topology-spread-constraints
|
||||
topologySpreadConstraints: []
|
||||
|
||||
# -- Node labels for pod assignment
|
||||
# <br /> Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector
|
||||
nodeSelector: {}
|
||||
|
@ -241,6 +297,10 @@ backstage:
|
|||
# value: "value"
|
||||
# effect: "NoSchedule|PreferNoSchedule|NoExecute"
|
||||
|
||||
# -- Host Aliases for the pod
|
||||
# <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
|
||||
hostAliases: []
|
||||
|
||||
# -- Annotations to add to the backend deployment pods
|
||||
podAnnotations: {}
|
||||
|
||||
|
@ -308,6 +368,16 @@ service:
|
|||
# -- Extra ports to expose in the Backstage service (normally used with the `sidecar` value)
|
||||
extraPorts: []
|
||||
|
||||
# -- IP Family Policy
|
||||
#
|
||||
# <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack
|
||||
ipFamilyPolicy: ""
|
||||
|
||||
# -- IP Families
|
||||
#
|
||||
# <br /> Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack
|
||||
ipFamilies: []
|
||||
|
||||
## @section NetworkPolicy parameters
|
||||
##
|
||||
networkPolicy:
|
||||
|
@ -423,3 +493,7 @@ metrics:
|
|||
# -- ServiceMonitor endpoint path
|
||||
# <br /> Note that the /metrics endpoint is NOT present in a freshly scaffolded Backstage app. To setup, follow the [Prometheus metrics tutorial](https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/prometheus-metrics.md).
|
||||
path: /metrics
|
||||
|
||||
# -- ServiceMonitor endpoint port
|
||||
# <br /> The port where the metrics are exposed. If using OpenTelemetry as [documented here](https://backstage.io/docs/tutorials/setup-opentelemetry/), then the port needs to be explicitly specified. OpenTelemetry's default port is 9464.
|
||||
port: http-backend
|
||||
|
|
Loading…
Reference in New Issue