Skip to content

Backward compatibility

Breaking change releases


v0.44.2 -> v0.45.0

Motivation

The main change in the v0.45.0 RMK version is the replacement of the technology stack for cluster provisioning, transitioning from Terraform to Kubernetes Cluster API.

This change was driven by several key factors:

  1. Maintaining open-source integrity:

    Terraform’s transition to a BSL license conflicts with our commitment to keeping RMK fully open-source (OSS). By switching to Kubernetes Cluster API, we ensure that our customers’ interests remain unaffected.

    More details on the Terraform’s license change are available at the link.

  2. Kubernetes-native solution:

    We needed a provisioning approach that seamlessly integrates with Kubernetes across various environments.

    With the new version, we now support AWS, Azure, GCP, K3D (local installation).

    On-premise support is expected in upcoming releases.

  3. Simplified configuration management:

    Cluster configurations are now stored in Helm charts, aligning with the way installed components are managed. This ensures a unified format for all declarations.

  4. Seamless cluster upgrades:

    Our new approach makes cluster updates Kubernetes-native with pod status awareness and zero-downtime upgrades.

This transition marks a significant step in enhancing RMK’s provisioning capabilities, ensuring better scalability, openness, and ease of management.

Stay tuned for more updates in upcoming releases! 🚀

Deprecated features

For the rmk config init command:

  • –artifact-mode, –aws-reconfigure-artifact-license: removed the flag along with the functionality, no longer needed.
  • –aws-ecr-host, –aws-ecr-region, –aws-ecr-user-name: removed the flag along with the functionality, replaced by the third-party Kubernetes-native ecr-token-refresh operator.
  • –aws-reconfigure: removed the flag, replaced AWS CLI with AWS SDK.
  • –cloudflare-token: removed the flag along with the functionality, replaced by the third-party Kubernetes-native external-dns operator.
  • –cluster-provisioner-state-locking: removed the flag (Terraform is no longer in use).
  • –config-from-environment: removed the flag along with the functionality.
  • –root-domain: removed the flag, replaced by the declarative configuration via project.yaml.
  • –s3-charts-repo-region: removed the flag, replaced with the private repository configuration via Helmfile.

For the rmk cluster command category:

  • container-registry: removed the command along with all flags.
  • destroy: removed the command along with all flags (Terraform is no longer in use).
  • list: removed the command along with all flags (Terraform is no longer in use).
  • provision: removed the command along with all flags (Terraform is no longer in use).
  • state: removed the command along with all flags (Terraform is no longer in use).

Steps to migrate

Newly created project repositories

Before performing actions via RMK with this project repository, simply update to the v0.45.0 version.

rmk update
Previously created project repositories for the AWS cluster provider

To ensure a successful migration, the following the steps should be executed in the specified order:

  1. Ensure you are using the previous v0.44.2 RMK version.

    rmk update -v v0.44.2
    
  2. Download private SOPS Age keys of the current RMK version if you haven’t done it earlier.

    rmk config init --github-token=<github_personal_access_token>
    

    Skip this step if you lack administrator permissions for the selected AWS account.

  3. Save the old path to the private SOPS Age keys storage directory to an environment variable.

    RMK_SOPS_AGE_KEYS_PATH_OLD="$(rmk --log-format=json config view | yq '.config.SopsAgeKeys')"
    

    Skip this step if you lack administrator permissions for the selected AWS account.

  4. Update your current version to v0.45.0.

    rmk update
    
  5. Add root domain specification in project.yaml for project repository.

    project:
      # ...
      spec:
        environments:
          develop:
            root-domain: <custom_root_domain_name> # or "*.edenlab.dev" for the Edenlab team
          production:
            root-domain: <custom_root_domain_name> # or "*.edenlab.dev" for the Edenlab team
          staging:
            root-domain: <custom_root_domain_name> # or "*.edenlab.dev" for the Edenlab team
    

    If the project.yaml file has the spec.environments section of a deprecated format already, e.g.:

    project:
     # ...
     spec:
       environments:
         - develop # deprecated
         - production # deprecated
         - staging # deprecated
    

    be sure to replace the scalar strings with the new spec.environments objects containing the respective root domains.

  6. Initialize a new configuration specifying the AWS cluster provider.

    rmk config init --cluster-provider=aws \
        --aws-access-key-id=<aws_access_key_id> \
        --aws-region=<aws_region> \
        --aws-secret-access-key=<aws_secret_access_key> \
        --github-token=<github_personal_access_token>
    
  7. Copy private SOPS Age keys from the old path to the new directory.

    cp -f "${RMK_SOPS_AGE_KEYS_PATH_OLD}"/* "$(rmk --log-format=json config view | yq '.config.SopsAgeKeys')"
    unset RMK_SOPS_AGE_KEYS_PATH_OLD
    

    Skip this step if you lack administrator permissions for the selected AWS account.

  8. Upload the old private SOPS Age keys to AWS Secret Manager.

    rmk secret keys upload
    

    Skip this step if you lack administrator permissions for the selected AWS account.

  9. Migrate the code to the new repository structure, for example, compatible with cluster provisioning using
    Kubernetes Cluster API Provider AWS.


Last update: March 6, 2025