Deploy Kubernetes Resources in a Controlled and Orderly Manner
Sveltos can help you solve this problem by allowing you to specify the order in which Kubernetes resources are deployed.
Join the DZone community and get the full member experience.
Join For FreeWhen deploying Kubernetes resources in a cluster, it is sometimes necessary to deploy them in a specific order. For example, a Custom Resource Definition (CRD) must exist before any custom resources of that type can be created.
Sveltos can help you solve this problem by allowing you to specify the order in which Kubernetes resources are deployed.
ClusterProfile Order
A ClusterProfile is a Kubernetes custom resource definition (CRD) that defines the resources that you want to deploy on a set of Kubernetes clusters.
ClusterProfile allows customers to define an order:
- Using the
helmCharts
field: ThehelmCharts
field allows you to specify a list of Helm charts that need to be deployed. Sveltos will deploy the Helm charts in the order that they are listed in this field. - Using the
policyRefs
field: ThepolicyRefs
field allows you to reference a list ofConfigMap
and Secret resources whose contents need to be deployed. Sveltos will deploy the resources in the order that they are listed in this field.
Here are some examples:
- The following
ClusterProfile
will first deploy the Prometheus Helm chart and then the Grafana Helm chart:
apiVersion: config.projectsveltos.io/v1alpha1
kind: ClusterProfile
metadata:
name: prometheus-grafana
spec:
clusterSelector: env=fv
syncMode: Continuous
helmCharts:
- repositoryURL: https://prometheus-community.github.io/helm-charts
repositoryName: prometheus-community
chartName: prometheus-community/prometheus
chartVersion: 23.4.0
releaseName: prometheus
releaseNamespace: prometheus
helmChartAction: Install
- repositoryURL: https://grafana.github.io/helm-charts
repositoryName: grafana
chartName: grafana/grafana
chartVersion: 6.58.9
releaseName: grafana
releaseNamespace: grafana
helmChartAction: Install
Resource Deployment Order With Events
In some cases, it is necessary to deploy Kubernetes resources only after other resources are in a healthy state. For example, a job that creates a table in a database should not be deployed until the database deployment is healthy.
Sveltos can help you solve this problem by allowing you to use events to control the rollout of your application.
An event is a notification that is sent when a certain condition is met. For example, you could create an event that is sent when the database deployment becomes healthy.
You can then use this event to trigger the deployment of the job that creates the table in the database.
By using events, you can ensure that your application is rolled out in a controlled and orderly manner.
In the above example, Sveltos has been instructed to:
- Deploy PostgreSQL deployment and service
- Wait for PostgreSQL deployment to be ready
- Deploy a job that creates a table in the DB
- Wait for the job to be completed
- Deploy todo-app, which can access PostgreSQL deployment
- Wait for the todo-app to be healthy
- Deploy a Job that adds an entry to the database via todo-app
All YAMLs for this example can be found in the projectsveltos documentation.
Support This Project
I hope you enjoyed this article! If you did, please check out the GitHub repo for the project. The repo contains the code, documentation, and examples, so it’s a great resource for getting started.
You can also star the project if you find it helpful.
Thank you for reading!
Published at DZone with permission of Gianluca Mardente. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments