diff --git a/charts/karpenter-gcp/Chart.yaml b/charts/karpenter-gcp/Chart.yaml index 22353e06..6b66d4c4 100644 --- a/charts/karpenter-gcp/Chart.yaml +++ b/charts/karpenter-gcp/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 -appVersion: "1.0" +appVersion: "v0.6.0" description: A Helm chart for deploying Karpenter in gke cluster name: karpenter-gcp -version: 0.0.3 +version: 0.0.4 maintainers: - name: ZopDev - url: zop.dev \ No newline at end of file + url: zop.dev diff --git a/charts/karpenter-gcp/README.md b/charts/karpenter-gcp/README.md index 27c47940..81f9bee6 100644 --- a/charts/karpenter-gcp/README.md +++ b/charts/karpenter-gcp/README.md @@ -6,17 +6,40 @@ This Helm chart deploys Karpenter on a GKE (Google Kubernetes Engine) cluster us ## Prerequisites -- Kubernetes v1.23+ +- Kubernetes v1.26+ - Helm 3.0+ - Required GCP APIs enabled: - `compute.googleapis.com` - `container.googleapis.com` -- A GCP service account with the following roles: - - Compute Admin - - Kubernetes Engine Admin - - Monitoring Admin - - Service Account User -- A Kubernetes secret containing the GCP service account key (JSON) +- A GCP service account for the controller, granted a **minimal custom IAM role** rather than + the broad predefined roles. Upstream publishes the role definition: + + ```bash + export PROJECT_ID= + export GSA_NAME=karpenter-gsa + + curl -fsSL https://raw.githubusercontent.com/cloudpilot-ai/karpenter-provider-gcp/main/deploy/iam/karpenter-controller-role.yaml \ + -o karpenter-controller-role.yaml + gcloud iam roles create karpenter_controller --project=$PROJECT_ID --file=karpenter-controller-role.yaml 2>/dev/null || \ + gcloud iam roles update karpenter_controller --project=$PROJECT_ID --file=karpenter-controller-role.yaml + + gcloud projects add-iam-policy-binding $PROJECT_ID \ + --member="serviceAccount:$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ + --role="projects/$PROJECT_ID/roles/karpenter_controller" + ``` + + Grant `roles/iam.serviceAccountUser` **scoped to the node service account** the controller + attaches to VMs, not project-wide: + + ```bash + export NODE_SA_EMAIL=@$PROJECT_ID.iam.gserviceaccount.com + gcloud iam service-accounts add-iam-policy-binding $NODE_SA_EMAIL \ + --role roles/iam.serviceAccountUser \ + --member "serviceAccount:$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ + --project $PROJECT_ID + ``` +- A Kubernetes secret containing the GCP service account key (JSON), unless you use Workload + Identity — in which case annotate the chart's service account and set `credentials.enabled=false`. --- @@ -101,10 +124,20 @@ metadata: name: default-example spec: serviceAccount: "" + # Follow the GKE release channel the cluster is enrolled in. Pin instead with + # `version: "125.19216.104.126"` if you want to control when image updates roll out. imageSelectorTerms: - - alias: ContainerOptimizedOS@latest - tags: + - family: ContainerOptimizedOS + channel: cluster + labels: env: dev + # Required in practice. The CRD does not mark `disks` as required and has no + # default, but GCE rejects every instance create without it: + # Error 400: Invalid value for field 'resource.disks': ''. No disks are specified. + disks: + - boot: true + category: pd-balanced + sizeGiB: 100 ``` #### NodePool @@ -125,9 +158,10 @@ spec: - key: "karpenter.sh/capacity-type" operator: In values: ["on-demand", "spot"] + # Machine type prefix only -- "n4-standard" no longer matches. - key: "karpenter.k8s.gcp/instance-family" operator: In - values: ["n4-standard", "n2-standard", "e2"] + values: ["n4", "n2", "e2"] - key: "kubernetes.io/arch" operator: In values: ["amd64"] @@ -136,6 +170,67 @@ spec: values: ["us-central1-c", "us-central1-a", "us-central1-f", "us-central1-b"] ``` +--- + +## Upgrading from chart 0.0.3 + +Chart 0.0.4 moves the controller from Karpenter GCP v0.0.1 to v0.6.0. That spans several +upstream breaking changes, so read this before upgrading a live cluster. Upstream's +[MIGRATION.md](https://github.com/cloudpilot-ai/karpenter-provider-gcp/blob/main/MIGRATION.md) +has the full detail. + +**Apply the CRDs by hand first.** Helm installs everything under `crds/` on first install and +never touches it again on upgrade. This release changes all three existing CRDs and adds +NodeOverlay, so apply them yourself before `helm upgrade`: + +```bash +helm pull zopdev/karpenter-gcp --untar +kubectl apply -f karpenter-gcp/crds/ +``` + +**Values renamed.** `controller.settings.location` is now `controller.settings.clusterLocation`, +with an optional `controller.settings.nodeLocation` for the exact GKE API location. Nothing +carries over automatically — a stale `location` key is silently ignored and the controller +starts with no location. + +**NodePool `instance-family` values.** Requirements must use the machine type prefix, not +family plus shape. `n4-standard` no longer matches anything; use `n4`. Audit every NodePool +before upgrading or Karpenter stops finding instance types. + +**GCENodeClass `tags` is now `labels`.** Rename the field on existing node classes. + +**`imageSelectorTerms[].alias` is deprecated** in favour of structured `family` with `channel` +or `version`. Existing aliases keep working, but migrate them. + +**Instance labels removed.** `karpenter.k8s.gcp/instance-category` and +`karpenter.k8s.gcp/instance-cpu-model` no longer exist. Remove them from NodePool +requirements and workload scheduling constraints. + +**Reserved `GCENodeClass.spec.metadata` keys are rejected**, including `kube-env`, +`startup-script`, `cluster-name`, and others GKE bootstrap owns. Audit existing node classes. + +**`kubeletConfiguration` fields now take effect.** Fields the CRD previously accepted and +dropped — `systemReserved`, `kubeReserved`, the `eviction*` family, and others — are now +applied. Values already set will change node behaviour on the next provision. + +**IAM.** Replace the broad `roles/compute.admin` and `roles/container.admin` bindings with +the minimal custom role in [Prerequisites](#prerequisites), and scope +`roles/iam.serviceAccountUser` to the node service account. The controller also needs +`container.clusters.get` and, if you use `channel:` image terms, `container.clusters.list`. + +**Legacy bootstrap pools.** Karpenter no longer creates `karpenter-default`, +`karpenter-ubuntu`, `karpenter-cos-arm64`, or `karpenter-ubuntu-arm64`. It discovers an +existing RUNNING pool instead. Once provisioning works, delete the legacy pools at your pace. + +**`disks` is now effectively mandatory on GCENodeClass.** The CRD neither requires it +nor supplies a default, but GCE rejects instance creation without it +(`Error 400: Invalid value for field 'resource.disks': ''`). Add a boot disk to every +node class before upgrading, or provisioning fails silently at the NodeClaim level while +the NodePool still reports Ready. + +**Node rotation.** The GCENodeClass hash version bumps, so Karpenter triggers one controlled +rolling replacement of every node it manages after the upgrade. + ## Uninstall Helm Chart To remove the Karpenter Helm chart and associated resources, run: @@ -163,11 +258,29 @@ This Helm chart includes several configurable parameters to adapt deployment to | **Input** | **Type** | **Description** | **Default** | |----------|----------|------------------|-------------| | `controller.settings.projectID` | `string` | GCP project ID | `""` | -| `controller.settings.region` | `string` | GCP region | `""` | +| `controller.settings.clusterLocation` | `string` | Region or zone used for instance type discovery, e.g. `us-central1` | `""` | +| `controller.settings.nodeLocation` | `string` | Exact cluster location for GKE API calls: `us-central1-a` for a zonal cluster, `us-central1` for a regional one. Falls back to `clusterLocation` | `""` | | `controller.settings.clusterName` | `string` | GKE cluster name | `""` | | `controller.settings.vmMemoryOverheadPercent` | `float` | Overhead multiplier for VM memory | `0.065` | | `controller.settings.batchMaxDuration` | `string` | Max batching delay | `"10s"` | | `controller.settings.batchIdleDuration` | `string` | Idle batching delay | `"1s"` | +| `controller.settings.ignoreDRARequests` | `bool` | Ignore pods' Dynamic Resource Allocation requests while simulating scheduling | `true` | +| `controller.settings.defaultNodePoolTemplateName` | `string` | Pin the GKE node pool read for bootstrap metadata. Empty means automatic discovery | `""` | +| `controller.settings.defaultNodepoolServiceAccount` | `string` | GCP service account email attached to provisioned nodes, overriding the Compute Engine default | `""` | + +### Feature Gates + +Everything except `spotToSpotConsolidation` is ALPHA upstream and off by default. + +| **Input** | **Type** | **Description** | **Default** | +|----------|----------|------------------|-------------| +| `controller.featureGates.spotToSpotConsolidation` | `bool` | Spot replacement consolidation, single and multi-node | `true` | +| `controller.featureGates.nodeOverlay` | `bool` | Let NodeOverlay resources influence scheduling decisions | `false` | +| `controller.featureGates.staticCapacity` | `bool` | A NodePool with `spec.replicas` holds a fixed node count regardless of pod demand | `false` | +| `controller.featureGates.nodeRepair` | `bool` | Replace nodes failing GKE Node Problem Detector health conditions | `false` | +| `controller.featureGates.reservedCapacity` | `bool` | Scheduling onto reserved GCP capacity. The provider does not implement GCE reservations yet | `false` | +| `controller.featureGates.capacityBuffer` | `bool` | CapacityBuffer pre-provisioning. The CRD is not shipped here — GKE provides it from `1.35.2-gke.1842000`, and enabling this without it fails at render time | `false` | +| `controller.disableControllerWarmup` | `bool` | Whether watches/informers start before leader election is won. `false` speeds up leader failover | `true` | ### Logging @@ -182,10 +295,37 @@ This Helm chart includes several configurable parameters to adapt deployment to | **Input** | **Type** | **Description** | **Default** | |----------|----------|------------------|-------------| | `controller.replicaCount` | `integer` | Number of controller replicas | `2` | +| `controller.image.tag` | `string` | Controller image tag | `"v0.6.0"` | +| `controller.priorityClassName` | `string` | Priority class for the controller pods. `gmp-critical` is created by Google Managed Prometheus. Set to `""` on clusters without it — naming a class that does not exist blocks pod creation entirely | `"gmp-critical"` | | `controller.image.repository` | `string` | Controller image repository | `"public.ecr.aws/cloudpilotai/gcp/karpenter"` | -| `controller.image.tag` | `string` | Controller image tag | `"v0.0.1"` | +| `controller.image.pullPolicy` | `string` | Image pull policy | `"IfNotPresent"` | +| `imagePullSecrets` | `list` | Existing pull secrets, for a private registry mirror | `[]` | +| `controller.strategy` | `object` | Deployment update strategy | `{ rollingUpdate: { maxUnavailable: 1 } }` | +| `controller.terminationGracePeriodSeconds` | `integer` | Grace period for controller shutdown | `30` | +| `controller.healthProbe.port` | `integer` | Port for the health and readiness probes. Upstream defaults to `8081`; this chart keeps `8001` so the port does not move on upgrade | `8001` | +| `controller.affinity` | `object` | Overrides the default pod anti-affinity, which spreads replicas one per node using the chart's selector labels. Leave empty to keep that default | `{}` | +| `controller.tolerations` | `list` | Tolerations for the controller pods | `[]` | | `controller.resources` | `object` | CPU and memory requests | `{ cpu: 500m, memory: 500Mi }` | | `controller.metrics.port` | `integer` | Metrics port | `8080` | +| `podSecurityContext` | `object` | Security context applied at the pod level | `{ runAsNonRoot: true, seccompProfile: { type: RuntimeDefault } }` | +| `securityContext` | `object` | Security context applied to the karpenter container | see `values.yaml` | +| `podDisruptionBudget.minAvailable` | `integer` | Minimum available pods, used only when `maxUnavailable` is null | `1` | +| `podDisruptionBudget.maxUnavailable` | `integer` | Maximum unavailable pods. Takes precedence over `minAvailable` when set | `null` | + +### Metrics + +`serviceMonitor` renders a Prometheus Operator `ServiceMonitor`, and only when the +`monitoring.coreos.com/v1` API is present on the cluster. + +| **Input** | **Type** | **Description** | **Default** | +|----------|----------|------------------|-------------| +| `serviceMonitor.enabled` | `bool` | Create a ServiceMonitor for the metrics endpoint | `false` | +| `serviceMonitor.additionalLabels` | `map` | Extra labels on the ServiceMonitor | `{}` | +| `serviceMonitor.interval` | `string` | Scrape interval. Empty uses the operator default | `""` | +| `serviceMonitor.scrapeTimeout` | `string` | Scrape timeout. Empty uses the operator default | `""` | +| `serviceMonitor.relabelings` | `list` | Relabelings for the metrics endpoint | `[]` | +| `serviceMonitor.metricRelabelings` | `list` | Metric relabelings for the metrics endpoint | `[]` | +| `serviceMonitor.sampleLimit` | `integer` | Per-scrape cap on accepted samples. `null` means no limit | `null` | ### Service Account @@ -227,12 +367,16 @@ podLabels: {} podDisruptionBudget: minAvailable: 1 + maxUnavailable: null + +serviceMonitor: + enabled: false controller: replicaCount: 2 revisionHistoryLimit: 10 image: - tag: "v0.0.1" + tag: "v0.6.0" env: [] @@ -244,10 +388,13 @@ controller: metrics: port: 8080 + featureGates: + spotToSpotConsolidation: true + settings: projectID: "" - region: "" - clusterName: "" + clusterName: "" vmMemoryOverheadPercent: 0.065 batchMaxDuration: 10s batchIdleDuration: 1s @@ -277,8 +424,8 @@ The karpenter deployment includes: - ClusterRoleBinding for controller access to Karpenter CRDs - ClusterRoles for managing Karpenter and core Kubernetes resources - PodDisruptionBudget for controller -- Service for exposing metrics -- CRDs: GCENodeClass, NodePool, NodeClaim +- Service for exposing metrics, and an optional ServiceMonitor for the Prometheus Operator +- CRDs: GCENodeClass, NodePool, NodeClaim, NodeOverlay --- diff --git a/charts/karpenter-gcp/crds/karpenter.k8s.gcp_gcenodeclasses.yaml b/charts/karpenter-gcp/crds/karpenter.k8s.gcp_gcenodeclasses.yaml index 5aef5805..8737cde3 100644 --- a/charts/karpenter-gcp/crds/karpenter.k8s.gcp_gcenodeclasses.yaml +++ b/charts/karpenter-gcp/crds/karpenter.k8s.gcp_gcenodeclasses.yaml @@ -3,412 +3,679 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.4 + controller-gen.kubebuilder.io/version: v0.21.0 name: gcenodeclasses.karpenter.k8s.gcp spec: group: karpenter.k8s.gcp names: categories: - - karpenter + - karpenter kind: GCENodeClass listKind: GCENodeClassList plural: gcenodeclasses shortNames: - - gcenc - - gcencs + - gcenc + - gcencs singular: gcenodeclass scope: Cluster versions: - - additionalPrinterColumns: - - jsonPath: .status.conditions[?(@.type=="Ready")].status - name: Ready - type: string - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1alpha1 - schema: - openAPIV3Schema: - description: GCENodeClass is the Schema for the GCENodeClass API - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: |- - GCENodeClassSpec is the top level specification for the GCP Karpenter Provider. - This will contain the configuration necessary to launch instances in GCP. - properties: - disks: - description: Disk defines the disks to attach to the provisioned instance. - items: - properties: - boot: - description: Indicates that this is a boot disk - type: boolean - category: - description: The category of the disk (e.g., pd-standard, pd-balanced, - pd-ssd, pd-extreme). - enum: - - hyperdisk-balanced - - hyperdisk-balanced-high-availability - - hyperdisk-extreme - - hyperdisk-ml - - hyperdisk-throughput - - local-ssd - - pd-balanced - - pd-extreme - - pd-ssd - - pd-standard - type: string - sizeGiB: - description: 'SizeGiB is the size of the disk. Unit: GiB' - format: int32 - type: integer - x-kubernetes-validations: - - message: size invalid - rule: self >= 10 - type: object - maxItems: 10 - type: array - imageFamily: - description: |- - ImageFamily dictates the instance template used when generating launch templates. - If no ImageSelectorTerms alias is specified, this field is required. - enum: - - Ubuntu - - ContainerOptimizedOS - type: string - imageSelectorTerms: - description: |- - ImageSelectorTerms is a list of or image selector terms. The terms are ORed. - Remove or adjust mutual exclusivity rules since there's only one field - items: - description: |- - ImageSelectorTerm defines selection logic for an image used by Karpenter to launch nodes. - If multiple fields are used for selection, the requirements are ANDed. - properties: - alias: - description: |- - Alias specifies which GKE image to select. - Valid families include: ContainerOptimizedOS,Ubuntu - maxLength: 60 - type: string - x-kubernetes-validations: - - message: '''alias'' is improperly formatted, must match the - format ''family@version''' - rule: self.matches('^[a-zA-Z0-9]+@.+$') - - message: 'family is not supported, must be one of the following: - ''ContainerOptimizedOS,Ubuntu''' - rule: self.find('^[^@]+') in ['ContainerOptimizedOS', 'Ubuntu'] - id: - description: ID specifies which GKE image to select. - maxLength: 160 - type: string - x-kubernetes-validations: - - message: '''id'' is improperly formatted, must match the format - ''id''' - rule: self.matches('^.*$') - type: object - maxItems: 30 - minItems: 1 - type: array - x-kubernetes-validations: - - message: '''alias'' is improperly formatted, must match the format - ''family''' - rule: self.all(x, has(x.alias) || has(x.id)) - kubeletConfiguration: - description: |- - KubeletConfiguration defines args to be used when configuring kubelet on provisioned nodes. - They are a vswitch of the upstream types, recognizing not all options may be supported. - Wherever possible, the types and names should reflect the upstream kubelet types. + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: GCENodeClass is the Schema for the GCENodeClass API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + GCENodeClassSpec is the top level specification for the GCP Karpenter Provider. + This will contain the configuration necessary to launch instances in GCP. + properties: + autoGPUTaint: + description: |- + AutoGPUTaint, when true, automatically applies nvidia.com/gpu=present:NoSchedule + to any GPU node at provisioning time, regardless of the NodePool configuration. + Disabled by default to preserve backward compatibility. + type: boolean + confidentialInstanceType: + description: |- + ConfidentialInstanceType enables Confidential VM for provisioned nodes using the + named technology (AMD SEV / SEV-SNP or Intel TDX), providing in-use memory + encryption. Leave unset to disable. Only supported on specific machine families. + enum: + - SEV + - SEV_SNP + - TDX + type: string + disks: + description: Disk defines the disks to attach to the provisioned instance. + items: properties: - clusterDNS: - description: |- - clusterDNS is a list of IP addresses for the cluster DNS server. - Note that not all providers may use all addresses. - items: - type: string - type: array - cpuCFSQuota: - description: CPUCFSQuota enables CPU CFS quota enforcement for - containers that specify CPU limits. + boot: + description: Indicates that this is a boot disk. type: boolean - evictionHard: - additionalProperties: - type: string - description: EvictionHard is the map of signal names to quantities - that define hard eviction thresholds - type: object - x-kubernetes-validations: - - message: valid keys for evictionHard are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'] - rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']) - evictionMaxPodGracePeriod: + category: + description: The category of the disk (e.g., pd-standard, pd-balanced, + pd-ssd, pd-extreme). + enum: + - hyperdisk-balanced + - hyperdisk-balanced-high-availability + - hyperdisk-extreme + - hyperdisk-ml + - hyperdisk-throughput + - local-ssd + - pd-balanced + - pd-extreme + - pd-ssd + - pd-standard + type: string + kmsKeyName: description: |- - EvictionMaxPodGracePeriod is the maximum allowed grace period (in seconds) to use when terminating pods in - response to soft eviction thresholds being met. - format: int32 - type: integer - evictionSoft: - additionalProperties: - type: string - description: EvictionSoft is the map of signal names to quantities - that define soft eviction thresholds - type: object - x-kubernetes-validations: - - message: valid keys for evictionSoft are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'] - rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']) - evictionSoftGracePeriod: - additionalProperties: - type: string - description: EvictionSoftGracePeriod is the map of signal names - to quantities that define grace periods for each eviction signal - type: object - x-kubernetes-validations: - - message: valid keys for evictionSoftGracePeriod are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'] - rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']) - imageGCHighThresholdPercent: + KMSKeyName is the Cloud KMS key to use for disk encryption. + Format: projects/{project}/locations/{region}/keyRings/{keyring}/cryptoKeys/{key} + Optionally, you can specify a version: projects/{project}/locations/{region}/keyRings/{keyring}/cryptoKeys/{key}/cryptoKeyVersions/{version} + pattern: ^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+(/cryptoKeyVersions/[^/]+)?$ + type: string + kmsKeyServiceAccount: description: |- - ImageGCHighThresholdPercent is the percent of disk usage after which image - garbage collection is always run. The percent is calculated by dividing this - field value by 100, so this field must be between 0 and 100, inclusive. - When specified, the value must be greater than ImageGCLowThresholdPercent. - format: int32 - maximum: 100 - minimum: 0 + KMSKeyServiceAccount is the service account to use for accessing the KMS key. + If not specified, the Compute Engine default service account will be used. + pattern: ^[^@]+@(developer\.gserviceaccount\.com|[^@]+\.iam\.gserviceaccount\.com)$ + type: string + provisionedIOPS: + description: |- + ProvisionedIOPS is the number of I/O operations per second to provision for the disk. + Applicable for: pd-extreme (2,500–120,000), hyperdisk-balanced (3,000–160,000), + hyperdisk-balanced-high-availability (up to 100,000), and hyperdisk-extreme (up to 350,000). + format: int64 type: integer - imageGCLowThresholdPercent: + provisionedThroughput: description: |- - ImageGCLowThresholdPercent is the percent of disk usage before which image - garbage collection is never run. Lowest disk usage to garbage collect to. - The percent is calculated by dividing this field value by 100, - so the field value must be between 0 and 100, inclusive. - When specified, the value must be less than imageGCHighThresholdPercent + ProvisionedThroughput is the throughput in MiB/s to provision for the disk. + Applicable for: hyperdisk-balanced (140–2,400 MiB/s), hyperdisk-balanced-high-availability (up to 1,200 MiB/s), + hyperdisk-throughput (up to 2,400 MiB/s), and hyperdisk-ml (up to 1,200,000 MiB/s). + format: int64 + type: integer + secondaryBootImage: + description: SecondaryBootImage is the secondary boot disk image + name (e.g. global/images/DISK_IMAGE_NAME). + type: string + secondaryBootMode: + description: SecondaryBootMode is the secondary boot disk mode + (e.g. CONTAINER_IMAGE_CACHE). + enum: + - MODE_UNSPECIFIED + - CONTAINER_IMAGE_CACHE + type: string + sizeGiB: + description: 'SizeGiB is the size of the disk. Unit: GiB' format: int32 - maximum: 100 - minimum: 0 type: integer - kubeReserved: - additionalProperties: - type: string - description: KubeReserved contains resources reserved for Kubernetes - system components. - type: object x-kubernetes-validations: - - message: valid keys for kubeReserved are ['cpu','memory','ephemeral-storage','pid'] - rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' - || x=='pid') - - message: kubeReserved value cannot be a negative resource quantity - rule: self.all(x, !self[x].startsWith('-')) - maxPods: + - message: size invalid + rule: self >= 10 + type: object + x-kubernetes-validations: + - message: provisionedIOPS is only applicable for pd-extreme, hyperdisk-balanced, + hyperdisk-balanced-high-availability, and hyperdisk-extreme + rule: '!has(self.provisionedIOPS) || self.category in [''pd-extreme'', + ''hyperdisk-balanced'', ''hyperdisk-balanced-high-availability'', + ''hyperdisk-extreme'']' + - message: provisionedThroughput is only applicable for hyperdisk-balanced, + hyperdisk-balanced-high-availability, hyperdisk-throughput, + and hyperdisk-ml + rule: '!has(self.provisionedThroughput) || self.category in [''hyperdisk-balanced'', + ''hyperdisk-balanced-high-availability'', ''hyperdisk-throughput'', + ''hyperdisk-ml'']' + - message: provisionedIOPS and provisionedThroughput must both be + set or both be unset for hyperdisk-balanced and hyperdisk-balanced-high-availability + rule: '!(self.category in [''hyperdisk-balanced'', ''hyperdisk-balanced-high-availability'']) + || (has(self.provisionedIOPS) == has(self.provisionedThroughput))' + maxItems: 10 + type: array + gpuDriverVersion: + default: default + description: |- + GPUDriverVersion controls which NVIDIA driver version GKE installs on GPU nodes. + Mirrors the GKE node pool gpu_driver_installation_config.gpu_driver_version field. + Valid values: "default" (GKE-recommended stable), "latest" (newest, COS only), + "disabled" (skip automatic installation). + Ignored for non-GPU instance types. + enum: + - default + - latest + - disabled + type: string + imageFamily: + description: |- + ImageFamily dictates the instance template used when generating launch templates. + If no ImageSelectorTerms alias is specified, this field is required. + enum: + - Ubuntu + - ContainerOptimizedOS + type: string + imageSelectorTerms: + description: ImageSelectorTerms is a list of or image selector terms. + The terms are ORed. + items: + description: |- + ImageSelectorTerm defines selection logic for an image used by Karpenter to launch nodes. + Exactly one of alias, id, or family (with channel or version) must be set. + properties: + alias: description: |- - MaxPods is an override for the maximum number of pods that can run on - a worker node instance. - format: int32 - minimum: 0 - type: integer - podsPerCore: + Deprecated: use Family with Channel or Version instead. + Alias specifies which GKE image to select. + Valid families include: ContainerOptimizedOS, Ubuntu + maxLength: 60 + type: string + x-kubernetes-validations: + - message: '''alias'' is improperly formatted, must match the + format ''family@version''' + rule: self.matches('^[a-zA-Z0-9]+@.+$') + - message: 'family is not supported, must be one of the following: + ''ContainerOptimizedOS,Ubuntu''' + rule: self.find('^[^@]+') in ['ContainerOptimizedOS', 'Ubuntu'] + - message: ContainerOptimizedOS version must be 'latest' or + 'milestone.build.build.build' (e.g. '125.19216.104.126') + rule: '!self.startsWith(''ContainerOptimizedOS@'') || self.matches(''^ContainerOptimizedOS@(latest|[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)$'')' + - message: Ubuntu version must be 'latest' or 'vYYYYMMDD' (e.g. + 'v20260416') + rule: '!self.startsWith(''Ubuntu@'') || self.matches(''^Ubuntu@(latest|v[0-9]{8})$'')' + channel: description: |- - PodsPerCore is an override for the number of pods that can run on a worker node - instance based on the number of cpu cores. This value cannot exceed MaxPods, so, if - MaxPods is a lower value, that value will be used. - format: int32 - minimum: 0 - type: integer - systemReserved: - additionalProperties: - type: string - description: SystemReserved contains resources reserved for OS - system daemons and kernel memory. - type: object + Channel specifies the GKE release channel to follow. Only valid when Family is ContainerOptimizedOS. + Use "cluster" to track the channel the cluster is enrolled in. + enum: + - rapid + - regular + - stable + - extended + - cluster + type: string + family: + description: |- + Family specifies the OS image family. Required when using Channel or Version. + Valid values: ContainerOptimizedOS, Ubuntu2404, Ubuntu2204. + enum: + - ContainerOptimizedOS + - Ubuntu2404 + - Ubuntu2204 + type: string + id: + description: ID specifies a GKE image by its full resource URL. + maxLength: 160 + type: string x-kubernetes-validations: - - message: valid keys for systemReserved are ['cpu','memory','ephemeral-storage','pid'] - rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' - || x=='pid') - - message: systemReserved value cannot be a negative resource - quantity - rule: self.all(x, !self[x].startsWith('-')) + - message: '''id'' is improperly formatted, must match the format + ''id''' + rule: self.matches('^.*$') + version: + description: |- + Version pins the image to a specific version or "latest". + For ContainerOptimizedOS: "latest" or "milestone.build.build.build" (e.g. "125.19216.104.126"). + For Ubuntu2404/Ubuntu2204: "latest" or "vYYYYMMDD" (e.g. "v20260416"). + maxLength: 32 + type: string type: object x-kubernetes-validations: - - message: imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent - rule: 'has(self.imageGCHighThresholdPercent) && has(self.imageGCLowThresholdPercent) + - message: family requires either channel or version to be set + rule: '!has(self.family) || has(self.channel) || has(self.version)' + - message: channel and version require family to be set + rule: '!(has(self.channel) || has(self.version)) || has(self.family)' + - message: channel and version cannot both be set + rule: '!(has(self.channel) && has(self.version))' + - message: channel is only supported for family ContainerOptimizedOS + rule: '!has(self.channel) || self.family == ''ContainerOptimizedOS''' + - message: exactly one of alias, id, or family must be set + rule: '(has(self.alias) ? 1 : 0) + (has(self.id) ? 1 : 0) + (has(self.family) + ? 1 : 0) == 1' + - message: ContainerOptimizedOS version must be 'latest' or 'milestone.build.build.build' + (e.g. '125.19216.104.126') + rule: '!has(self.version) || !has(self.family) || self.family + != ''ContainerOptimizedOS'' || self.version == ''latest'' || + self.version.matches(''^[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+$'')' + - message: Ubuntu2404 version must be 'latest' or 'vYYYYMMDD' (e.g. + 'v20260416') + rule: '!has(self.version) || !has(self.family) || self.family + != ''Ubuntu2404'' || self.version == ''latest'' || self.version.matches(''^v[0-9]{8}$'')' + - message: Ubuntu2204 version must be 'latest' or 'vYYYYMMDD' (e.g. + 'v20260416') + rule: '!has(self.version) || !has(self.family) || self.family + != ''Ubuntu2204'' || self.version == ''latest'' || self.version.matches(''^v[0-9]{8}$'')' + - message: family 'Ubuntu' is not valid; use Ubuntu2404 for Ubuntu + 24.04 or Ubuntu2204 for Ubuntu 22.04 + rule: '!has(self.family) || self.family != ''Ubuntu''' + maxItems: 30 + minItems: 1 + type: array + x-kubernetes-validations: + - message: 'each term must set exactly one of: alias, id, or family + (with channel or version)' + rule: self.all(x, has(x.alias) || has(x.id) || has(x.family)) + - message: 'channel: and version: latest cannot both appear in the + same imageSelectorTerms' + rule: '!(self.exists(t, has(t.channel)) && self.exists(t, has(t.family) + && t.family == ''ContainerOptimizedOS'' && has(t.version) && t.version + == ''latest''))' + kubeletConfiguration: + description: |- + KubeletConfiguration defines args to be used when configuring kubelet on provisioned nodes. + They are a vswitch of the upstream types, recognizing not all options may be supported. + Wherever possible, the types and names should reflect the upstream kubelet types. + properties: + clusterDNS: + description: |- + clusterDNS is a list of IP addresses for the cluster DNS server. + Note that not all providers may use all addresses. + items: + type: string + type: array + cpuCFSQuota: + description: CPUCFSQuota enables CPU CFS quota enforcement for + containers that specify CPU limits. + type: boolean + evictionHard: + additionalProperties: + description: KubeletQuantity is a bounded kubelet resource quantity + or percentage string. + maxLength: 64 + type: string + description: EvictionHard is the map of signal names to quantities + that define hard eviction thresholds + maxProperties: 10 + type: object + x-kubernetes-validations: + - message: valid keys for evictionHard are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'] + rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']) + - message: evictionHard values must be a percentage or a resource.Quantity + rule: self.all(x, self[x].matches('^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%|(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$')) + evictionMaxPodGracePeriod: + description: |- + EvictionMaxPodGracePeriod is the maximum allowed grace period (in seconds) to use when terminating pods in + response to soft eviction thresholds being met. + format: int32 + type: integer + evictionSoft: + additionalProperties: + description: KubeletQuantity is a bounded kubelet resource quantity + or percentage string. + maxLength: 64 + type: string + description: EvictionSoft is the map of signal names to quantities + that define soft eviction thresholds + maxProperties: 10 + type: object + x-kubernetes-validations: + - message: valid keys for evictionSoft are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'] + rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']) + - message: evictionSoft values must be a percentage or a resource.Quantity + rule: self.all(x, self[x].matches('^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%|(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$')) + evictionSoftGracePeriod: + additionalProperties: + type: string + description: EvictionSoftGracePeriod is the map of signal names + to quantities that define grace periods for each eviction signal + maxProperties: 10 + type: object + x-kubernetes-validations: + - message: valid keys for evictionSoftGracePeriod are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'] + rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']) + imageGCHighThresholdPercent: + description: |- + ImageGCHighThresholdPercent is the percent of disk usage after which image + garbage collection is always run. The percent is calculated by dividing this + field value by 100, so this field must be between 0 and 100, inclusive. + When specified, the value must be greater than ImageGCLowThresholdPercent. + format: int32 + maximum: 100 + minimum: 0 + type: integer + imageGCLowThresholdPercent: + description: |- + ImageGCLowThresholdPercent is the percent of disk usage before which image + garbage collection is never run. Lowest disk usage to garbage collect to. + The percent is calculated by dividing this field value by 100, + so the field value must be between 0 and 100, inclusive. + When specified, the value must be less than imageGCHighThresholdPercent + format: int32 + maximum: 100 + minimum: 0 + type: integer + kubeReserved: + additionalProperties: + description: KubeletQuantity is a bounded kubelet resource quantity + or percentage string. + maxLength: 64 + type: string + description: KubeReserved contains resources reserved for Kubernetes + system components. + maxProperties: 10 + type: object + x-kubernetes-validations: + - message: valid keys for kubeReserved are ['cpu','memory','ephemeral-storage','pid'] + rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' + || x=='pid') + - message: kubeReserved value cannot be a negative resource quantity + rule: self.all(x, !self[x].startsWith('-')) + - message: kubeReserved values must be a resource.Quantity + rule: self.all(x, self[x].matches('^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$')) + maxPods: + description: |- + MaxPods is an override for the maximum number of pods that can run on + a worker node instance. + format: int32 + minimum: 0 + type: integer + podsPerCore: + description: |- + PodsPerCore is an override for the number of pods that can run on a worker node + instance based on the number of cpu cores. This value cannot exceed MaxPods, so, if + MaxPods is a lower value, that value will be used. + format: int32 + minimum: 0 + type: integer + systemReserved: + additionalProperties: + description: KubeletQuantity is a bounded kubelet resource quantity + or percentage string. + maxLength: 64 + type: string + description: SystemReserved contains resources reserved for OS + system daemons and kernel memory. + maxProperties: 10 + type: object + x-kubernetes-validations: + - message: valid keys for systemReserved are ['cpu','memory','ephemeral-storage','pid'] + rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' + || x=='pid') + - message: systemReserved value cannot be a negative resource + quantity + rule: self.all(x, !self[x].startsWith('-')) + - message: systemReserved values must be a resource.Quantity + rule: self.all(x, self[x].matches('^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$')) + type: object + x-kubernetes-validations: + - message: imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent + rule: 'has(self.imageGCHighThresholdPercent) && has(self.imageGCLowThresholdPercent) ? self.imageGCHighThresholdPercent > self.imageGCLowThresholdPercent : true' - - message: evictionSoft OwnerKey does not have a matching evictionSoftGracePeriod - rule: has(self.evictionSoft) ? self.evictionSoft.all(e, (e in self.evictionSoftGracePeriod)):true - - message: evictionSoftGracePeriod OwnerKey does not have a matching - evictionSoft - rule: has(self.evictionSoftGracePeriod) ? self.evictionSoftGracePeriod.all(e, - (e in self.evictionSoft)):true - labels: - additionalProperties: - type: string - description: Labels to be applied on GCE VM instance. - type: object - x-kubernetes-validations: - - message: empty tag keys aren't supported - rule: self.all(k, k != '') - - message: tag contains a restricted tag matching gce:gce-cluster-name - rule: self.all(k, k !='gce:gce-cluster-name') - - message: tag contains a restricted tag matching kubernetes.io/cluster/ - rule: self.all(k, !k.startsWith('kubernetes.io/cluster') ) - - message: tag contains a restricted tag matching karpenter.sh/nodepool - rule: self.all(k, k != 'karpenter.sh/nodepool') - - message: tag contains a restricted tag matching karpenter.sh/nodeclaim - rule: self.all(k, k !='karpenter.sh/nodeclaim') - - message: tag contains a restricted tag matching karpenter.k8s.gcp/gcenodeclass - rule: self.all(k, k !='karpenter.k8s.gcp/gcenodeclass') - metadata: - additionalProperties: - type: string - description: Metadata contains key/value pairs to set as instance - metadata - type: object - networkTags: - description: NetworkTags is a list of network tags to apply to the node. - items: - maxLength: 63 - pattern: ^[a-z]([-a-z0-9]{0,61}[a-z0-9])?$ + - message: evictionSoft OwnerKey does not have a matching evictionSoftGracePeriod + rule: has(self.evictionSoft) ? self.evictionSoft.all(e, (e in self.evictionSoftGracePeriod)):true + - message: evictionSoftGracePeriod OwnerKey does not have a matching + evictionSoft + rule: has(self.evictionSoftGracePeriod) ? self.evictionSoftGracePeriod.all(e, + (e in self.evictionSoft)):true + labels: + additionalProperties: + type: string + description: Labels to be applied on GCE VM instance. + maxProperties: 20 + type: object + x-kubernetes-validations: + - message: empty tag keys aren't supported + rule: self.all(k, k != '') + - message: tag contains a restricted tag matching gce:gce-cluster-name + rule: self.all(k, k !='gce:gce-cluster-name') + - message: tag contains a restricted tag matching kubernetes.io/cluster/ + rule: self.all(k, !k.startsWith('kubernetes.io/cluster') ) + - message: tag contains a restricted tag matching karpenter.sh/nodepool + rule: self.all(k, k != 'karpenter.sh/nodepool') + - message: tag contains a restricted tag matching karpenter.sh/nodeclaim + rule: self.all(k, k !='karpenter.sh/nodeclaim') + - message: tag contains a restricted tag matching karpenter.k8s.gcp/gcenodeclass + rule: self.all(k, k !='karpenter.k8s.gcp/gcenodeclass') + metadata: + additionalProperties: + type: string + description: |- + Metadata contains custom key/value pairs to set as instance metadata. + Keys reserved by GKE bootstrap metadata are rejected because the provider owns them. + type: object + x-kubernetes-validations: + - message: spec.metadata contains a reserved GKE metadata key + rule: '!(''cluster-location'' in self) && !(''cluster-name'' in + self) && !(''cluster-uid'' in self) && !(''configure-sh'' in self) + && !(''containerd-configure-sh'' in self) && !(''disable-address-manager'' + in self) && !(''enable-os-login'' in self) && !(''gci-ensure-gke-docker'' + in self) && !(''gci-metrics-enabled'' in self) && !(''gci-update-strategy'' + in self) && !(''instance-template'' in self) && !(''install-ssh-psm1'' + in self) && !(''k8s-node-setup-psm1'' in self) && !(''kube-env'' + in self) && !(''kube-labels'' in self) && !(''startup-script'' + in self) && !(''user-data'' in self) && !(''user-profile-psm1'' + in self) && !(''windows-startup-script-ps1'' in self) && !(''common-psm1'' + in self) && !(''kubeconfig'' in self) && !(''kubelet-config'' + in self)' + networkConfig: + description: NetworkConfig allows overriding per-interface network + settings for provisioned nodes. + properties: + additionalNetworkInterfaces: + description: |- + AdditionalNetworkInterfaces adds secondary network interfaces to provisioned nodes. + Each entry must specify a subnetwork. + Mirrors GKE node pool network_config.additional_node_network_configs. + items: + description: |- + AdditionalNetworkInterface defines a secondary network interface on provisioned nodes. + Mirrors an entry in GKE node pool network_config.additional_node_network_configs. + properties: + network: + description: |- + Network is the VPC network for this interface. + When unset, defaults to the cluster's network. + type: string + subnetwork: + description: Subnetwork is the subnetwork for this interface. + Required. + minLength: 1 + type: string + required: + - subnetwork + type: object + maxItems: 7 + type: array + enablePrivateNodes: + description: |- + EnablePrivateNodes controls whether provisioned nodes have internal IP addresses only + (no external IP). When unset, defaults to the cluster's EnablePrivateNodes setting. + Mirrors GKE node pool network_config.enable_private_nodes. + type: boolean + subnetwork: + description: |- + Subnetwork is the subnetwork for the primary network interface. + Format: projects/{project}/regions/{region}/subnetworks/{name} + When unset, defaults to the cluster's primary subnetwork. + Mirrors GKE node pool network_config.subnetwork. type: string - maxItems: 64 - type: array - x-kubernetes-validations: - - message: network tag must match ^[a-z]([-a-z0-9]{0,61}[a-z0-9])?$ - rule: self.all(x, x.matches('^[a-z]([-a-z0-9]{0,61}[a-z0-9])?$')) - serviceAccount: - description: ServiceAccount is the GCP IAM service account email to - assign to the instance - pattern: ^[^@]+@(developer\.gserviceaccount\.com|[^@]+\.iam\.gserviceaccount\.com)$ + type: object + networkTags: + description: NetworkTags is a list of network tags to apply to the + node. + items: + description: |- + NetworkTag represents a single GCE network tag value. + Network tags must be RFC1035 compliant, start with a lowercase letter, and contain only + lowercase letters, digits, and hyphens. + maxLength: 63 + minLength: 1 + pattern: ^[a-z]([-a-z0-9]{0,61}[a-z0-9])?$ type: string - required: - - imageSelectorTerms - type: object - status: - description: GCENodeClassStatus contains the resolved state of the GCENodeClass - properties: - conditions: - description: Conditions contains signals for health and readiness - items: - description: Condition aliases the upstream type and adds additional - helper methods - properties: - lastTransitionTime: - description: |- - lastTransitionTime is the last time the condition transitioned from one status to another. - This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: |- - message is a human readable message indicating details about the transition. - This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: |- - observedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: + maxItems: 20 + type: array + serviceAccount: + description: ServiceAccount is the GCP IAM service account email to + assign to the instance + pattern: ^[^@]+@(developer\.gserviceaccount\.com|[^@]+\.iam\.gserviceaccount\.com)$ + type: string + shieldedInstanceConfig: + description: |- + ShieldedInstanceConfig enables Shielded VM for provisioned nodes: Secure Boot, + virtual TPM, and integrity monitoring. + properties: + enableIntegrityMonitoring: + description: EnableIntegrityMonitoring defines whether the instance + has integrity monitoring enabled. + type: boolean + enableSecureBoot: + description: EnableSecureBoot defines whether the instance has + Secure Boot enabled. + type: boolean + enableVtpm: + description: EnableVtpm defines whether the instance has the vTPM + enabled. + type: boolean + type: object + subnetRangeName: + description: |- + SubnetRangeName is the name of the subnetwork secondary IPv4 range from which + to allocate pod IP addresses (alias IPs for pods). If not specified, the cluster's + default pod secondary range (ClusterSecondaryRangeName from the cluster's IP + allocation policy) is used. + maxLength: 63 + minLength: 1 + pattern: ^[a-z]([-a-z0-9]{0,61}[a-z0-9])?$ + type: string + required: + - imageSelectorTerms + type: object + status: + description: GCENodeClassStatus contains the resolved state of the GCENodeClass + properties: + conditions: + description: Conditions contains signals for health and readiness + items: + description: Condition aliases the upstream type and adds additional + helper methods + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + images: + description: |- + Image contains the current image that are available to the + cluster under the Image selectors. + items: + description: Image contains resolved image selector values utilized + for node launch + properties: + requirements: + description: Requirements of the Image to be utilized on an + instance type + items: description: |- - reason contains a programmatic identifier indicating the reason for the condition's last transition. - Producers of specific condition types may define expected values and meanings for this field, - and whether the values are considered a guaranteed API. - The value should be a CamelCase string. - This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown - type: string - type: - description: type of condition in CamelCase or in foo.example.com/CamelCase. - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - images: - description: |- - Image contains the current image that are available to the - cluster under the Image selectors. - items: - description: Image contains resolved image selector values utilized - for node launch - properties: - requirements: - description: Requirements of the Image to be utilized on an - instance type - items: - description: |- - A node selector requirement is a selector that contains values, a key, and an operator - that relates the key and values. - properties: - key: - description: The label key that the selector applies to. - type: string - operator: - description: |- - Represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + A node selector requirement is a selector that contains values, a key, and an operator + that relates the key and values. + properties: + key: + description: The label key that the selector applies to. + type: string + operator: + description: |- + Represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + type: string + values: + description: |- + 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. If the operator is Gt or Lt, the values + array must have a single element, which will be interpreted as an integer. + This array is replaced during a strategic merge patch. + items: type: string - values: - description: |- - 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. If the operator is Gt or Lt, the values - array must have a single element, which will be interpreted as an integer. - 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 - sourceImage: - description: SourceImage represents the source image, format - like projects/gke-node-images/global/images/gke-1309-gke1046000-cos-113-18244-291-9-c-pre - type: string - required: - - requirements - - sourceImage - type: object - type: array - type: object - type: object - served: true - storage: true - subresources: - status: {} \ No newline at end of file + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + sourceImage: + description: SourceImage represents the source image, format + like projects/gke-node-images/global/images/gke-1309-gke1046000-cos-113-18244-291-9-c-pre + type: string + required: + - requirements + - sourceImage + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/karpenter-gcp/crds/karpenter.sh_nodeclaims.yaml b/charts/karpenter-gcp/crds/karpenter.sh_nodeclaims.yaml index b9758044..2025431a 100644 --- a/charts/karpenter-gcp/crds/karpenter.sh_nodeclaims.yaml +++ b/charts/karpenter-gcp/crds/karpenter.sh_nodeclaims.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.4 + controller-gen.kubebuilder.io/version: v0.20.1 name: nodeclaims.karpenter.sh spec: group: karpenter.sh @@ -90,8 +90,7 @@ spec: pattern: ^(([0-9]+(s|m|h))+|Never)$ type: string nodeClassRef: - description: NodeClassRef is a reference to an object that defines - provider specific configuration + description: NodeClassRef is a reference to an object that defines provider specific configuration properties: group: description: API version of the referent @@ -118,16 +117,22 @@ spec: - name type: object requirements: - description: Requirements are layered with GetLabels and applied to - every node. + description: Requirements are layered with GetLabels and applied to every node. items: description: |- - A node selector requirement with min values is a selector that contains values, a key, an operator that relates the key and values + A node selector requirement is a selector that contains values, a key, an operator that relates the key and values and minValues that represent the requirement to have at least that many values. properties: key: description: The label key that the selector applies to. type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ + x-kubernetes-validations: + - message: label domain "karpenter.sh" is restricted + rule: self in ["karpenter.sh/capacity-type", "karpenter.sh/nodepool"] || !self.find("^([^/]+)").endsWith("karpenter.sh") + - message: label "kubernetes.io/hostname" is restricted + rule: self != "kubernetes.io/hostname" minValues: description: |- This field is ALPHA and can be dropped or replaced at any time @@ -138,40 +143,46 @@ spec: operator: description: |- Represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte. + enum: + - Gte + - Lte + - In + - NotIn + - Exists + - DoesNotExist + - Gt + - Lt type: string values: description: |- 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. If the operator is Gt or Lt, the values + the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. items: type: string type: array x-kubernetes-list-type: atomic + maxLength: 63 + pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ required: - key - operator type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic x-kubernetes-validations: - message: requirements with operator 'In' must have a value defined - rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : - true)' - - message: requirements operator 'Gt' or 'Lt' must have a single positive - integer value - rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'') - ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)' - - message: requirements with 'minValues' must have at least that many - values specified in the 'values' field - rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) ? - x.values.size() >= x.minValues : true)' + rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)' + - message: requirements operator 'Gt', 'Lt', 'Gte', or 'Lte' must have a single positive integer value + rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)' + - message: requirements with 'minValues' must have at least that many values specified in the 'values' field + rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) ? x.values.size() >= x.minValues : true)' resources: - description: Resources models the resource requirements for the NodeClaim - to launch + description: Resources models the resource requirements for the NodeClaim to launch properties: requests: additionalProperties: @@ -180,13 +191,12 @@ spec: - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - description: Requests describes the minimum required resources - for the NodeClaim to launch + description: Requests describes the minimum required resources for the NodeClaim to launch type: object type: object startupTaints: description: |- - StartupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically + startupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically within a short period of time, typically by a DaemonSet that tolerates the taint. These are commonly used by daemonsets to allow initialization and enforce startup ordering. StartupTaints are ignored for provisioning purposes in that pods are not required to tolerate a StartupTaint in order to have nodes provisioned for them. @@ -201,25 +211,31 @@ spec: that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute. type: string + enum: + - NoSchedule + - PreferNoSchedule + - NoExecute key: description: Required. The taint key to be applied to a node. type: string + minLength: 1 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ timeAdded: - description: |- - TimeAdded represents the time at which the taint was added. - It is only written for NoExecute taints. + description: TimeAdded represents the time at which the taint was added. format: date-time type: string value: description: The taint value corresponding to the taint key. type: string + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ required: - effect - key type: object type: array + x-kubernetes-list-type: atomic taints: - description: Taints will be applied to the NodeClaim's node. + description: taints will be applied to the NodeClaim's node. items: description: |- The node this Taint is attached to has the "effect" on @@ -231,36 +247,42 @@ spec: that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute. type: string + enum: + - NoSchedule + - PreferNoSchedule + - NoExecute key: description: Required. The taint key to be applied to a node. type: string + minLength: 1 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ timeAdded: - description: |- - TimeAdded represents the time at which the taint was added. - It is only written for NoExecute taints. + description: TimeAdded represents the time at which the taint was added. format: date-time type: string value: description: The taint value corresponding to the taint key. type: string + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ required: - effect - key type: object type: array + x-kubernetes-list-type: atomic terminationGracePeriod: description: |- TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated. - + Warning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation. - + This field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period. When set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached. - + Karpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod. If a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout, that pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds. - + The feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks. If left undefined, the controller will wait indefinitely for pods to be drained. pattern: ^([0-9]+(s|m|h))+$ @@ -282,8 +304,7 @@ spec: - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - description: Allocatable is the estimated allocatable capacity of - the node + description: Allocatable is the estimated allocatable capacity of the node type: object capacity: additionalProperties: @@ -297,8 +318,7 @@ spec: conditions: description: Conditions contains signals for health and readiness items: - description: Condition aliases the upstream type and adds additional - helper methods + description: Condition aliases the upstream type and adds additional helper methods properties: lastTransitionTime: description: |- @@ -328,8 +348,7 @@ spec: The value should be a CamelCase string. This field may not be empty. maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + pattern: ^([A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?|)$ type: string status: description: status of the condition, one of True, False, Unknown. @@ -345,15 +364,15 @@ spec: type: string required: - lastTransitionTime - - message - - reason - status - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map imageID: - description: ImageID is an identifier for the image that runs on the - node + description: ImageID is an identifier for the image that runs on the node type: string lastPodEventTime: description: |- @@ -375,4 +394,4 @@ spec: served: true storage: true subresources: - status: {} \ No newline at end of file + status: {} diff --git a/charts/karpenter-gcp/crds/karpenter.sh_nodeoverlays.yaml b/charts/karpenter-gcp/crds/karpenter.sh_nodeoverlays.yaml new file mode 100644 index 00000000..79b365d3 --- /dev/null +++ b/charts/karpenter-gcp/crds/karpenter.sh_nodeoverlays.yaml @@ -0,0 +1,227 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.20.1 + name: nodeoverlays.karpenter.sh +spec: + group: karpenter.sh + names: + categories: + - karpenter + kind: NodeOverlay + listKind: NodeOverlayList + plural: nodeoverlays + shortNames: + - overlays + singular: nodeoverlay + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .spec.weight + name: Weight + priority: 1 + type: integer + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + properties: + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: |- + Capacity adds extended resources only, and does not replace any existing resources. + These extended resources are appended to the node's existing resource list. + Note: This field does not modify or override standard resources like cpu, memory, ephemeral-storage, or pods. + type: object + x-kubernetes-validations: + - message: invalid resource restricted + rule: self.all(x, !(x in ['cpu', 'memory', 'ephemeral-storage', 'pods'])) + price: + description: Price specifies amount for an instance types that match the specified labels. Users can override prices using a signed float representing the price override + pattern: ^\d+(\.\d+)?$ + type: string + priceAdjustment: + description: |- + PriceAdjustment specifies the price change for matching instance types. Accepts either: + - A fixed price modifier (e.g., -0.5, 1.2) + - A percentage modifier (e.g., +10% for increase, -15% for decrease) + pattern: ^(([+-]{1}(\d*\.?\d+))|(\+{1}\d*\.?\d+%)|(^(-\d{1,2}(\.\d+)?%)$)|(-100%))$ + type: string + requirements: + description: |- + requirements constrain when this NodeOverlay is applied during scheduling simulations. + These requirements can match: + - Well-known labels (e.g., node.kubernetes.io/instance-type, karpenter.sh/nodepool) + - Custom labels from NodePool's spec.template.labels + items: + description: |- + A node selector requirement is a selector that contains values, a key, an operator that relates the key and values + to have at least that many values. + properties: + key: + description: The label key that the selector applies to. + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ + x-kubernetes-validations: + - message: label domain "karpenter.sh" is restricted + rule: self in ["karpenter.sh/capacity-type", "karpenter.sh/nodepool"] || !self.find("^([^/]+)").endsWith("karpenter.sh") + - message: label "kubernetes.io/hostname" is restricted + rule: self != "kubernetes.io/hostname" + operator: + description: |- + Represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte. + enum: + - Gte + - Lte + - In + - NotIn + - Exists + - DoesNotExist + - Gt + - Lt + type: string + values: + description: |- + 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. If the operator is Gt, Lt, Gte, or Lte, the values + array must have a single element, which will be interpreted as an integer. + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxLength: 63 + pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ + required: + - key + - operator + type: object + maxItems: 100 + type: array + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - message: requirements with operator 'NotIn' must have a value defined + rule: 'self.all(x, x.operator == ''NotIn'' ? x.values.size() != 0 : true)' + - message: requirements with operator 'In' must have a value defined + rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)' + - message: requirements operator 'Gt', 'Lt', 'Gte' or 'Lte' must have a single positive integer value + rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)' + weight: + description: |- + Weight defines the priority of this NodeOverlay when overriding node attributes. + NodeOverlays with higher numerical weights take precedence over those with lower weights. + If no weight is specified, the NodeOverlay is treated as having a weight of 0. + When multiple NodeOverlays have identical weights, they are merged in alphabetical order. + format: int32 + maximum: 10000 + minimum: 1 + type: integer + required: + - requirements + type: object + x-kubernetes-validations: + - message: cannot set both 'price' and 'priceAdjustment' + rule: '!has(self.price) || !has(self.priceAdjustment)' + status: + description: NodeOverlayStatus defines the observed state of NodeOverlay + properties: + conditions: + description: Conditions contains signals for health and readiness + items: + description: Condition aliases the upstream type and adds additional helper methods + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/karpenter-gcp/crds/karpenter.sh_nodepools.yaml b/charts/karpenter-gcp/crds/karpenter.sh_nodepools.yaml index f5a9780e..c1fc56bb 100644 --- a/charts/karpenter-gcp/crds/karpenter.sh_nodepools.yaml +++ b/charts/karpenter-gcp/crds/karpenter.sh_nodepools.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.4 + controller-gen.kubebuilder.io/version: v0.20.1 name: nodepools.karpenter.sh spec: group: karpenter.sh @@ -20,7 +20,7 @@ spec: - jsonPath: .spec.template.spec.nodeClassRef.name name: NodeClass type: string - - jsonPath: .status.resources.nodes + - jsonPath: .status.nodes name: Nodes type: string - jsonPath: .status.conditions[?(@.type=="Ready")].status @@ -73,8 +73,7 @@ spec: disruption: default: consolidateAfter: 0s - description: Disruption contains the parameters that relate to Karpenter's - disruption logic + description: Disruption contains the parameters that relate to Karpenter's disruption logic properties: budgets: default: @@ -113,18 +112,19 @@ spec: type: string reasons: description: |- - Reasons is a list of disruption methods that this budget applies to. If Reasons is not set, this budget applies to all methods. + reasons is a list of disruption methods that this budget applies to. If Reasons is not set, this budget applies to all methods. Otherwise, this will apply to each reason defined. allowed reasons are Underutilized, Empty, and Drifted. items: - description: DisruptionReason defines valid reasons for - disruption budgets. + description: DisruptionReason defines valid reasons for disruption budgets. enum: - Underutilized - Empty - Drifted type: string + maxItems: 50 type: array + x-kubernetes-list-type: set schedule: description: |- Schedule specifies when a budget begins being active, following @@ -138,6 +138,7 @@ spec: type: object maxItems: 50 type: array + x-kubernetes-list-type: atomic x-kubernetes-validations: - message: '''schedule'' must be set with ''duration''' rule: self.all(x, has(x.schedule) == has(x.duration)) @@ -146,16 +147,20 @@ spec: ConsolidateAfter is the duration the controller will wait before attempting to terminate nodes that are underutilized. Refer to ConsolidationPolicy for how underutilization is considered. + When replicas is set, ConsolidateAfter is simply ignored pattern: ^(([0-9]+(s|m|h))+|Never)$ type: string consolidationPolicy: default: WhenEmptyOrUnderutilized description: |- ConsolidationPolicy describes which nodes Karpenter can disrupt through its consolidation - algorithm. This policy defaults to "WhenEmptyOrUnderutilized" if not specified + algorithm. This policy defaults to "WhenEmptyOrUnderutilized" if not specified. + Valid values: "WhenEmpty", "WhenEmptyOrUnderutilized", "Balanced". + When replicas is set, ConsolidationPolicy is simply ignored. enum: - WhenEmpty - WhenEmptyOrUnderutilized + - Balanced type: string required: - consolidateAfter @@ -167,8 +172,24 @@ spec: - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true - description: Limits define a set of bounds for provisioning capacity. + description: |- + Limits define a set of bounds for provisioning capacity. + Limits other than limits.nodes is not supported when replicas is set. type: object + replicas: + description: |- + Replicas is the desired number of nodes for the NodePool. When specified, the NodePool will + maintain this fixed number of replicas rather than scaling based on pod demand. + When replicas is set: + - The following fields are ignored: + * disruption.consolidationPolicy + * disruption.consolidateAfter + - Only limits.nodes is supported; other resource limits (e.g., CPU, memory) must not be specified. + - Weight is not supported. + Note: This field is alpha. + format: int64 + minimum: 0 + type: integer template: description: |- Template contains the template of possibilities for the provisioning logic to launch a NodeClaim with. @@ -180,20 +201,32 @@ spec: additionalProperties: type: string description: |- - Annotations is an unstructured key value map stored with a resource that may be + annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations type: object + x-kubernetes-map-type: granular labels: additionalProperties: type: string + maxLength: 63 + pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ description: |- - Map of string keys and values that can be used to organize and categorize + labels is a map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels type: object + x-kubernetes-map-type: atomic + maxProperties: 100 + x-kubernetes-validations: + - message: label domain "karpenter.sh" is restricted + rule: self.all(x, x in ["karpenter.sh/capacity-type", "karpenter.sh/nodepool"] || !x.find("^([^/]+)").endsWith("karpenter.sh")) + - message: label "karpenter.sh/nodepool" is restricted + rule: self.all(x, x != "karpenter.sh/nodepool") + - message: label "kubernetes.io/hostname" is restricted + rule: self.all(x, x != "kubernetes.io/hostname") type: object spec: description: |- @@ -211,8 +244,7 @@ spec: pattern: ^(([0-9]+(s|m|h))+|Never)$ type: string nodeClassRef: - description: NodeClassRef is a reference to an object that - defines provider specific configuration + description: NodeClassRef is a reference to an object that defines provider specific configuration properties: group: description: API version of the referent @@ -244,17 +276,24 @@ spec: - message: nodeClassRef.kind is immutable rule: self.kind == oldSelf.kind requirements: - description: Requirements are layered with GetLabels and applied - to every node. + description: Requirements are layered with GetLabels and applied to every node. items: description: |- - A node selector requirement with min values is a selector that contains values, a key, an operator that relates the key and values + A node selector requirement is a selector that contains values, a key, an operator that relates the key and values and minValues that represent the requirement to have at least that many values. properties: key: - description: The label key that the selector applies - to. + description: The label key that the selector applies to. type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ + x-kubernetes-validations: + - message: label domain "karpenter.sh" is restricted + rule: self in ["karpenter.sh/capacity-type", "karpenter.sh/nodepool"] || !self.find("^([^/]+)").endsWith("karpenter.sh") + - message: label "karpenter.sh/nodepool" is restricted + rule: self != "karpenter.sh/nodepool" + - message: label "kubernetes.io/hostname" is restricted + rule: self != "kubernetes.io/hostname" minValues: description: |- This field is ALPHA and can be dropped or replaced at any time @@ -265,42 +304,47 @@ spec: operator: description: |- Represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte. + enum: + - Gte + - Lte + - In + - NotIn + - Exists + - DoesNotExist + - Gt + - Lt type: string values: description: |- 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. If the operator is Gt or Lt, the values + the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. items: type: string type: array x-kubernetes-list-type: atomic + maxLength: 63 + pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ required: - key - operator type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic x-kubernetes-validations: - - message: requirements with operator 'In' must have a value - defined - rule: 'self.all(x, x.operator == ''In'' ? x.values.size() - != 0 : true)' - - message: requirements operator 'Gt' or 'Lt' must have a - single positive integer value - rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == - ''Lt'') ? (x.values.size() == 1 && int(x.values[0]) >= - 0) : true)' - - message: requirements with 'minValues' must have at least - that many values specified in the 'values' field - rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) - ? x.values.size() >= x.minValues : true)' + - message: requirements with operator 'In' must have a value defined + rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)' + - message: requirements operator 'Gt', 'Lt', 'Gte', or 'Lte' must have a single positive integer value + rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)' + - message: requirements with 'minValues' must have at least that many values specified in the 'values' field + rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) ? x.values.size() >= x.minValues : true)' startupTaints: description: |- - StartupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically + startupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically within a short period of time, typically by a DaemonSet that tolerates the taint. These are commonly used by daemonsets to allow initialization and enforce startup ordering. StartupTaints are ignored for provisioning purposes in that pods are not required to tolerate a StartupTaint in order to have nodes provisioned for them. @@ -315,27 +359,31 @@ spec: that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute. type: string + enum: + - NoSchedule + - PreferNoSchedule + - NoExecute key: - description: Required. The taint key to be applied to - a node. + description: Required. The taint key to be applied to a node. type: string + minLength: 1 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ timeAdded: - description: |- - TimeAdded represents the time at which the taint was added. - It is only written for NoExecute taints. + description: TimeAdded represents the time at which the taint was added. format: date-time type: string value: - description: The taint value corresponding to the taint - key. + description: The taint value corresponding to the taint key. type: string + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ required: - effect - key type: object type: array + x-kubernetes-list-type: atomic taints: - description: Taints will be applied to the NodeClaim's node. + description: taints will be applied to the NodeClaim's node. items: description: |- The node this Taint is attached to has the "effect" on @@ -347,38 +395,42 @@ spec: that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute. type: string + enum: + - NoSchedule + - PreferNoSchedule + - NoExecute key: - description: Required. The taint key to be applied to - a node. + description: Required. The taint key to be applied to a node. type: string + minLength: 1 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ timeAdded: - description: |- - TimeAdded represents the time at which the taint was added. - It is only written for NoExecute taints. + description: TimeAdded represents the time at which the taint was added. format: date-time type: string value: - description: The taint value corresponding to the taint - key. + description: The taint value corresponding to the taint key. type: string + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ required: - effect - key type: object type: array + x-kubernetes-list-type: atomic terminationGracePeriod: description: |- TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated. - + Warning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation. - + This field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period. When set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached. - + Karpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod. If a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout, that pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds. - + The feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks. If left undefined, the controller will wait indefinitely for pods to be drained. pattern: ^([0-9]+(s|m|h))+$ @@ -396,6 +448,7 @@ spec: numerical weight indicates that this nodepool will be ordered ahead of other nodepools with lower weights. A nodepool with no weight will be treated as if it is a nodepool with a weight of 0. + Weight is not supported when replicas is set. format: int32 maximum: 100 minimum: 1 @@ -403,14 +456,20 @@ spec: required: - template type: object + x-kubernetes-validations: + - message: Cannot transition NodePool between static (replicas set) and dynamic (replicas unset) provisioning modes + rule: has(self.replicas) == has(oldSelf.replicas) + - message: only 'limits.nodes' is supported on static NodePools + rule: '!has(self.replicas) || (!has(self.limits) || size(self.limits) == 0 || (size(self.limits) == 1 && ''nodes'' in self.limits))' + - message: '''weight'' is not supported on static NodePools' + rule: '!has(self.replicas) || !has(self.weight)' status: description: NodePoolStatus defines the observed state of NodePool properties: conditions: description: Conditions contains signals for health and readiness items: - description: Condition aliases the upstream type and adds additional - helper methods + description: Condition aliases the upstream type and adds additional helper methods properties: lastTransitionTime: description: |- @@ -463,12 +522,20 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map nodeClassObservedGeneration: description: |- NodeClassObservedGeneration represents the observed nodeClass generation for referenced nodeClass. If this does not match the actual NodeClass Generation, NodeRegistrationHealthy status condition on the NodePool will be reset format: int64 type: integer + nodes: + default: 0 + description: Nodes is the count of nodes associated with this NodePool + format: int64 + type: integer resources: additionalProperties: anyOf: @@ -485,4 +552,7 @@ spec: served: true storage: true subresources: - status: {} \ No newline at end of file + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.nodes + status: {} diff --git a/charts/karpenter-gcp/templates/clusterrole.yaml b/charts/karpenter-gcp/templates/clusterrole.yaml index fcdd0a35..2af43519 100644 --- a/charts/karpenter-gcp/templates/clusterrole.yaml +++ b/charts/karpenter-gcp/templates/clusterrole.yaml @@ -33,7 +33,7 @@ rules: resources: ["gcenodeclasses"] verbs: ["get", "list", "watch"] - apiGroups: [ "karpenter.sh" ] - resources: [ "nodepools", "nodepools/status", "nodeclaims", "nodeclaims/status" ] + resources: [ "nodepools", "nodepools/status", "nodeclaims", "nodeclaims/status", "nodeoverlays", "nodeoverlays/status" ] verbs: [ "get", "list", "watch" ] # Write - apiGroups: ["karpenter.k8s.gcp"] @@ -44,4 +44,7 @@ rules: verbs: [ "create", "delete", "update", "patch" ] - apiGroups: [ "karpenter.sh" ] resources: [ "nodepools", "nodepools/status" ] + verbs: [ "update", "patch" ] + - apiGroups: [ "karpenter.sh" ] + resources: [ "nodeoverlays", "nodeoverlays/status" ] verbs: [ "update", "patch" ] \ No newline at end of file diff --git a/charts/karpenter-gcp/templates/deployment.yaml b/charts/karpenter-gcp/templates/deployment.yaml index b71badc6..4f65f7e3 100644 --- a/charts/karpenter-gcp/templates/deployment.yaml +++ b/charts/karpenter-gcp/templates/deployment.yaml @@ -1,7 +1,11 @@ +{{- if and .Values.controller.featureGates.capacityBuffer (not (.Capabilities.APIVersions.Has "autoscaling.x-k8s.io/v1beta1/CapacityBuffer")) }} +{{- fail "controller.featureGates.capacityBuffer is enabled but the CapacityBuffer CRD (autoscaling.x-k8s.io/v1beta1) is not installed on this cluster. This chart does not install it." }} +{{- end }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "karpenter.fullname" . }} + namespace: {{ .Release.Namespace }} labels: {{- include "karpenter.labels" . | nindent 4 }} {{- with .Values.additionalAnnotations }} @@ -11,9 +15,10 @@ metadata: spec: replicas: {{ .Values.controller.replicaCount }} revisionHistoryLimit: {{ .Values.controller.revisionHistoryLimit }} + {{- with .Values.controller.strategy }} strategy: - rollingUpdate: - maxUnavailable: 1 + {{- toYaml . | nindent 4 }} + {{- end }} selector: matchLabels: {{- include "karpenter.selectorLabels" . | nindent 6 }} @@ -30,19 +35,39 @@ spec: {{- end }} spec: serviceAccountName: {{ include "karpenter.serviceAccountName" . }} - priorityClassName: gmp-critical - terminationGracePeriodSeconds: 30 + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.controller.priorityClassName }} + priorityClassName: {{ . | quote }} + {{- end }} + {{- with .Values.controller.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ . }} + {{- end }} + {{- with .Values.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} containers: - name: karpenter - image: "public.ecr.aws/cloudpilotai/gcp/karpenter:{{ .Values.controller.image.tag }}" - imagePullPolicy: IfNotPresent + image: "{{ .Values.controller.image.repository }}:{{ default .Chart.AppVersion .Values.controller.image.tag }}" + imagePullPolicy: {{ .Values.controller.image.pullPolicy }} + {{- with .Values.securityContext }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} env: - name: HEALTH_PROBE_PORT - value: "8001" + value: "{{ .Values.controller.healthProbe.port }}" - name: PROJECT_ID value: {{ .Values.controller.settings.projectID }} - - name: LOCATION - value: {{ .Values.controller.settings.location }} + - name: CLUSTER_LOCATION + value: {{ .Values.controller.settings.clusterLocation }} + {{- if .Values.controller.settings.nodeLocation }} + - name: NODE_LOCATION + value: {{ .Values.controller.settings.nodeLocation }} + {{- end }} - name: CLUSTER_NAME value: {{ .Values.controller.settings.clusterName }} {{- if .Values.credentials.enabled }} @@ -78,7 +103,9 @@ spec: divisor: "0" resource: limits.memory - name: FEATURE_GATES - value: "SpotToSpotConsolidation=true" + value: "NodeRepair={{ .Values.controller.featureGates.nodeRepair }},ReservedCapacity={{ .Values.controller.featureGates.reservedCapacity }},SpotToSpotConsolidation={{ .Values.controller.featureGates.spotToSpotConsolidation }},NodeOverlay={{ .Values.controller.featureGates.nodeOverlay }},StaticCapacity={{ .Values.controller.featureGates.staticCapacity }},CapacityBuffer={{ .Values.controller.featureGates.capacityBuffer }}" + - name: DISABLE_CONTROLLER_WARMUP + value: "{{ .Values.controller.disableControllerWarmup }}" {{- with .Values.controller.settings.batchMaxDuration }} - name: BATCH_MAX_DURATION value: "{{ . }}" @@ -87,10 +114,20 @@ spec: - name: BATCH_IDLE_DURATION value: "{{ . }}" {{- end }} + - name: IGNORE_DRA_REQUESTS + value: "{{ .Values.controller.settings.ignoreDRARequests }}" {{- with .Values.controller.settings.vmMemoryOverheadPercent }} - name: VM_MEMORY_OVERHEAD_PERCENT value: "{{ . }}" {{- end }} + {{- with .Values.controller.settings.defaultNodePoolTemplateName }} + - name: DEFAULT_NODEPOOL_TEMPLATE_NAME + value: "{{ . }}" + {{- end }} + {{- with .Values.controller.settings.defaultNodepoolServiceAccount }} + - name: DEFAULT_NODEPOOL_SERVICE_ACCOUNT + value: "{{ . }}" + {{- end }} - name: METRICS_PORT value: "{{ .Values.controller.metrics.port }}" - name: KARPENTER_SERVICE @@ -100,7 +137,7 @@ spec: {{- end }} ports: - name: http - containerPort: 8001 + containerPort: {{ .Values.controller.healthProbe.port }} protocol: TCP - name: http-metrics containerPort: {{ .Values.controller.metrics.port }} @@ -125,14 +162,22 @@ spec: readOnly: true name: gcp-secret {{- end }} + {{- with .Values.controller.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- else }} affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: - app.kubernetes.io/name: karpenter + {{- include "karpenter.selectorLabels" . | nindent 18 }} topologyKey: kubernetes.io/hostname - tolerations: [] + {{- end }} + {{- with .Values.controller.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} {{- if .Values.credentials.enabled }} volumes: - name: gcp-secret diff --git a/charts/karpenter-gcp/templates/poddisruptionbudget.yaml b/charts/karpenter-gcp/templates/poddisruptionbudget.yaml index b427f5af..29654317 100644 --- a/charts/karpenter-gcp/templates/poddisruptionbudget.yaml +++ b/charts/karpenter-gcp/templates/poddisruptionbudget.yaml @@ -10,7 +10,11 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} spec: + {{- if ne .Values.podDisruptionBudget.maxUnavailable nil }} + maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }} + {{- else }} minAvailable: {{ .Values.podDisruptionBudget.minAvailable }} + {{- end }} selector: matchLabels: {{- include "karpenter.selectorLabels" . | nindent 6 }} diff --git a/charts/karpenter-gcp/templates/serviceaccount.yaml b/charts/karpenter-gcp/templates/serviceaccount.yaml index e5634330..473fd93b 100644 --- a/charts/karpenter-gcp/templates/serviceaccount.yaml +++ b/charts/karpenter-gcp/templates/serviceaccount.yaml @@ -3,6 +3,7 @@ apiVersion: v1 kind: ServiceAccount metadata: name: {{ include "karpenter.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} labels: {{- include "karpenter.labels" . | nindent 4 }} {{- with .Values.serviceAccount.annotations }} diff --git a/charts/karpenter-gcp/templates/servicemonitor.yaml b/charts/karpenter-gcp/templates/servicemonitor.yaml new file mode 100644 index 00000000..f1a8e520 --- /dev/null +++ b/charts/karpenter-gcp/templates/servicemonitor.yaml @@ -0,0 +1,43 @@ +{{- if and .Values.serviceMonitor.enabled (.Capabilities.APIVersions.Has "monitoring.coreos.com/v1") -}} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "karpenter.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "karpenter.labels" . | nindent 4 }} + {{- with .Values.serviceMonitor.additionalLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.additionalAnnotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} + selector: + matchLabels: + {{- include "karpenter.selectorLabels" . | nindent 6 }} + {{- if not (eq .Values.serviceMonitor.sampleLimit nil) }} + sampleLimit: {{ .Values.serviceMonitor.sampleLimit }} + {{- end }} + endpoints: + - port: http-metrics + path: /metrics + {{- with .Values.serviceMonitor.interval }} + interval: {{ . }} + {{- end }} + {{- with .Values.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ . }} + {{- end }} + {{- with .Values.serviceMonitor.relabelings }} + relabelings: + {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.serviceMonitor.metricRelabelings }} + metricRelabelings: + {{- toYaml . | nindent 6 }} + {{- end }} +{{- end -}} diff --git a/charts/karpenter-gcp/values.yaml b/charts/karpenter-gcp/values.yaml index ff044714..9536779b 100644 --- a/charts/karpenter-gcp/values.yaml +++ b/charts/karpenter-gcp/values.yaml @@ -15,14 +15,62 @@ serviceAccount: podAnnotations: {} podLabels: {} +# Names of existing image pull secrets, for a private registry mirror. +imagePullSecrets: [] + +# Security context applied at the pod level. +podSecurityContext: + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + +# Security context applied to the karpenter container. +securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + podDisruptionBudget: + # Minimum number of available pods. Used only when maxUnavailable is null. minAvailable: 1 + # Maximum number of unavailable pods. When set, takes precedence over minAvailable. + maxUnavailable: null + +# ServiceMonitor for the Prometheus Operator. Rendered only when the +# monitoring.coreos.com/v1 API is present on the cluster. +serviceMonitor: + enabled: false + additionalLabels: {} + # Empty string uses the Prometheus operator defaults (30s / 10s). + interval: "" + scrapeTimeout: "" + relabelings: [] + metricRelabelings: [] + # Per-scrape cap on accepted samples. null means no limit. + sampleLimit: null controller: replicaCount: 2 revisionHistoryLimit: 10 + strategy: + rollingUpdate: + maxUnavailable: 1 + terminationGracePeriodSeconds: 30 image: - tag: "v0.0.1" + repository: "public.ecr.aws/cloudpilotai/gcp/karpenter" + # Empty falls back to the chart's appVersion. + tag: "v0.6.0" + pullPolicy: IfNotPresent + + # gmp-critical is created by Google Managed Prometheus, so it exists on most + # GKE clusters. Set to "" on any cluster without it -- a priorityClassName + # naming a class that does not exist blocks pod creation entirely. + priorityClassName: gmp-critical env: [] @@ -34,15 +82,66 @@ controller: metrics: port: 8080 + healthProbe: + # Upstream defaults this to 8081; this chart has always used 8001 and keeps + # it so the port does not move under existing installs on upgrade. + port: 8001 + + # Overrides the default pod anti-affinity, which spreads replicas one per node + # using the chart's own selector labels. Leave empty to keep that default -- + # writing the selector out by hand risks it drifting from the chart name. + affinity: {} + tolerations: [] + + # Everything except spotToSpotConsolidation is ALPHA upstream and off by default. + featureGates: + # Spot replacement consolidation, for both single and multi-node consolidation. + spotToSpotConsolidation: true + # Lets NodeOverlay resources influence scheduling decisions. + nodeOverlay: false + # A NodePool with spec.replicas holds a fixed node count regardless of pod + # demand. consolidationPolicy and consolidateAfter are ignored on such pools. + staticCapacity: false + # Karpenter replaces nodes failing GKE Node Problem Detector health conditions. + nodeRepair: false + # Scheduling onto reserved/committed GCP capacity. The GCP provider does not + # implement GCE reservations yet, so this stays off. + reservedCapacity: false + # CapacityBuffer pre-provisioning. This chart does not install the + # CapacityBuffer CRD -- GKE ships it natively from 1.35.2-gke.1842000. + # Enabling it without that CRD fails at render time. + capacityBuffer: false + + # Whether controller watches/informers start before leader election is won. + # false pre-populates caches and speeds up leader failover. true matches the + # karpenter-core default. + disableControllerWarmup: true + settings: projectID: "" - location: "" + # Region or zone used for instance type discovery, e.g. us-central1. + clusterLocation: "" + # Exact cluster location for GKE API calls: us-central1-a for a zonal + # cluster, us-central1 for a regional one. Defaults to clusterLocation. + nodeLocation: "" clusterName: "" vmMemoryOverheadPercent: 0.065 batchMaxDuration: 10s batchIdleDuration: 1s + # Ignore pods' Dynamic Resource Allocation requests while simulating + # scheduling. Set false only if the cluster has DRA drivers and resource + # claims Karpenter should account for. + ignoreDRARequests: true + # Pin the GKE node pool used as the bootstrap metadata source. When set, + # Karpenter uses only this pool and errors if it is not RUNNING. Empty means + # automatic discovery. + defaultNodePoolTemplateName: "" + # GCP service account email attached to provisioned nodes, overriding the + # Compute Engine default. Give it roles/container.nodeServiceAccount. Can be + # overridden per node class via GCENodeClass.spec.serviceAccount. + defaultNodepoolServiceAccount: "" credentials: enabled: true secretName: "karpenter-gcp-credentials" - secretKey: "key.json" \ No newline at end of file + secretKey: "key.json" diff --git a/docs/index.yaml b/docs/index.yaml index 0f9c0652..3cc975a1 100644 --- a/docs/index.yaml +++ b/docs/index.yaml @@ -5,7 +5,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.88016+05:30" + created: "2026-08-19T11:54:29.213283+05:30" description: Helm chart for deploying cassandra digest: 0b1d9c5e9e7e621bb4f42722301f64d55517e641b8bf4c12864ec46bbba9c983 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -20,7 +20,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.879954+05:30" + created: "2026-08-19T11:54:29.212874+05:30" description: Helm chart for deploying cassandra digest: 5ad8c3dd137ecef4ee348b7f855f0b6e2f0860040a5faea921bac812ebe0344e icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -35,7 +35,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.879829+05:30" + created: "2026-08-19T11:54:29.212624+05:30" description: Helm chart for deploying cassandra digest: 8204a7e66878a8c14cd517fb4db71afe9980a1f194f850aba1d0b972f708604a icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -50,7 +50,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.879151+05:30" + created: "2026-08-19T11:54:29.21232+05:30" description: Helm chart for deploying cassandra digest: d8c73f81cbbf8d9c32118c2939ff855a36a1b6c8c593baf77bfb6b99f161c8a3 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -63,7 +63,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.878948+05:30" + created: "2026-08-19T11:54:29.21205+05:30" description: Helm chart for deploying cassandra digest: f45dea69d490bc1e07764fc2e632cabda6465b4a99d12ed6c78eb4646b742e11 icon: https://zop.dev/logo.png @@ -76,7 +76,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.878765+05:30" + created: "2026-08-19T11:54:29.211829+05:30" description: Helm chart for deploying cassandra digest: 87dcf6e85af6afe5ff9c90bb29272edbc9cb21ce8019361015b1733442644ca9 icon: https://zop.dev/logo.png @@ -92,7 +92,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.880519+05:30" + created: "2026-08-19T11:54:29.213704+05:30" description: Helm chart for deploying chromadb datastore digest: 94ca640fc537837c955a55a41e53da01b38203fe28e9e5df92f7f121ac51f68e icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241205/f21ef909-e0ea-4969-8963-0848602a5e4b-ImageEditor.jpg @@ -107,7 +107,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.880403+05:30" + created: "2026-08-19T11:54:29.213574+05:30" description: Helm chart for deploying chromadb datastore digest: ba37d2c0312b72096223fae3329696dd8b5c0f050712369a7d17d61136c7a91b icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241205/f21ef909-e0ea-4969-8963-0848602a5e4b-ImageEditor.jpg @@ -122,7 +122,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.88028+05:30" + created: "2026-08-19T11:54:29.213433+05:30" description: Helm chart for deploying chromadb datastore digest: 4b595dd52a315a9c5731a2407c33840e5f9d838c0faa534a65348a927e63ea7d icon: https://zop.dev/logo.png @@ -135,7 +135,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.878323+05:30" + created: "2026-08-19T11:54:29.211562+05:30" description: Helm chart for deploying chromadb datastore digest: e80e4a44755d08f58044aaffc16074668015f121b5a7359cd20b75526a46ee3a icon: https://zop.dev/logo.png @@ -151,7 +151,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.881945+05:30" + created: "2026-08-19T11:54:29.215404+05:30" description: Helm chart for deploying clickhouse datastore digest: a06c43648285f68a7deece96385dd133c32593bcee6026aba40323889fc954ff icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -166,7 +166,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.881738+05:30" + created: "2026-08-19T11:54:29.214923+05:30" description: Helm chart for deploying clickhouse datastore digest: e5f9f77310ec4711db0707ce0ba8f5ac73607ae41ce46e71463cca580fc50b77 icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -181,7 +181,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.881251+05:30" + created: "2026-08-19T11:54:29.214732+05:30" description: Helm chart for deploying clickhouse datastore digest: 2681560fcf0c2d1a8efb989cf609b29308336c2991992a8d0a852c84b1de66c2 icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -196,7 +196,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.880836+05:30" + created: "2026-08-19T11:54:29.214109+05:30" description: Helm chart for deploying clickhouse datastore digest: cff6f6d0fc4bf6ce09c435816f071c0057df9e8fe475f2d3ee7cbef41ccea2e6 icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -212,7 +212,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.882929+05:30" + created: "2026-08-19T11:54:29.216397+05:30" description: Helm chart for deploying cockroachdb datastore digest: 063c06a5758ec40aabaf8390a5004964f039dc2bf699999054d4f5adef76fd27 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -227,7 +227,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.882763+05:30" + created: "2026-08-19T11:54:29.21613+05:30" description: Helm chart for deploying cockroachdb datastore digest: aafca1db83b781cfc87de37fae49dc57122fb7c0b57dacee765a7fb8de72cfc1 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -242,7 +242,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.88262+05:30" + created: "2026-08-19T11:54:29.216001+05:30" description: Helm chart for deploying cockroachdb datastore digest: 2bea5770d823248ddf13b2930796e7c58ee72323683f7e5d39851d500d680b29 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -257,7 +257,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.882468+05:30" + created: "2026-08-19T11:54:29.215869+05:30" description: Helm chart for deploying cockroachdb datastore digest: 413d30a76f216aaba3e6e8768d3195006d5248e15f26884291031ad311c111d2 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -270,7 +270,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.882322+05:30" + created: "2026-08-19T11:54:29.215726+05:30" description: Helm chart for deploying cockroachdb datastore digest: 34f77cf414230048d6da77866c1ac39093625e761b5c68c71b7e214a4191da09 icon: https://zop.dev/logo.png @@ -284,7 +284,7 @@ entries: cron-job: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.885181+05:30" + created: "2026-08-19T11:54:29.218297+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 66c0ffbdb63c5bc7b3e67c06ffac12001d6bc836bfee45502830dbefd288ecd2 @@ -298,7 +298,7 @@ entries: version: v0.0.18 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.885007+05:30" + created: "2026-08-19T11:54:29.218139+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: df89a1f9b87ee180ff45fed5106197ebc98dde611fe12fc26665096d8ad22071 @@ -312,7 +312,7 @@ entries: version: v0.0.17 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.88483+05:30" + created: "2026-08-19T11:54:29.217978+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: b09b48b17c5518b18ff360770bcdb54f1babd195d1f9eabaccbc2dd0041a0ab3 @@ -326,7 +326,7 @@ entries: version: v0.0.16 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.884636+05:30" + created: "2026-08-19T11:54:29.217816+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 56cb5aa749ecb2d7b6a44b1cc7598bdab04319be280731233e7f1c3edaf0c81a @@ -340,7 +340,7 @@ entries: version: v0.0.15 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.884426+05:30" + created: "2026-08-19T11:54:29.217657+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 9fe2649ba7a57a70efbadd6fc7f630f689a285411b6a9a82fa71797f3729d7d1 @@ -354,7 +354,7 @@ entries: version: v0.0.14 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.884234+05:30" + created: "2026-08-19T11:54:29.217423+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: cea536911b8a40c81d0dea88039b651e822f7f520cac1bc7984f1436f6d2db1e @@ -368,7 +368,7 @@ entries: version: v0.0.13 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.884026+05:30" + created: "2026-08-19T11:54:29.217281+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 462e6ec152db5248ef7f16884414dc5230e07800b7b068f3f57cb759439f2051 @@ -382,7 +382,7 @@ entries: version: v0.0.12 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.883701+05:30" + created: "2026-08-19T11:54:29.217125+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 5ec17930747dbefa44d30240d1ecc94f649084f8a252ad3351b5a5f7463bb592 @@ -396,7 +396,7 @@ entries: version: v0.0.11 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.883249+05:30" + created: "2026-08-19T11:54:29.216955+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: ebc0c13fa2b4c085475168759a66c464801a099c00e60790ee3c141a619208e6 @@ -410,7 +410,7 @@ entries: version: v0.0.10 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.887161+05:30" + created: "2026-08-19T11:54:29.219541+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: c59e1c2ca03efcd354674efd6c6142bb897a522511b21ab2204d758c0ad7838d @@ -424,7 +424,7 @@ entries: version: v0.0.9 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.887005+05:30" + created: "2026-08-19T11:54:29.219253+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: b0b0f1b080fb355d0c0a4c9a793aa08c42ae3d346d3d35924b160402146f3ba4 @@ -438,7 +438,7 @@ entries: version: v0.0.8 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.886837+05:30" + created: "2026-08-19T11:54:29.219105+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 68deab7c093b6399751337046e2e3d44b2f92583ff5897268b2e7096c3ecc7d4 @@ -452,7 +452,7 @@ entries: version: v0.0.7 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.886687+05:30" + created: "2026-08-19T11:54:29.218955+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 12ef691b470c85021dea5a2abb22ed85a1eeb0eebb639b4e961ebc9e48b77379 @@ -466,7 +466,7 @@ entries: version: v0.0.6 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.886529+05:30" + created: "2026-08-19T11:54:29.218823+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: feacad697b021e3101356c723937a67384ce40b20d8262f8cb0dccb778ce3409 @@ -480,7 +480,7 @@ entries: version: v0.0.5 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.88637+05:30" + created: "2026-08-19T11:54:29.218694+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: a0b223548907a6e97153e62a80c71fa20a2d1b44d6ddd6f86c99ee1d0bded277 @@ -494,7 +494,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.885644+05:30" + created: "2026-08-19T11:54:29.218565+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 915559e842b254eb709dae62904e6021123d76fba00367c0f676ea471fd9bb34 @@ -508,7 +508,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.885434+05:30" + created: "2026-08-19T11:54:29.218435+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 8647eaeb33477970ec574dfea3549f71d480bb89cac42b99fba36a4f56d2c64f @@ -522,7 +522,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.883087+05:30" + created: "2026-08-19T11:54:29.216718+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: d8ab447cd5bff82957fc1bafdd4a1bdab91cea3b9eba179f17359d4b6265718b @@ -539,7 +539,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.888515+05:30" + created: "2026-08-19T11:54:29.220914+05:30" description: Helm chart for deploying dgraph datastore digest: 39df09aa5c2fd7d4ff91f023a4257a3fc5690538b99a5a666f9a22d99d3f3c9c icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/b62a941f-db26-4b89-a1c0-6758a616c028-dgraph.png @@ -554,7 +554,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.88794+05:30" + created: "2026-08-19T11:54:29.220535+05:30" description: Helm chart for deploying dgraph datastore digest: da8b3703d231048d9831066e82fd1a6c6dff59da7a786e8396137b2c22d6ef62 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/b62a941f-db26-4b89-a1c0-6758a616c028-dgraph.png @@ -567,7 +567,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.887739+05:30" + created: "2026-08-19T11:54:29.220208+05:30" description: Helm chart for deploying dgraph datastore digest: 81cd012d3d9b7a4b5275d4e0bc16f15cf4c4636eee17d7177c124c37c3f70a34 icon: https://zop.dev/logo.png @@ -583,7 +583,7 @@ entries: type: application apiVersion: v2 appVersion: 0.39.0 - created: "2026-08-17T11:46:25.889184+05:30" + created: "2026-08-19T11:54:29.221692+05:30" description: Helm chart for deploying HolmesGPT, an AI agent for investigating production incidents digest: 9fe40f4d3c872120784eb3ba92ef62c21a98958423b1c486b2a84bf28453e96b @@ -601,7 +601,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.892107+05:30" + created: "2026-08-19T11:54:29.225205+05:30" description: Helm chart for Deploying JupyterHub digest: 7ff775eacab9ff759dfffc80f435293e04946628eb8b60d291dcfa215d2eaa36 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -617,7 +617,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.891272+05:30" + created: "2026-08-19T11:54:29.22364+05:30" description: Helm chart for Deploying JupyterHub digest: f84e94e60206ce31fd483c8f95509e3a0633bd37ac69ead5260d25b49c7c2e3d icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -633,7 +633,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.890651+05:30" + created: "2026-08-19T11:54:29.223067+05:30" description: Helm chart for Deploying JupyterHub digest: 557ab4461adc4e40e2e1ddd0de44f12d06d76ff0b0a42f29feb39b63c7e49360 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -646,7 +646,7 @@ entries: version: v0.0.2 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.890048+05:30" + created: "2026-08-19T11:54:29.222518+05:30" description: Helm chart for Deploying JupyterHub digest: 93a2b8063b3bc5ec24e4b9e0978913fa0f79b951e73913f562746cbc9353b0bd icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -663,7 +663,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.894254+05:30" + created: "2026-08-19T11:54:29.22666+05:30" dependencies: - alias: zookeeper condition: zookeeper.enabled @@ -684,7 +684,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.893458+05:30" + created: "2026-08-19T11:54:29.226382+05:30" dependencies: - alias: zookeeper condition: zookeeper.enabled @@ -705,7 +705,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.893101+05:30" + created: "2026-08-19T11:54:29.225978+05:30" dependencies: - alias: zookeeper condition: zookeeper.enabled @@ -724,7 +724,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.892749+05:30" + created: "2026-08-19T11:54:29.225603+05:30" description: Helm chart deploys kafka digest: 1a6d2313a07f4a2786e0fb94acb3cdf30215cf652628f397a91bb68aaa1717e1 icon: https://zop.dev/logo.png @@ -736,9 +736,21 @@ entries: - https://helm.zop.dev/kafka-v0.0.1.tgz version: v0.0.1 karpenter-gcp: + - apiVersion: v2 + appVersion: v0.6.0 + created: "2026-08-19T11:54:29.228713+05:30" + description: A Helm chart for deploying Karpenter in gke cluster + digest: 363fb84b2a75e2291798108905c195950201e7b424a0f61a82f21bb4cba0b2a7 + maintainers: + - name: ZopDev + url: zop.dev + name: karpenter-gcp + urls: + - https://helm.zop.dev/karpenter-gcp-v0.0.4.tgz + version: v0.0.4 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.89576+05:30" + created: "2026-08-19T11:54:29.227965+05:30" description: A Helm chart for deploying Karpenter in gke cluster digest: d725414ec4face5ee25f9f6ffc1bea1e3aaccf934cb9bae4ec72f898cf846fa8 maintainers: @@ -750,7 +762,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.895424+05:30" + created: "2026-08-19T11:54:29.227582+05:30" description: A Helm chart for deploying Karpenter in gke cluster digest: 4d6c4098860bdaa0d6386e2f638be1ed735b41a2c5e17d31689a33b510b22a40 maintainers: @@ -762,7 +774,7 @@ entries: version: v0.0.2 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.894745+05:30" + created: "2026-08-19T11:54:29.22713+05:30" description: A Helm chart for deploying Karpenter in gke cluster digest: 15f592f10d3084e81219099025ebbe1cef95da8fa50c4874db5b00fe6c8042ad maintainers: @@ -777,7 +789,7 @@ entries: type: application apiVersion: v2 appVersion: 1.83.14 - created: "2026-08-17T11:46:25.89656+05:30" + created: "2026-08-19T11:54:29.230077+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -798,7 +810,7 @@ entries: type: application apiVersion: v2 appVersion: 1.83.14 - created: "2026-08-17T11:46:25.896145+05:30" + created: "2026-08-19T11:54:29.229315+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -820,7 +832,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.897971+05:30" + created: "2026-08-19T11:54:29.231764+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -847,7 +859,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.899499+05:30" + created: "2026-08-19T11:54:29.233408+05:30" description: Helm chart for deploying mariadb datastore digest: c8fbfa56d9332447a678de155e5b3b574edcc0e0c4cf215acb93130f27150e18 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -862,7 +874,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.899274+05:30" + created: "2026-08-19T11:54:29.232949+05:30" description: Helm chart for deploying mariadb datastore digest: 6b45a459eee41308010175d20ab5caf884bdef6bd9f75e9327c02e9703eace6f icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -877,7 +889,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.89903+05:30" + created: "2026-08-19T11:54:29.232607+05:30" description: Helm chart for deploying mariadb datastore digest: 301f9f4ce7bc4ed7c87078ba28ecbb9b41527eb244cce884c57b684bbcabc156 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -892,7 +904,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.898812+05:30" + created: "2026-08-19T11:54:29.232274+05:30" description: Helm chart for deploying mariadb datastore digest: 5f5b91c6e5b772c5b4b862b7dab3bb3c89b346c0af1c53414afcc5beae74f6a6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -905,7 +917,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.898566+05:30" + created: "2026-08-19T11:54:29.232084+05:30" description: Helm chart for deploying mariadb datastore digest: 27f9e8208c4c87915296c1e4a00c2bd0cb6ff48806b2f4e62a11cc85ec66567b icon: https://zop.dev/logo.png @@ -921,7 +933,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.900963+05:30" + created: "2026-08-19T11:54:29.234928+05:30" description: Helm chart for deploying mysql datastore digest: 8933b31aae8522b26b7b9e8dbce870674a3f75b9b071df5ae66d44f2d3cb8d90 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -936,7 +948,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.9008+05:30" + created: "2026-08-19T11:54:29.234767+05:30" description: Helm chart for deploying mysql datastore digest: f9a418fb02ae3cee19f627015c84eadf2d9d97dd53e0a2bf0ee8f0b416ebeacc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -951,7 +963,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.900633+05:30" + created: "2026-08-19T11:54:29.234603+05:30" description: Helm chart for deploying mysql datastore digest: 54bb226a20cf47b56ae0a07585b450f0c0b98e228a4c44567910c1eac18fb858 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -966,7 +978,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.900459+05:30" + created: "2026-08-19T11:54:29.234457+05:30" description: Helm chart for deploying mysql datastore digest: ba225be6ddab11b576bdbfa7ce977fd8b82e47d427f8fa022c122443c872b119 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -981,7 +993,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.9003+05:30" + created: "2026-08-19T11:54:29.234314+05:30" description: Helm chart for deploying mysql datastore digest: 47cd9bffa81e71ce96fdea4303d407d20ed17fc52eeaa29bca329553a5aca117 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -996,7 +1008,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.900149+05:30" + created: "2026-08-19T11:54:29.234172+05:30" description: Helm chart for deploying mysql datastore digest: 0a700f2d21091b08e4dffe41fcfe951a31bfcea320df10051e2d27175979a8d6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1011,7 +1023,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.900006+05:30" + created: "2026-08-19T11:54:29.23403+05:30" description: Helm chart for deploying mysql datastore digest: 61ec682378d67ee959c57acb2a6cb0f60d54bd5a1cf0cac4f8dc88f31b6771e6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1026,7 +1038,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.89986+05:30" + created: "2026-08-19T11:54:29.233888+05:30" description: Helm chart for deploying mysql datastore digest: 693f49466f3aa2741fef88115d1cd7c220c2580747cd58801244cdafceb54df1 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1041,7 +1053,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.90311+05:30" + created: "2026-08-19T11:54:29.23731+05:30" description: Helm chart for deploying mysql datastore digest: f6cea40dae37912aeb37318baeaf51dc048758031492a22ecd7d5d66c12b23bc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1056,7 +1068,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.902857+05:30" + created: "2026-08-19T11:54:29.237171+05:30" description: Helm chart for deploying mysql datastore digest: 72cfd04c203bb9e90d50aa06ad2bdd090b546e92c1132f51d485122c7f483105 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1071,7 +1083,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.902595+05:30" + created: "2026-08-19T11:54:29.237028+05:30" description: Helm chart for deploying mysql datastore digest: cd4a6304ec32384c5a278ba4cc356d5d36abecf639f5c1b49ce8fc0eff4016d6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1086,7 +1098,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.902423+05:30" + created: "2026-08-19T11:54:29.23688+05:30" description: Helm chart for deploying mysql datastore digest: 3eb4fdd1593a952a7ff7a10310b48484047eabeacadcf3f039e32d7f1a130c13 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1101,7 +1113,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.902237+05:30" + created: "2026-08-19T11:54:29.235825+05:30" description: Helm chart for deploying mysql datastore digest: d3635b40f2b416a5616ff1ba50d9572318e285ead03213ee7a5a45caaa8ab5e8 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1116,7 +1128,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.902059+05:30" + created: "2026-08-19T11:54:29.235633+05:30" description: Helm chart for deploying mysql datastore digest: 22a84b7172e1424845524d9c2a06a3ec7c29f445349ff4650531001bd50fb5a8 icon: https://zop.dev/logo.png @@ -1129,7 +1141,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.901896+05:30" + created: "2026-08-19T11:54:29.235314+05:30" description: Helm chart for deploying mysql datastore digest: cd72e08b2235de99a477dfad97c1d13fff7ae5e37397f0d6dbd682bf949b2046 icon: https://zop.dev/logo.png @@ -1142,7 +1154,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.90118+05:30" + created: "2026-08-19T11:54:29.235145+05:30" description: Helm chart for deploying mysql datastore digest: 7e4bf128d43f03e3930457b8eb731935c98c82b2528a5c28559a921850cb5922 icon: https://zop.dev/logo.png @@ -1155,7 +1167,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.899692+05:30" + created: "2026-08-19T11:54:29.233735+05:30" description: Helm chart for deploying mysql datastore digest: d1b0b8aff145de7076aa97054be6da52e769ac7be00d8453500a75ac82cc0d07 icon: https://zop.dev/logo.png @@ -1169,7 +1181,7 @@ entries: openobserve-standalone: - apiVersion: v2 appVersion: v1.0.0 - created: "2026-08-17T11:46:25.9046+05:30" + created: "2026-08-19T11:54:29.239022+05:30" dependencies: - condition: minio.enabled name: minio @@ -1190,7 +1202,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.905556+05:30" + created: "2026-08-19T11:54:29.240272+05:30" dependencies: - name: zookeeper repository: https://helm.zop.dev @@ -1209,7 +1221,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.905234+05:30" + created: "2026-08-19T11:54:29.239559+05:30" description: Helm chart for deploying opentsdb digest: ceb20fb363bef19fbc077ba7647b389a9741f0b748b555f23e2e6bd6b5f97020 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/42ea9c53-055c-4441-8438-95d639dfc2f4-2086220.png @@ -1224,7 +1236,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.905077+05:30" + created: "2026-08-19T11:54:29.239349+05:30" description: Helm chart for deploying opentsdb digest: e20e1734631e6079fe6e8e44b6c63d46c49c9888f99e0b9706d22bed09b4c8be icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/42ea9c53-055c-4441-8438-95d639dfc2f4-2086220.png @@ -1237,7 +1249,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.904865+05:30" + created: "2026-08-19T11:54:29.239137+05:30" description: Helm chart for deploying opentsdb digest: fd3473ad09c60da40c8ddbb319a4c015774d0ae35c0e7da5556949bcbde39f7e icon: https://zop.dev/logo.png @@ -1253,7 +1265,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.913265+05:30" + created: "2026-08-19T11:54:29.247096+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1279,7 +1291,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.911803+05:30" + created: "2026-08-19T11:54:29.245546+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1305,7 +1317,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.910966+05:30" + created: "2026-08-19T11:54:29.244823+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1331,7 +1343,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.910262+05:30" + created: "2026-08-19T11:54:29.244283+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1357,7 +1369,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.909707+05:30" + created: "2026-08-19T11:54:29.243568+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1383,7 +1395,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.909207+05:30" + created: "2026-08-19T11:54:29.242724+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1406,7 +1418,7 @@ entries: version: v0.0.4 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.907573+05:30" + created: "2026-08-19T11:54:29.242078+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1430,7 +1442,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.907032+05:30" + created: "2026-08-19T11:54:29.241474+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1454,7 +1466,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.90619+05:30" + created: "2026-08-19T11:54:29.240868+05:30" description: Helm chart for deploying outline app digest: 4a24106f04a0e89503000afc5a7fd2546eff2e092caf500b12a48bbd2d17e659 icon: https://zop.dev/logo.png @@ -1470,7 +1482,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.914485+05:30" + created: "2026-08-19T11:54:29.248797+05:30" description: Helm chart for deploying postgres datastore digest: 3d916bf50ee92014d900f4a23c2a47d8ffa017cf1eddd651490ce29e94fb3a1d icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1485,7 +1497,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.914197+05:30" + created: "2026-08-19T11:54:29.248435+05:30" description: Helm chart for deploying postgres datastore digest: 561e553524e45ab009d9003bc44282d50186faab995df321563406897d78d7bc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1500,7 +1512,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.913976+05:30" + created: "2026-08-19T11:54:29.248152+05:30" description: Helm chart for deploying postgres datastore digest: 7fb9fa1dc8d60d142b1033ce34e7c5e218719748fa9316308687d1fc1a881147 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1515,7 +1527,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.913775+05:30" + created: "2026-08-19T11:54:29.247841+05:30" description: Helm chart for deploying postgres datastore digest: d6cbd601071407c68195931900b60f04e4ef50a2f52413c60a3b24ed9d2581d6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1530,7 +1542,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.913603+05:30" + created: "2026-08-19T11:54:29.247616+05:30" description: Helm chart for deploying postgres datastore digest: c017d3ee10187abf8e55c01a6aa197a889e2108d4177fd27a852ea0066f2702f icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1545,7 +1557,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.915877+05:30" + created: "2026-08-19T11:54:29.250388+05:30" description: Helm chart for deploying postgres datastore digest: 623814cf583d824ed687749f0b089cd8a7e7a2b2163a26ae45cd34450323df27 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1560,7 +1572,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.915689+05:30" + created: "2026-08-19T11:54:29.250218+05:30" description: Helm chart for deploying postgres datastore digest: 760b6075b10c9044cade7a1692a1a2b22363335710ac50a60e90890864665e41 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1575,7 +1587,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.915503+05:30" + created: "2026-08-19T11:54:29.250045+05:30" description: Helm chart for deploying postgres datastore digest: d155a052c1ede6249edb2b0b30720ddaf0e7dda52bc352d4f231359e40456068 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1590,7 +1602,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.915334+05:30" + created: "2026-08-19T11:54:29.249878+05:30" description: Helm chart for deploying postgres datastore digest: c1767b70e53d69d8680170e759780cdc4492f483f5896307412355331c16c7ea icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1605,7 +1617,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.915146+05:30" + created: "2026-08-19T11:54:29.249709+05:30" description: Helm chart for deploying postgres datastore digest: 06347f98453069747de484984e4dafe36bbf79f386ef76f3de735d6ece206085 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1620,7 +1632,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.914992+05:30" + created: "2026-08-19T11:54:29.249554+05:30" description: Helm chart for deploying postgres datastore digest: 75b652602f68dc46effc64332320aa5383b89561db869db77396bd1ab0ff55b6 icon: https://zop.dev/logo.png @@ -1633,7 +1645,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.914819+05:30" + created: "2026-08-19T11:54:29.24941+05:30" description: Helm chart for deploying postgres datastore digest: 8d9d5a47255fc7d149c3975386c0adf8b3e9ad66ae9d6c1da0ca7ea7d9cf3f69 icon: https://zop.dev/logo.png @@ -1646,7 +1658,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.914649+05:30" + created: "2026-08-19T11:54:29.249193+05:30" description: Helm chart for deploying postgres datastore digest: ffc38c1a1dbc3f4e2db9ff742475e2380094c912d9f84a3a2e6511fac6f04133 icon: https://zop.dev/logo.png @@ -1659,7 +1671,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.913404+05:30" + created: "2026-08-19T11:54:29.247339+05:30" description: Helm chart for deploying postgres datastore digest: 6e8a630281561184374d252a30f3541faa49fed00d072d4e0b37b4363b1bdc7b icon: https://zop.dev/logo.png @@ -1675,7 +1687,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.917025+05:30" + created: "2026-08-19T11:54:29.251162+05:30" description: Helm chart deploys redis instance digest: 54cb3cd6a2fc657a8c9074177e0472a1363b190ec7fe359f8d537fbcc2ff33d0 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1690,7 +1702,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.916852+05:30" + created: "2026-08-19T11:54:29.250904+05:30" description: Helm chart deploys redis instance digest: 09e347bc7fb6663917771eb3c345f3d86ed552d3fdafab6a4db4cefddd3da40b icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1705,7 +1717,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.916342+05:30" + created: "2026-08-19T11:54:29.250756+05:30" description: Helm chart deploys redis instance digest: 29fea3bd4a21a6e3af62c433d46406361ec09348b65f7a761c55a8fe0f36d90c icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1720,7 +1732,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.916131+05:30" + created: "2026-08-19T11:54:29.250636+05:30" description: Helm chart deploys redis instance digest: a25641daa9934bd778b27d537c2c3f5ed8bbc80df243e615b5abd78af43f1920 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1733,7 +1745,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.915989+05:30" + created: "2026-08-19T11:54:29.250517+05:30" description: Helm chart deploys redis instance digest: a1181c8d8c0808bfcbcd59a7ba08d675f83285221fff6fa10bc3fbc6014305e2 icon: https://zop.dev/logo.png @@ -1749,7 +1761,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.917822+05:30" + created: "2026-08-19T11:54:29.251767+05:30" description: Helm chart deploys redis distributed instance digest: ef079609c1fcb4d3fff8c961050551aed044cee88161f808a044d3fc8a7d7567 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1764,7 +1776,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.917555+05:30" + created: "2026-08-19T11:54:29.251598+05:30" description: Helm chart deploys redis distributed instance digest: 8e331db39a745eec8d28e365d044b82717631ef1c74cd8d1ded504546e55e586 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1779,7 +1791,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.917403+05:30" + created: "2026-08-19T11:54:29.251454+05:30" description: Helm chart deploys redis distributed instance digest: 46722cb13848de0ecd10e75b1ae0c34ae14d9bd648c46175357c3e1a4973be9c icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1794,7 +1806,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.917238+05:30" + created: "2026-08-19T11:54:29.251308+05:30" description: Helm chart deploys redis distributed instance digest: dca0d7799dc7c6f51ba5d64cb9708bade16a19446a543fa98b43093576291108 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1808,7 +1820,7 @@ entries: scylladb: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.918185+05:30" + created: "2026-08-19T11:54:29.252069+05:30" description: Helm chart for deploying ScyllaDB digest: 88843927b917732223dd0f0a09e9570dd507b8a7d5af519ea555f258a8bc009f icon: https://zop.dev/logo.png @@ -1821,7 +1833,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.917954+05:30" + created: "2026-08-19T11:54:29.251924+05:30" description: Helm chart for deploying ScyllaDB digest: 715797a89c9a8d06bfd839f68a18b4a720db459539581043daf153d72994e420 icon: https://zop.dev/logo.png @@ -1835,7 +1847,7 @@ entries: service: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.928748+05:30" + created: "2026-08-19T11:54:29.263325+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 23b3e69dea6cb6f9af99f3d690aaa56802f9a8eec1bfeff46f48a5ef638b087e @@ -1849,7 +1861,7 @@ entries: version: v0.0.32 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.928167+05:30" + created: "2026-08-19T11:54:29.262583+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: e91c0e50880aac92d0e5db2fbc4b05372d382f37c7289cf93068a99da777f989 @@ -1863,7 +1875,7 @@ entries: version: v0.0.31 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.927689+05:30" + created: "2026-08-19T11:54:29.261979+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 260220b14ca4912bc17c3a6a6bde30b4f4e9f714701c48435a1bfc4ea1a4709d @@ -1877,7 +1889,7 @@ entries: version: v0.0.30 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.926777+05:30" + created: "2026-08-19T11:54:29.26104+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 696c79878cb5a290bf4433e01ff9525e219fd00134c4b9fdb7a1b9e8d81d590a @@ -1891,7 +1903,7 @@ entries: version: v0.0.29 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.926255+05:30" + created: "2026-08-19T11:54:29.260502+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0721018c635b98bc7d6d51c71a3770f075eed1e3c859f568179b79e7d48ed130 @@ -1905,7 +1917,7 @@ entries: version: v0.0.28 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.925756+05:30" + created: "2026-08-19T11:54:29.260125+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: c110801168b355cc2c6de64d0adad1dc8e7c08cbefacffc54f07cc8abb9eb9fd @@ -1919,7 +1931,7 @@ entries: version: v0.0.27 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.924681+05:30" + created: "2026-08-19T11:54:29.259128+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: abfe37cc7137ab2f6077b2dace85bb550dd60dcfbed009edcb804cf590143bef @@ -1933,7 +1945,7 @@ entries: version: v0.0.26 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.92417+05:30" + created: "2026-08-19T11:54:29.258735+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 3cabf00ba943c3e9d27a0b84df5175197b0f4105b732028eca650ad4ed402072 @@ -1947,7 +1959,7 @@ entries: version: v0.0.25 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.923811+05:30" + created: "2026-08-19T11:54:29.258355+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 666480b58aca6a312a915fc1e51ac0c717444f0d95345a4367c70d73b891f566 @@ -1961,7 +1973,7 @@ entries: version: v0.0.24 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.923495+05:30" + created: "2026-08-19T11:54:29.257944+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0b397d47f66b85d9e14cad455c1328397c70f0483f39428d83c56839c99f7c29 @@ -1975,7 +1987,7 @@ entries: version: v0.0.23 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.923203+05:30" + created: "2026-08-19T11:54:29.257539+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: c763047324f4bf10eb76fe0ff1fc5dcb5ab9c1c5b0ca67003e73f50822a507b7 @@ -1989,7 +2001,7 @@ entries: version: v0.0.22 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.922876+05:30" + created: "2026-08-19T11:54:29.256825+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: ba222bd78f7fcf4bb6ff0cb192e19b68d968c1d2573ef71d18adb57bf8774678 @@ -2003,7 +2015,7 @@ entries: version: v0.0.21 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.92258+05:30" + created: "2026-08-19T11:54:29.256436+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 2f64dfd5959cc287274fd582fc7308fb60971ac58881cb3458f79f7426c42c63 @@ -2017,7 +2029,7 @@ entries: version: v0.0.20 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.922053+05:30" + created: "2026-08-19T11:54:29.255927+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 51b7fcff52739a83c4107516026ec0c270b0f8633e9399dccbdf2a8f6006a1d2 @@ -2031,7 +2043,7 @@ entries: version: v0.0.19 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.921765+05:30" + created: "2026-08-19T11:54:29.255667+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 8ebbf53c27110582d1d3aa775eae4eb1028672776015dcbfe798ff0c5056b8b1 @@ -2045,7 +2057,7 @@ entries: version: v0.0.18 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.921424+05:30" + created: "2026-08-19T11:54:29.255404+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 6901e261fe4617b08207cf498845614275ebac2bfaed54ad5eb8f640a7150ead @@ -2059,7 +2071,7 @@ entries: version: v0.0.17 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.921137+05:30" + created: "2026-08-19T11:54:29.255111+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0b49c92f2075609563e6d596d205045f3299d2dcbcbe09a3194a7e12b4df617c @@ -2073,7 +2085,7 @@ entries: version: v0.0.16 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.920591+05:30" + created: "2026-08-19T11:54:29.254835+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 9b25ba867e6c7297bcae9a7795cc29348006f1d310e7f563b948ffaceb760149 @@ -2087,7 +2099,7 @@ entries: version: v0.0.15 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.920297+05:30" + created: "2026-08-19T11:54:29.254498+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: f74d351c335d5b9db31685da2bf5cab33079593bdc0b010f710cb54df9b6bab1 @@ -2101,7 +2113,7 @@ entries: version: v0.0.14 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.919896+05:30" + created: "2026-08-19T11:54:29.25416+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: eca3b5e28c90dcbed32071e7b28dfab4e88014a679bbd16a03729f34c9dccc5f @@ -2115,7 +2127,7 @@ entries: version: v0.0.13 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.919526+05:30" + created: "2026-08-19T11:54:29.253711+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 4cc6acd625ea36bdb9bd874c4d648efb379129438f48c91098a59e8d84ba3620 @@ -2129,7 +2141,7 @@ entries: version: v0.0.12 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.919133+05:30" + created: "2026-08-19T11:54:29.253306+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 08769b7fe4e8be7e26a53329c764abd9013dca805e6249ccf3d8a8155a9a8959 @@ -2143,7 +2155,7 @@ entries: version: v0.0.11 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.918839+05:30" + created: "2026-08-19T11:54:29.252949+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 1d3435fe1e7dc358e2941621aadf1ba21d16fa4f72d8320810c61f5a11ae7189 @@ -2157,7 +2169,7 @@ entries: version: v0.0.10 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.932147+05:30" + created: "2026-08-19T11:54:29.265093+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 6c65c363d54c2463167d77451525c546b08ed030143fb911a51c34b1d5967f45 @@ -2171,7 +2183,7 @@ entries: version: v0.0.9 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.931768+05:30" + created: "2026-08-19T11:54:29.264851+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: e9feb789d09a51445657aa1a2c71e87411bcbae36a366c4ae8f6b200049addba @@ -2185,7 +2197,7 @@ entries: version: v0.0.8 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.931455+05:30" + created: "2026-08-19T11:54:29.264561+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: c5793cb3415ae0b68cfdc44fb9927ce68f0f4b77e50c7ab3cef610ed5d1cb98e @@ -2199,7 +2211,7 @@ entries: version: v0.0.7 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.931169+05:30" + created: "2026-08-19T11:54:29.264288+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: b45dd74d7722d961d949102c81b2321ff1d575c3e94fbd9bf5aca9e328626d49 @@ -2213,7 +2225,7 @@ entries: version: v0.0.6 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.929644+05:30" + created: "2026-08-19T11:54:29.263985+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0d10278e951800d9b46a1415e090c62ff642ecbdc0f181fba617bf273799114a @@ -2227,7 +2239,7 @@ entries: version: v0.0.5 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.929234+05:30" + created: "2026-08-19T11:54:29.263676+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: f405204dd81300e58188ca5d41efbd6ea3f1b8f08bd50d65ea95000d38edc517 @@ -2241,7 +2253,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.927093+05:30" + created: "2026-08-19T11:54:29.261438+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: f31132842aca2478c10457f6e323ffa566cca222afc58996d42a08f6f87a121e @@ -2255,7 +2267,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.922288+05:30" + created: "2026-08-19T11:54:29.256154+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: cc7992d670d615549c67717904238998780abe5aa5df400e4e3eb31d16237ea4 @@ -2269,7 +2281,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.918432+05:30" + created: "2026-08-19T11:54:29.252331+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: e45d41b5041d8a3649bb8db768226990b2aae21b31b13ffd18d7253fe1e1d441 @@ -2286,7 +2298,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.948677+05:30" + created: "2026-08-19T11:54:29.271233+05:30" description: Helm chart for deploying Apache Solr datastore digest: f26072bc8a074f83ab7a6b0fa7d1b9cda62b19324cbb30f7773847a3ca20eba0 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2301,7 +2313,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.947993+05:30" + created: "2026-08-19T11:54:29.27102+05:30" description: Helm chart for deploying Apache Solr datastore digest: 6b20bc75e235deed888fba4f9f8aa6331a29358aa7f845710a978bd0420f0234 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2316,7 +2328,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.947318+05:30" + created: "2026-08-19T11:54:29.270787+05:30" description: Helm chart for deploying Apache Solr datastore digest: ecf9a0838f59fb0b2197c1526bc3e7febe37e5aa3d2158651b4cec9bb51891dc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2331,7 +2343,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.946531+05:30" + created: "2026-08-19T11:54:29.270485+05:30" description: Helm chart for deploying Apache Solr datastore digest: c6b7165c189a94bb3b35135f6a6a97b59ac3e971f8354544583bbc715e8b5f76 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2344,7 +2356,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.945712+05:30" + created: "2026-08-19T11:54:29.270138+05:30" description: Helm chart for deploying Apache Solr datastore digest: 7b179009c3258ab1abb9520aa60281ddffda8220eb3906811a0aa0ffd023f154 icon: https://zop.dev/logo.png @@ -2357,7 +2369,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.945067+05:30" + created: "2026-08-19T11:54:29.269928+05:30" description: Helm chart for deploying Apache Solr datastore digest: b55472585f9c7272cdd3fcef0ee411c20a2f429f4b9d7d8a0ba7912a840333b8 icon: https://zop.dev/logo.png @@ -2371,7 +2383,7 @@ entries: solr-operator: - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.944317+05:30" + created: "2026-08-19T11:54:29.269659+05:30" dependencies: - condition: zookeeper-operator.install name: zookeeper-operator @@ -2392,7 +2404,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.969324+05:30" + created: "2026-08-19T11:54:29.28752+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2411,7 +2423,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.964603+05:30" + created: "2026-08-19T11:54:29.283597+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2430,7 +2442,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.960395+05:30" + created: "2026-08-19T11:54:29.279638+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2449,7 +2461,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.955768+05:30" + created: "2026-08-19T11:54:29.275754+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2469,7 +2481,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.974961+05:30" + created: "2026-08-19T11:54:29.292806+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2494,7 +2506,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.974042+05:30" + created: "2026-08-19T11:54:29.292006+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2519,7 +2531,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.973367+05:30" + created: "2026-08-19T11:54:29.291416+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2544,7 +2556,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.972879+05:30" + created: "2026-08-19T11:54:29.290977+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2569,7 +2581,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.972421+05:30" + created: "2026-08-19T11:54:29.290379+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2591,7 +2603,7 @@ entries: version: v0.0.4 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.971971+05:30" + created: "2026-08-19T11:54:29.289932+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2614,7 +2626,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.971515+05:30" + created: "2026-08-19T11:54:29.289402+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2637,7 +2649,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.970397+05:30" + created: "2026-08-19T11:54:29.288506+05:30" description: Helm chart for Deploying Apache Superset digest: f2612f4782cc4e971f095ddbb76b3e9631e52b7ba6473e48226d2f769317be56 icon: https://zop.dev/logo.png @@ -2653,7 +2665,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.976173+05:30" + created: "2026-08-19T11:54:29.293528+05:30" description: Helm chart for deploying surrealdb digest: 4e87390d8466c1c3cb37c25a0a59be957d792976bafb3b3a02101927dcf8a3da icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/c44b7326-00d7-4c62-bce7-ca576509d27f-10982346.png @@ -2668,7 +2680,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.975405+05:30" + created: "2026-08-19T11:54:29.293242+05:30" description: Helm chart for deploying surrealdb digest: e73e929591f817ffa0a7477fb8b24c7572b667534e14280c107b170bb4b29568 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/c44b7326-00d7-4c62-bce7-ca576509d27f-10982346.png @@ -2681,7 +2693,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.975187+05:30" + created: "2026-08-19T11:54:29.293008+05:30" description: Helm chart for deploying surrealdb digest: 3dc8d5151d6a8b5a96dc3b7aabb8e575e4c5298f0eef30943b44f74f0892bd38 icon: https://zop.dev/logo.png @@ -2695,7 +2707,7 @@ entries: uptime-monitoring: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.976315+05:30" + created: "2026-08-19T11:54:29.293843+05:30" description: HTTPS uptime and TLS monitoring digest: 00ab35eb86ad249c196029e804798aa870ee399d0c15299cc502697f8d3b4791 icon: https://zop.dev/logo.png @@ -2711,7 +2723,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.98171+05:30" + created: "2026-08-19T11:54:29.29864+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2734,7 +2746,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.981103+05:30" + created: "2026-08-19T11:54:29.297925+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2757,7 +2769,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.980331+05:30" + created: "2026-08-19T11:54:29.297144+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2780,7 +2792,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.97982+05:30" + created: "2026-08-19T11:54:29.296695+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2803,7 +2815,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.979107+05:30" + created: "2026-08-19T11:54:29.296254+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2823,7 +2835,7 @@ entries: version: v0.0.4 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.978169+05:30" + created: "2026-08-19T11:54:29.295355+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2844,7 +2856,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.977429+05:30" + created: "2026-08-19T11:54:29.29479+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2865,7 +2877,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.976809+05:30" + created: "2026-08-19T11:54:29.294275+05:30" description: Helm chart for deploying WordPress app digest: 1b5793a827827be151ebe571fcadec8507a6562da1213c774ca0acba91e91ab2 icon: https://zop.dev/logo.png @@ -2879,7 +2891,7 @@ entries: zookeeper: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.983168+05:30" + created: "2026-08-19T11:54:29.300043+05:30" description: A Helm chart for Deploying Zookeeper on Kubernetes digest: 8b0183fb1c180fbf9f756362079cd0fb6c199fce2900f1c2644292789de9d4d0 icon: https://zop.dev/logo.png @@ -2892,7 +2904,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-17T11:46:25.982672+05:30" + created: "2026-08-19T11:54:29.299634+05:30" description: A Helm chart for Deploying Zookeeper on Kubernetes digest: 06e4542609434c3c6385b75619e254ada3771e332c025b25c2f074992d5043ca icon: https://zop.dev/logo.png @@ -2906,7 +2918,7 @@ entries: zookeeper-operator: - apiVersion: v2 appVersion: "1.0" - created: "2026-08-17T11:46:25.982483+05:30" + created: "2026-08-19T11:54:29.299343+05:30" description: A Helm chart for Deploying Zookeeper Operator on Kubernetes digest: 54a824110bc9e4bbf8228f49c601f8d2cfab1ff815037a09ac7e29067f5dd8d1 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250407/69625503-f6f1-4521-9c14-1d262ee8683b-zookeeper.png @@ -2917,4 +2929,4 @@ entries: urls: - https://helm.zop.dev/zookeeper-operator-v0.0.1.tgz version: v0.0.1 -generated: "2026-08-17T11:46:25.877647+05:30" +generated: "2026-08-19T11:54:29.210927+05:30" diff --git a/docs/karpenter-gcp-v0.0.4.tgz b/docs/karpenter-gcp-v0.0.4.tgz new file mode 100644 index 00000000..948f6a53 Binary files /dev/null and b/docs/karpenter-gcp-v0.0.4.tgz differ