Upgrade on AWS
To upgrade your Materialize instances, upgrade the Materialize operator first and then the Materialize instances. The following tutorial upgrades your Materialize deployment running on AWS Elastic Kubernetes Service (EKS).
The tutorial assumes you have installed Materialize on AWS Elastic Kubernetes Service (EKS) using the instructions on Install on AWS (either from the examples/simple directory or the root).
Version compatibility
The following table presents the versions compatibility for the operator and the applications:
| Materialize Operator | orchestratord version | environmentd version | Release date | Notes |
|---|---|---|---|---|
| v25.1.10 | v0.142.1 | v0.130.11 | 2025-04-24 | |
| v25.1.9 | v0.141.0 | v0.130.10 | 2025-04-24 | |
| v25.1.8 | v0.138.0 | v0.130.9 | 2025-04-24 | |
| v25.1.7 | v0.138.0 | v0.130.8 | 2025-04-08 | |
| v25.1.6 | v0.130.8 | v0.130.8 | 2025-03-26 |
This release uses an incorrect version of orchestratord as its
default (v0.130.8 instead of v0.138.0). This has been fixed in
v25.1.7.
|
| v25.1.5 | v0.138.0 | v0.130.7 | 2025-03-25 | |
| v25.1.4 | v0.138.0 | v0.130.7 | 2025-03-25 | |
| v25.1.2 | v0.130.4 | v0.130.4 | 2025-03-11 |
When upgrading, you may need or want to update your fork of the Terraform module to upgrade.
| Terraform version | Notable changes |
|---|---|
| v0.4.4 |
|
| v0.4.3 |
|
| v0.4.0 |
|
| v0.3.1 |
|
| v0.3.0 |
|
| v0.2.7 |
|
Prerequisites
The following procedure performs an in-place upgrade, which incurs downtime.
To perform a rolling upgrade(where both the old and new Materialize instances
are running before the the old instances are removed), you can specify
inPlaceRollout to false. When performing a rolling upgrade, ensure you have
enough resources to support having both the old and new Materialize instances
running.
Terraform
If you don’t have Terraform installed, install Terraform.
AWS CLI
If you do not have the AWS CLI installed, install. For details, see the AWS documentation.
kubectl
If you do not have kubectl, install. See the Amazon EKS: install kubectl
documentation
for details.
Helm 3.2.0+
If you do not have Helm 3.2.0+, install. For details, see the Helm documentation.
Procedure
-
Open a Terminal window.
-
Configure AWS CLI with your AWS credentials. For details, see the AWS documentation.
-
Go to the Terraform directory for your Materialize deployment. For example, if you deployed from the
examples/simpledirectory:cd terraform-aws-materialize/examples/simple -
Optional. You may need to update your fork of the Terraform module to upgrade.
💡 Tip:If upgrading from a deployment that was set up using an earlier version of the Terraform modules, additional considerations may apply when using an updated Terraform modules to your existing deployments.
See Materialize on AWS releases for notable changes.
-
Configure
kubectlto connect to your EKS cluster, replacing:-
<your-eks-cluster-name>with the name of your EKS cluster. Your cluster name has the form{namespace}-{environment}-eks; e.g.,my-demo-dev-eks. -
<your-region>with the region of your EKS cluster. The simple example usesus-east-1.
aws eks update-kubeconfig --name <your-eks-cluster-name> --region <your-region>To verify that you have configured correctly, run the following command:
kubectl get nodesFor help with
kubectlcommands, see kubectl Quick reference. -
-
Back up your
terraform.tfvarsfile.cp terraform.tfvars original_terraform.tfvars -
Update the
terraform.tfvarsto set the Materialize Operator version:Variable Description operator_versionNew Materialize Operator version.
- If the variable does not exist, add the variable and set to the new version.
- If the variable exists, update the value to the new version.
##... Existing content not shown for brevity ##... Leave the existing variables unchanged operator_version="v25.1.13" # Set to the desired operator version -
Initialize the terraform directory.
terraform init -
Run
terraform planwith both theterraform.tfvarsand yourmz_instances.tfvarsfiles and review the changes to be made.terraform plan -var-file=terraform.tfvars -var-file=mz_instances.tfvarsThe plan should show the changes to be made for the
materialize_operator. -
If you are satisfied with the changes, apply.
terraform apply -var-file=terraform.tfvars -var-file=mz_instances.tfvarsTo approve the changes and apply, enter
yes.Upon successful completion, you should see output with a summary of changes.
-
Verify that the operator is running:
kubectl -n materialize get allVerify the operator upgrade by checking its events:
MZ_OPERATOR=$(kubectl -n materialize get pods --no-headers | grep operator | awk '{print $1}') kubectl -n materialize describe pod/$MZ_OPERATOR-
The Containers section should show the
--helm-chart-versionargument set to the new version. -
The Events section should list that the new version of the orchestratord have been pulled.
-
-
Back up your
mz_instances.tfvarsfile.cp mz_instances.tfvars original_mz_instances.tfvars -
Update the
mz_instances.tfvarsto specify the upgrade variables for each instance:Variable Description create_databaseSet to false.environmentd_versionNew Materialize instance version. request_rolloutorforce_rolloutA new UUID string. Can be generated with uuidgen.
request_rollouttriggers a rollout only if changes exist.force_rollouttriggers a rollout even if no changes exist.
inPlaceRolloutSet to trueto perform an in-place upgrade.
Set tofalseto perform a rolling upgrade. For rolling upgrades, ensure you have enough resources to support having both the old and new Materialize instances running during the upgrade.For example, the following instance specifies:
- a
create_databaseoffalse, - an
inPlaceRolloutoftrue, - an
environmentd_versionof"v0.130.14", and - a
request_rolloutof"12345678-1305-1304-1304-123456781304".
materialize_instances = [ { name = "demo" namespace = "materialize-environment" database_name = "demo_db" cpu_request = "1" memory_request = "2Gi" memory_limit = "2Gi" create_database = false environmentd_version = "v0.130.14" inPlaceRollout = true request_rollout="12345678-1305-1304-1304-123456781304" } ] -
Run
terraform planwith both theterraform.tfvarsand yourmz_instances.tfvarsfiles and review the changes to be made.terraform plan -var-file=terraform.tfvars -var-file=mz_instances.tfvarsThe plan should show the changes to be made for the Materialize instance.
-
If you are satisfied with the changes, apply.
terraform apply -var-file=terraform.tfvars -var-file=mz_instances.tfvarsTo approve the changes and apply, enter
yes.Upon successful completion, you should see output with a summary of changes.
-
Verify that the components are running after the upgrade:
kubectl -n materialize-environment get allVerify upgrade by checking the
balancerdevents:MZ_BALANCERD=$(kubectl -n materialize-environment get pods --no-headers | grep balancerd | awk '{print $1}') kubectl -n materialize-environment describe pod/$MZ_BALANCERDThe Events section should list that the new version of the
balancerdhave been pulled.Verify the upgrade by checking the
environmentdevents:MZ_ENVIRONMENTD=$(kubectl -n materialize-environment get pods --no-headers | grep environmentd | awk '{print $1}') kubectl -n materialize-environment describe pod/$MZ_ENVIRONMENTDThe Events section should list that the new version of the
environmentdhave been pulled. -
Open the Materialize Console. The Console should display the new version.