[kubernetes] Add gpu-operator and introduce GPU support for tenant Kubernetes clusters - #834
Conversation
WalkthroughThis update introduces GPU support to the Kubernetes app by adding GPU device configuration options to node groups and implementing a conditional GPU operator deployment via HelmRelease. The chart version is incremented to 0.19.0, and the documentation is updated to reflect new configuration parameters and addon options. Several HelmRelease templates are corrected to fix a typographical error in a label key. The values schema is expanded to support GPU operator and vertical pod autoscaler customization, as well as resource presets for Kamaji control plane components. The version mapping is updated accordingly. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant HelmChart
participant NodeGroup
participant GPUOperator
participant FluxCD
User->>HelmChart: Deploy Kubernetes chart with GPU-enabled node group
HelmChart->>NodeGroup: Render VM spec with GPU devices if .group.gpus defined
HelmChart->>GPUOperator: If addons.gpuOperator.enabled, render HelmRelease
GPUOperator->>FluxCD: FluxCD deploys GPU Operator to target cluster
User->>HelmChart: Optionally provide valuesOverride for GPU Operator
HelmChart->>GPUOperator: Create Secret with override values if provided
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 7
🧹 Nitpick comments (2)
packages/apps/kubernetes/values.yaml (1)
153-153: Remove trailing whitespace
YAML linters flag trailing spaces. Please remove the extra space on this line to satisfy linting.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 153-153: trailing spaces
(trailing-spaces)
packages/apps/kubernetes/README.md (1)
63-70: Refine grammar in resource-preset descriptions
The phrase "This is ignored if resources is set (resources is recommended for production)" uses singular/plural inconsistently. Consider updating to:- ... Set container resources according to one common preset ... This is ignored if resources is set (resources is recommended for production). + ... Set container resources using a common preset ... These presets are ignored if specific resources are set (resources are recommended for production).🧰 Tools
🪛 LanguageTool
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |small...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
packages/apps/kubernetes/Chart.yaml(1 hunks)packages/apps/kubernetes/README.md(1 hunks)packages/apps/kubernetes/templates/cluster.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/delete.yaml(2 hunks)packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml(1 hunks)packages/apps/kubernetes/values.schema.json(3 hunks)packages/apps/kubernetes/values.yaml(3 hunks)packages/apps/versions_map(1 hunks)
🧰 Additional context used
🪛 GitHub Actions: Pre-Commit Checks
packages/apps/kubernetes/templates/helmreleases/delete.yaml
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
packages/apps/kubernetes/Chart.yaml
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
packages/apps/versions_map
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
packages/apps/kubernetes/templates/cluster.yaml
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
packages/apps/kubernetes/values.yaml
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
packages/apps/kubernetes/README.md
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
packages/apps/kubernetes/values.schema.json
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
🪛 YAMLlint (1.35.1)
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml
[error] 1-1: syntax error: expected the node content, but found '-'
(syntax)
packages/apps/kubernetes/values.yaml
[error] 153-153: trailing spaces
(trailing-spaces)
🪛 LanguageTool
packages/apps/kubernetes/README.md
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | small ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
🔇 Additional comments (8)
packages/apps/kubernetes/Chart.yaml (1)
19-19: Chart version bump for GPU features
Bumped the Chart version from0.18.0to0.19.0to include the new GPU support changes. Ensure this aligns with yourpackages/apps/versions_mapupdate and that all dependent Helm releases are compatible with the new version.packages/apps/versions_map (1)
61-62: Update version mapping for Kubernetes chart
The mapping forkubernetes 0.18.0now points to721c12a7and you've addedkubernetes 0.19.0→HEAD. Please verify that your downstream automation (e.g.,hack/gen_versions_map.sh) correctly handlesHEADreferences. The current pipeline error ([: !=: unexpected operator) suggests the shell script is not POSIX‑compliant.Consider updating
hack/gen_versions_map.shto use a POSIX‑safe comparison, for example:- if [ "$new" != "$old" ]; then + if [ "$new" ] && [ "$new" != "$old" ]; thenThis will resolve the pre‑commit failure.
packages/apps/kubernetes/templates/helmreleases/delete.yaml (2)
38-38: Include GPU operator in teardown patch
Good catch adding{{ .Release.Name }}-gpu-operatorto thekubectl patchinvocation so the GPU operator release is suspended during deletion.
74-74: Grant RBAC permission for GPU operator
The Role'sresourceNameslist now includes the GPU operator HelmRelease, matching the teardown logic.packages/apps/kubernetes/values.yaml (2)
27-31: Addgpusparameter for node groups
Introducing thegpus: []array under each node group allows explicit GPU device attachments, which aligns with your VM template changes.
62-69: AddgpuOperatoraddon configuration
The newgpuOperator.enabledflag andvaluesOverridemap will drive the conditional GPU operator HelmRelease. This is a solid extension to the addons section.packages/apps/kubernetes/README.md (1)
38-41: Clarify GPU parameter format
Thegpusentry (Line 40) currently reads "List of GPUs to attach" but doesn't specify the expected format (e.g., device IDs, vendor strings, Kubernetes device-plugin resource names). Please update the description to include examples or a reference to the cluster template docs for clarity.packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (1)
1-1: Ignore YAMLlint false positive
The YAMLlint error on line 1 stems from Helm’s Go template directive ({{- if ... }}) and can safely be ignored in this context.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 1-1: syntax error: expected the node content, but found '-'
(syntax)
🪛 GitHub Actions: Pre-Commit Checks
[error] 1-1: Makefile target 'gen-versions-map' failed with error: '../../hack/gen_versions_map.sh: 34: [: !=: unexpected operator' and 'fatal: Needed a single revision'. Exit code 128.
3909406 to
5677999
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🔭 Outside diff range comments (1)
packages/apps/kubernetes/values.yaml (1)
90-93: 🛠️ Refactor suggestionMissing
enabledflag for VerticalPodAutoscaler addon
For consistency with other addons (certManager,ingressNginx,gpuOperator, etc.), add anenabled: falsefield toaddons.verticalPodAutoscaler. This makes it clear when the VPA component should be deployed.
♻️ Duplicate comments (3)
packages/apps/kubernetes/README.md (1)
37-37: Fix typo in control plane description
There's still a typo in thecontrolPlane.replicasdescription:
- Change “contorl-plane” → “control-plane”
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (2)
7-8:⚠️ Potential issueFix label key typo
The label keycoztstack.io/target-cluster-nameis misspelled. It should becozystack.io/target-cluster-nameto match your domain.- coztstack.io/target-cluster-name: {{ .Release.Name }} + cozystack.io/target-cluster-name: {{ .Release.Name }}
13-20: 🛠️ Refactor suggestionPin GPU Operator chart version
To ensure reproducible deployments, specify aversionunderchart.spec. For example:chart: spec: chart: cozy-gpu-operator + version: <gpu-operator-chart-version> reconcileStrategy: Revision sourceRef: kind: HelmRepository
🧹 Nitpick comments (2)
packages/apps/kubernetes/values.yaml (1)
153-153: Remove trailing whitespace
There's a trailing space on this blank line (line 153), which can cause lint warnings. Please trim trailing spaces.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 153-153: trailing spaces
(trailing-spaces)
packages/apps/kubernetes/README.md (1)
64-70: Refine grammar in resource preset descriptions
The repeated phrase “This is ignored if resources is set…” could be clearer. Consider rewording to “Ignored whenresourcesis specified” or “This setting is ignored when customresourcesare provided”.🧰 Tools
🪛 LanguageTool
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |small...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
packages/apps/kubernetes/Chart.yaml(1 hunks)packages/apps/kubernetes/README.md(1 hunks)packages/apps/kubernetes/templates/cluster.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/delete.yaml(2 hunks)packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml(1 hunks)packages/apps/kubernetes/values.schema.json(3 hunks)packages/apps/kubernetes/values.yaml(3 hunks)packages/apps/versions_map(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/apps/versions_map
🚧 Files skipped from review as they are similar to previous changes (4)
- packages/apps/kubernetes/Chart.yaml
- packages/apps/kubernetes/templates/cluster.yaml
- packages/apps/kubernetes/templates/helmreleases/delete.yaml
- packages/apps/kubernetes/values.schema.json
🧰 Additional context used
🪛 LanguageTool
packages/apps/kubernetes/README.md
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | small ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
🪛 YAMLlint (1.35.1)
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml
[error] 1-1: syntax error: expected the node content, but found '-'
(syntax)
packages/apps/kubernetes/values.yaml
[error] 153-153: trailing spaces
(trailing-spaces)
🔇 Additional comments (5)
packages/apps/kubernetes/values.yaml (2)
27-31: Add GPU parameter
Thegpusparameter undernodeGroupsis correctly introduced to allow specifying GPU devices per node group.
62-69: Add GPU Operator addon configuration
ThegpuOperatorsection underaddonsis properly added withenabledandvaluesOverridefields to control the GPU Operator deployment.packages/apps/kubernetes/README.md (2)
40-41: Document GPU parameter
Thegpusfield is now clearly documented under Common parameters with an empty default ([]).
51-52: Document GPU Operator addon
The new entries foraddons.gpuOperator.enabledandaddons.gpuOperator.valuesOverridecorrectly reflect the values schema and usage.packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (1)
1-1: Helm templating directive
The lint error at line 1 is a false positive due to the Helm{{- if ... }}directive. You can safely ignore this YAMLlint warning.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 1-1: syntax error: expected the node content, but found '-'
(syntax)
5d58d0a to
9467459
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (2)
packages/apps/kubernetes/README.md (1)
37-37: Fix typo incontrolPlane.replicasdescription
There's a typo in the description forcontrolPlane.replicas:- Number of replicas for Kubernetes contorl-plane components + Number of replicas for Kubernetes control-plane componentspackages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (1)
7-8:⚠️ Potential issueFix label key typo
The labelcoztstack.io/target-cluster-namehas a spelling error in the domain. It should becozystack.io:- coztstack.io/target-cluster-name: {{ .Release.Name }} + cozystack.io/target-cluster-name: {{ .Release.Name }}
🧹 Nitpick comments (4)
packages/apps/kubernetes/README.md (2)
40-40: Clarify nested path forgpusparameter
The table listsgpusat the top level, but this setting is actually nested under eachnodeGroupsentry. Consider renaming the "Name" column tonodeGroups[].gpus(or similar) for clarity.
155-155: Remove trailing spaces
Line 155 contains trailing whitespace that should be removed to satisfy YAML linting.packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (2)
11-11: Use unique Helm release name per cluster
CurrentlyreleaseName: gpu-operatoris a static value. This may cause conflicts in shared namespaces. Consider:-releaseName: gpu-operator +releaseName: {{ .Release.Name }}-gpu-operator
13-16: Pin GPU Operator chart version
For reproducible deployments, explicitly specify the chart version underchart.spec:chart: spec: chart: cozy-gpu-operator + version: <gpu-operator-chart-version> reconcileStrategy: Revision
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
packages/apps/kubernetes/Chart.yaml(1 hunks)packages/apps/kubernetes/README.md(1 hunks)packages/apps/kubernetes/images/ubuntu-container-disk/Dockerfile(1 hunks)packages/apps/kubernetes/templates/cluster.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/delete.yaml(2 hunks)packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml(1 hunks)packages/apps/kubernetes/values.schema.json(3 hunks)packages/apps/kubernetes/values.yaml(3 hunks)packages/apps/versions_map(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
- packages/apps/kubernetes/Chart.yaml
- packages/apps/versions_map
- packages/apps/kubernetes/templates/cluster.yaml
- packages/apps/kubernetes/templates/helmreleases/delete.yaml
- packages/apps/kubernetes/values.schema.json
🧰 Additional context used
🪛 LanguageTool
packages/apps/kubernetes/README.md
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~64-~64: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | small ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~66-~66: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~68-~68: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~70-~70: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
🪛 YAMLlint (1.35.1)
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml
[error] 1-1: syntax error: expected the node content, but found '-'
(syntax)
packages/apps/kubernetes/values.yaml
[error] 155-155: trailing spaces
(trailing-spaces)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: Build and Test
🔇 Additional comments (2)
packages/apps/kubernetes/values.yaml (1)
27-33: Add GPU attachment parameter under nodeGroups
The newgpusarray parameter provides a list of GPUs to attach per node group and defaults to an empty list ([]). This aligns with the schema and examples, enabling conditional GPU device configuration in the VM spec.packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (1)
20-23: Verify kubeConfig secret key
ThesecretRef.keyis set tosuper-admin.svc. Ensure this matches the actual key in your kubeconfig Secret (e.g.,super-admin.confvs.super-admin.svc).
9467459 to
dd49f23
Compare
…bernetes clusters Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
dd49f23 to
7537235
Compare
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 1
♻️ Duplicate comments (5)
packages/apps/kubernetes/README.md (2)
37-37:⚠️ Potential issueFix typo in parameter description
The description forcontrolPlane.replicasstill readscontorl-plane. Please correct it tocontrol-plane.
41-56: 🛠️ Refactor suggestionCluster Addons table consistency
The table lists all addons, including the new GPU operator and VPA overrides. However, unlike other addons,verticalPodAutoscaleronly hasvaluesOverrideand lacks anenabledflag. To maintain consistency, please add anaddons.verticalPodAutoscaler.enabledrow (defaultfalse) above itsvaluesOverride.packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (2)
7-8:⚠️ Potential issueFix label key typo
The label keycoztstack.io/target-cluster-nameis misspelled and will break downstream selectors. It should read:- coztstack.io/target-cluster-name: {{ .Release.Name }} + cozystack.io/target-cluster-name: {{ .Release.Name }}
40-47:⚠️ Potential issueCorrect indentation under
dependsOn
YAML sequences must be indented under their parent key. Update as follows:- dependsOn: - - name: {{ .Release.Name }} - namespace: {{ .Release.Namespace }} + dependsOn: + - name: {{ .Release.Name }} + namespace: {{ .Release.Namespace }} {{- end }} + - name: {{ .Release.Name }}-cilium + namespace: {{ .Release.Namespace }}This ensures valid YAML and proper dependency ordering.
packages/apps/kubernetes/values.schema.json (1)
108-118: 🛠️ Refactor suggestionAdd missing
enabledflag for Vertical Pod Autoscaler
To align with other addons, include anenabledboolean beforevaluesOverride(defaultfalse).Apply this diff:
"verticalPodAutoscaler": { "type": "object", "properties": { + "enabled": { + "type": "boolean", + "description": "Enables the Vertical Pod Autoscaler", + "default": false + }, "valuesOverride": { "type": "object", "description": "Custom values to override", "default": {} }
🧹 Nitpick comments (3)
packages/apps/kubernetes/values.yaml (1)
154-154: Remove trailing spaces
There's a trailing whitespace on this line. Removing it will keep the YAML clean and avoid linter warnings.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 154-154: trailing spaces
(trailing-spaces)
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (1)
12-19: Pin GPU Operator chart version
For reproducible deployments, specify a chart version underchart.spec. For example:chart: spec: chart: cozy-gpu-operator + version: <gpu-operator-chart-version> reconcileStrategy: Revision sourceRef: kind: HelmRepositorypackages/apps/kubernetes/values.schema.json (1)
132-136: RestrictresourcesPresetto allowed values
To enforce only valid presets, add anenumconstraint forresourcesPreset(none, nano, micro, small, medium, large, xlarge, 2xlarge).Example diff for the
apiServer.resourcesPreset:- "resourcesPreset": { - "type": "string", - "description": "...", - "default": "small" - }, + "resourcesPreset": { + "type": "string", + "enum": ["none","nano","micro","small","medium","large","xlarge","2xlarge"], + "description": "...", + "default": "small" + },Remember to propagate this to all
resourcesPresetdefinitions underkamajiControlPlane.
🛑 Comments failed to post (1)
packages/apps/kubernetes/values.yaml (1)
27-32:
⚠️ Potential issueMismatch between
gpusexample and schema
The inline example shows each GPU as an object with anamekey, but the JSON schema definesgpusitems as plain strings. Please reconcile this by either:
- Updating the schema to accept objects with a
namefield, or- Changing the example to a simple list of device strings (e.g.
- "nvidia.com/AD102GL_L40S").
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (2)
12-15: 🛠️ Refactor suggestionPin GPU Operator chart version
For reproducible deployments, specify aversionunderchart.spec.Example diff:
chart: spec: chart: cozy-gpu-operator + version: <gpu-operator-chart-version>
40-47:⚠️ Potential issueFix indentation of
dependsOnentries
Sequence items underdependsOnmust be indented beneath the key. This ensures valid YAML for HelmRelease dependencies.Suggested diff:
spec: dependsOn: - {{- if lookup "helm.toolkit.fluxcd.io/v2" "HelmRelease" .Release.Namespace .Release.Name }} - - name: {{ .Release.Name }} - namespace: {{ .Release.Namespace }} - {{- end }} - - name: {{ .Release.Name }}-cilium - namespace: {{ .Release.Namespace }} + {{- if lookup "helm.toolkit.fluxcd.io/v2" "HelmRelease" .Release.Namespace .Release.Name }} + - name: {{ .Release.Name }} + namespace: {{ .Release.Namespace }} + {{- end }} + - name: {{ .Release.Name }}-cilium + namespace: {{ .Release.Namespace }}
🧹 Nitpick comments (4)
packages/apps/kubernetes/values.yaml (1)
154-154: Remove trailing spaces
There’s a trailing space on this line. Please delete the extra whitespace to satisfy YAML linting.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 154-154: trailing spaces
(trailing-spaces)
packages/apps/kubernetes/README.md (3)
34-39: Documentgpusunder nodeGroups
The common parameters table listsnodeGroupsbut doesn’t mention the newgpusfield. Consider extending the description fornodeGroupsor adding a separate row fornodeGroups[].gpus.
50-56: Cluster Addons table updated
- Approve the addition of
addons.gpuOperator.enabledandvaluesOverride.- For consistency, add an
addons.verticalPodAutoscaler.enabled(defaultfalse) flag before thevaluesOverrideentry.
63-69: Grammar tweak for resource presets
The sentence “resources is recommended for production” should agree in number. Consider:- (resources is recommended for production). + (resources are recommended for production).🧰 Tools
🪛 LanguageTool
[uncategorized] ~63-~63: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~63-~63: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |small...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~65-~65: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~65-~65: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~67-~67: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~67-~67: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~69-~69: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~69-~69: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). |micro...(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (18)
packages/apps/kubernetes/Chart.yaml(1 hunks)packages/apps/kubernetes/README.md(1 hunks)packages/apps/kubernetes/templates/cluster.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/cert-manager-crds.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/cert-manager.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/cilium.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/csi.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/delete.yaml(2 hunks)packages/apps/kubernetes/templates/helmreleases/fluxcd.yaml(2 hunks)packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/ingress-nginx.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/monitoring-agents.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/vertical-pod-autoscaler-crds.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/vertical-pod-autoscaler.yaml(1 hunks)packages/apps/kubernetes/templates/helmreleases/victoria-metrics-operator.yaml(1 hunks)packages/apps/kubernetes/values.schema.json(3 hunks)packages/apps/kubernetes/values.yaml(4 hunks)packages/apps/versions_map(1 hunks)
✅ Files skipped from review due to trivial changes (10)
- packages/apps/kubernetes/templates/helmreleases/cert-manager-crds.yaml
- packages/apps/kubernetes/templates/helmreleases/cilium.yaml
- packages/apps/kubernetes/templates/helmreleases/vertical-pod-autoscaler-crds.yaml
- packages/apps/kubernetes/templates/helmreleases/fluxcd.yaml
- packages/apps/kubernetes/templates/helmreleases/cert-manager.yaml
- packages/apps/kubernetes/templates/helmreleases/vertical-pod-autoscaler.yaml
- packages/apps/kubernetes/templates/helmreleases/monitoring-agents.yaml
- packages/apps/kubernetes/templates/helmreleases/victoria-metrics-operator.yaml
- packages/apps/kubernetes/templates/helmreleases/csi.yaml
- packages/apps/kubernetes/templates/helmreleases/ingress-nginx.yaml
🚧 Files skipped from review as they are similar to previous changes (5)
- packages/apps/kubernetes/Chart.yaml
- packages/apps/versions_map
- packages/apps/kubernetes/templates/cluster.yaml
- packages/apps/kubernetes/templates/helmreleases/delete.yaml
- packages/apps/kubernetes/values.schema.json
🧰 Additional context used
🪛 LanguageTool
packages/apps/kubernetes/README.md
[uncategorized] ~63-~63: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~63-~63: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | small ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~65-~65: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~65-~65: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~67-~67: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~67-~67: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~69-~69: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... 2xlarge). This is ignored if resources is set (resources is recommended for produ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[uncategorized] ~69-~69: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... ignored if resources is set (resources is recommended for production). | micro ...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
🪛 YAMLlint (1.35.1)
packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml
[error] 1-1: syntax error: expected the node content, but found '-'
(syntax)
packages/apps/kubernetes/values.yaml
[error] 154-154: trailing spaces
(trailing-spaces)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: Build and Test
🔇 Additional comments (6)
packages/apps/kubernetes/values.yaml (3)
4-4: Typo fix confirmed
The parameter description now correctly spells “control-plane”.
27-32: Approve GPU list parameter addition
Adding agpusarray under each node group enables specifying GPU devices. Ensure the corresponding schema (values.schema.json) has been updated to validate this field.
63-70: Approve GPU operator addon configuration
Introducingaddons.gpuOperatorwith anenabledflag andvaluesOverridemap aligns with other addons.packages/apps/kubernetes/README.md (1)
30-32: New “Parameters” section added
The headings for the parameters reference are well placed.packages/apps/kubernetes/templates/helmreleases/gpu-operator.yaml (2)
1-1: Skip YAMLlint false positive
The linter flags the Helm template directive on line 1, but this is valid in a Helm chart context.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 1-1: syntax error: expected the node content, but found '-'
(syntax)
2-9: Manifest header and metadata look good
The conditional guard, API version, kind, and labels (with correctcozystack.iodomain) are properly set.
| {{- if .Values.addons.gpuOperator.valuesOverride }} | ||
| valuesFrom: | ||
| - kind: Secret | ||
| name: {{ .Release.Name }}-gpu-operator-values-override | ||
| valuesKey: values | ||
| {{- end }} |
There was a problem hiding this comment.
Fix indentation of valuesFrom block
YAML requires sequence items under valuesFrom to be indented further than the key. Otherwise the manifest will be invalid.
Suggested diff:
-spec:
- {{- if .Values.addons.gpuOperator.valuesOverride }}
- valuesFrom:
- - kind: Secret
- name: {{ .Release.Name }}-gpu-operator-values-override
- valuesKey: values
- {{- end }}
+spec:
+ {{- if .Values.addons.gpuOperator.valuesOverride }}
+ valuesFrom:
+ - kind: Secret
+ name: {{ .Release.Name }}-gpu-operator-values-override
+ valuesKey: values
+ {{- end }}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| {{- if .Values.addons.gpuOperator.valuesOverride }} | |
| valuesFrom: | |
| - kind: Secret | |
| name: {{ .Release.Name }}-gpu-operator-values-override | |
| valuesKey: values | |
| {{- end }} | |
| spec: | |
| {{- if .Values.addons.gpuOperator.valuesOverride }} | |
| valuesFrom: | |
| - kind: Secret | |
| name: {{ .Release.Name }}-gpu-operator-values-override | |
| valuesKey: values | |
| {{- end }} |
Signed-off-by: Andrei Kvapil kvapss@gmail.com
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Chores