Skip to content

Deployment Cell Amenities

Overview

Deployment cell amenities are additional infrastructure components (Helm charts) that can be installed and managed on your deployment cell to enhance functionality and provide essential services. Omnistrate provides both managed amenities and support for custom amenities to meet your specific infrastructure requirements.

This guide demonstrates how to manage deployment cell amenities using the Omnistrate command-line tool.

Prerequisites

Before managing deployment cell amenities, ensure you have:

  • Omnistrate CTL installed (installation guide)
  • Valid credentials for the Omnistrate platform
  • Appropriate permissions to manage deployment cell
  • Access to your target environment (e.g., PROD, STAGING)

Deployment cell support two types of amenities:

Managed Amenities

Pre-configured Helm charts maintained by Omnistrate that are automatically available for installation. These amenities are:

  • Fully managed: Omnistrate handles chart configuration, updates, and maintenance
  • Cloud-optimized: Configured with best practices for each cloud provider
  • Production-ready: Tested and validated for enterprise use

Common managed amenities include:

  • Observability Prometheus: Monitoring and metrics collection
  • Kubernetes Dashboard: Web-based Kubernetes cluster management interface
  • External DNS: Automatic DNS record management for Kubernetes services
  • Cert Manager: Automatic SSL certificate provisioning and renewal
  • Nginx Ingress Controller: HTTP/HTTPS traffic routing and load balancing

Each cloud provider has additional managed amenities.

Custom Amenities

  1. Helm charts that you configure and manage yourself. Custom amenities require you to provide:

  2. Chart repository information (name and URL)

  3. Specific chart version
  4. Custom Helm values for configuration
  5. Authentication credentials (if needed)

  6. Plain Kubernetes Manifests that you can deploy and manage on your deployment cell.

Managing Deployment Cell Configuration Templates

Configuration templates define which amenities are available for a deployment cell on each cloud provider.

Note

By default Omnistrate uses a Configuration Template per cloud provider. If you need to define different templates per Environment please reach out to [email protected]

Generate Configuration Template

Create a template with all available amenities for a specific cloud provider:

omnistrate-ctl deployment-cell generate-config-template --cloud aws --output template-aws.yaml

When prompted, select your login method and provide credentials.

Using Schema Validation

To simplify the definition of this specification file Omnistrate provide a JSON schema that can be used for validation. You can use the JSON schema in IDEs that use the YAML Language Server (eg: VSCode / NeoVim).

# yaml-language-server: $schema=https://api.omnistrate.cloud/2022-09-01-00/schema/deployment-cell-amenities-spec-schema.json

For IntelliJ replace the top line with the following line to set up the yaml schema

# $schema: https://api.omnistrate.cloud/2022-09-01-00/schema/deployment-cell-amenities-spec-schema.json

Review Template Structure

The generated template contains two main sections:

# yaml-language-server: $schema=https://api.omnistrate.cloud/2022-09-01-00/schema/deployment-cell-amenities-spec-schema.json

managedAmenities:
  - name: EFS CSI Driver
    description: EFS CSI Driver
    type: Helm
  - name: AWS Load Balancer Controller
    description: AWS Load Balancer Controller
    type: Helm
  - name: Cluster Autoscaler
    description: Cluster Autoscaler
    type: Helm
  # ... additional managed amenities

customAmenities:
  - name: EBS CSI Driver
    description: EBS CSI Driver
    type: Helm
    properties:
      ChartName: "aws-ebs-csi-driver"
      ChartVersion: "2.28.1"
      ChartRepoName: "aws-ebs-csi-driver"
      ChartRepoURL: "https://kubernetes-sigs.github.io/aws-ebs-csi-driver"
      CredentialsProvider:
        Type: "none"
      DefaultNamespace: "kube-system"
      ChartValues:
        image:
          repository: "public.ecr.aws/ebs-csi-driver/aws-ebs-csi-driver"
          tag: "v1.27.0"
        controller:
          replicaCount: 2
          resources:
            requests:
              cpu: "10m"
              memory: "40Mi"
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: omnistrate.com/control-plane
                    operator: Exists
          tolerations:
            - key: CriticalAddonsOnly
              value: "true"
              effect: NoSchedule

Warning

Omnistrate creates a system node pool that is independent of the service plan node pool. To allow Operators and Controllers to run on the system node pool, affinity rules and tolerations must be defined as shown in the example and explained in the Affinity rules and tolerations section.

Helm Chart Amenities

When defining custom Helm amenities, include these properties:

Property Description Required
ChartName Name of the Helm chart Yes
ChartVersion Specific version of the chart Yes
ChartRepoName Repository name identifier Yes
ChartRepoURL Repository URL Yes
CredentialsProvider Authentication configuration No
DefaultNamespace Kubernetes namespace for deployment No
ChartValues Custom Helm values to override defaults No
ReleaseName Optional custom release name for Helm chart. This setting is useful in case you need to install multiple versions of the same chart No

Kubernetes Manifest Amenities

