Nirmata provides multi-cloud container services to foster enterprise adoption of cloud-native applications and DevOps best practices. In this post, I will describe a cool new feature in Nirmata – cloning an entire application runtime with a single click!
Image credit: instructables.com
Nirmata allows rapid modeling of any application – complex microservices style applications, clustered applications, or traditional multi-tiered applications. With Nirmata, the lifecycle of an application runtime (called an environment) is cleanly separated from the application definition (called a blueprint).
You can also define different environment types, for example dev-test, staging, and production, to to model your DevOps pipeline. Nirmata’s powerful policy-based scheduling service manages the deployment, recovery, and scaling for the each environment.
A common usage pattern we are seeing is that customers create and delete environments several times during development and test cycles, production environments tend to be long-lived.
When a new environment is created it matches the application blueprint and policy settings. Environments contain service definitions. Based on the application, they can also contain several other elements like environment variables, label selectors, service dependency settings, scaling and recovery policies, service gateway and routing policies, and image update policies for continuous delivery. Basically, everything you need to deploy and operate microservices-style applications on any public or private cloud!
With Nirmata. you can safely modify and tune the environment and Nirmata manages the transitions from one stable state to another. Some common environment management tasks are, to upgrade (or downgrade) services, manage version-aware routes, update scaling rules, or even add a new service to test. These changes are sandboxed in the environment until they are applied back to the application, so other users are not impacted.
Over time, as changes are made to long-lived production environments, a customer feature request we started hearing was to be able to easily deploy an exact copy of an environment. To enable this, we added a one-click cloning feature. Some potential use cases of this feature are:
- Easily duplicate a staging or production environment for debugging and troubleshooting
- Create identical customer, or team specific, environments.
- Allows QA teams to ‘freeze’ an environment when they find a bug so that the developer can troubleshoot and debug.
Cloning environments in Nirmata is an easy 2 step process. For this post, I am using the Nirmata web interface – all features are also available via the REST API:
Step 1: Pick an Environment
You can pick an existing environment or create one. Creating a new environment is easy. You can import an existing application blueprint from the catalog, or model your own application from scratch. Here I have deployed a microservices-style application we use for demos with multiple Java Tomcat services in it, and am selecting the clone option:
Step 2: Clone it!
When you select the clone option it makes an exact copy of the environment metadata and policies, and launches a wizard pre-populated with the data. There are several settings you can control, but they are all optional. All you need to do is provide a name. That’s it!
Clicking finish on the wizard triggers a deploy. Based on your policy settings, Nirmata calculates the placement and allocates compute, network, and storage resources. In a few seconds (…it’s that quick as my container images are pre-cached on the hosts) I now have a running clone of my environment!
Nirmata provides a clean separation of application definitions from runtime environments, allowing each to be versioned and managed separately. This separation is conceptually similar to long-lived branches in Git, or other version control systems.
Nirmata itself is designed as a cloud-native microservices style application. This allows our team to rapidly deliver new value-add application lifecycle management features to our customers. In this short post I described just one such new feature which we recently delivered based on a customer request. We are planning several more and would love to get your inputs on what you would like to see next!