The KubernetesManifest amenity type allows you to deploy custom Kubernetes manifests to deployment cells. This is useful for deploying Secrets, ConfigMaps, or any other Kubernetes resources that are not covered by Helm chart amenities.

When defining Kubernetes manifest amenities, include these properties:

Property Type Required Description
manifests array Yes List of manifest entries to deploy

Each entry in the manifests array must have exactly one of the following:

Property Type Description
def object Inline Kubernetes manifest definition
file string Path to a YAML file containing the manifest

Example: Inline ConfigMap

customAmenities:
  - name: app-config
    description: Application configuration
    type: KubernetesManifest
    properties:
      manifests:
        - def:
            apiVersion: v1
            kind: ConfigMap
            metadata:
              name: app-config
              namespace: default
            data:
              DATABASE_HOST: postgres.default.svc.cluster.local
              LOG_LEVEL: info

Example: Inline Secret

customAmenities:
  - name: app-secrets
    description: Application secrets
    type: KubernetesManifest
    properties:
      manifests:
        - def:
            apiVersion: v1
            kind: Secret
            metadata:
              name: app-secrets
              namespace: default
            type: Opaque
            stringData:
              API_KEY: my-api-key

Example: File References

customAmenities:
  - name: external-manifests
    description: Manifests from files
    type: KubernetesManifest
    properties:
      manifests:
        - file: ./manifests/configmap.yaml
        - file: ./manifests/secret.yaml

File paths are resolved relative to the configuration file location.

Example: Mixed Inline and File References

customAmenities:
  - name: mixed-manifests
    description: Mixed inline and file manifests
    type: KubernetesManifest
    properties:
      manifests:
        - file: ./secret.yaml
        - def:
            apiVersion: v1
            kind: ConfigMap
            metadata:
              name: runtime-config
              namespace: default
            data:
              FEATURE_FLAG: "true"

Validation

The CLI validates KubernetesManifest amenities before sending them to the server:

  • The manifests array cannot be empty
  • Each entry must have either file or def, but not both
  • File references must point to valid, readable YAML files
  • YAML content must be valid and parseable

Note

File references (file) are converted to inline definitions (def) by the CLI before being sent to the server API. The server only receives inline def entries, regardless of how they were specified in the configuration.

Affinity rules and tolerations

Omnistrate creates a system node pool that is independent of the service plan node pool. To allow Operators and Controllers to run on the system node pool, affinity rules and tolerations must be defined.

Affinity rules to prevent from running on service nodes:

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: omnistrate.com/control-plane
            operator: Exists

Toleration to allow to run on system nodes:

  tolerations:
    - key: CriticalAddonsOnly
      value: "true"
      effect: NoSchedule

Update Configuration Template

After customizing your template, apply it to your organization:

omnistrate-ctl deployment-cell update-config-template --cloud aws -f template-aws.yaml

View Current Configuration Template

Check the current configuration template for your organization:

omnistrate-ctl deployment-cell describe-config-template --cloud aws

For JSON output:

omnistrate-ctl deployment-cell describe-config-template --cloud aws --output json

Managing Individual Deployment Cell Amenities

Check Deployment Cell Status

View the current amenities and status of a specific deployment cell:

omnistrate-ctl deployment-cell describe-config-template --id hc-xxxxxxx

For JSON output:

omnistrate-ctl deployment-cell describe-config-template --id hc-xxxxxxx --output json

Replace hc-xxxxxxx with your actual deployment cell ID.

Update Deployment Cell Amenities

You have two options for updating amenities on a deployment cell:

Option 1: Update with Configuration File

Create a custom configuration file:

# yaml-language-server: $schema=https://api.omnistrate.cloud/2022-09-01-00/schema/deployment-cell-amenities-spec-schema.json

managedAmenities:
  - name: Observability Prometheus
    description: Observability Prometheus
    type: Helm
  - name: Kubernetes Dashboard
    description: Kubernetes Dashboard
    type: Helm
  - name: External DNS
    description: External DNS
    type: Helm

customAmenities:
  - name: Custom Chart
    description: Custom application chart
    type: Helm
    properties:
      ChartName: "my-custom-chart"
      ChartVersion: "1.0.0"
      ChartRepoURL: "https://my-repo.example.com"

Apply the configuration:

omnistrate-ctl deployment-cell update-config-template --id hc-xxxxxxx -f custom-config.yaml

Option 2: Sync with Template

Automatically sync the deployment cell with your organization's template:

omnistrate-ctl deployment-cell update-config-template --id hc-xxxxxxx --sync-with-template

This command syncs the deployment cell's amenities with the configuration template defined for its environment.

Apply Pending Changes

After updating the configuration, apply the changes to trigger actual deployment:

omnistrate-ctl deployment-cell apply-pending-changes --id hc-xxxxxxx

This command:

  • Applies any pending amenity additions or removals
  • Triggers the deployment/undeployment of Helm charts
  • Updates the deployment cell to match the desired configuration

Change Application

Configuration updates create pending changes that must be explicitly applied using the apply-pending-changes command. This two-step process provides control and allows you to review changes before deployment.