When deploying Kubernetes resources in a cluster, it is sometimes necessary to deploy them in a specific order. For example, a CustomResourceDefinition (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 customer to define an order:
Using the helmCharts field: The helmCharts 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: The policyRefs field allows you to reference a list of ConfigMap 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 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 Job to be completed
Deploy todo-app which can access PostgreSQL deployment
Wait for todo-app to be healthy
Deploy a Job that adds an entry to database via todo-app
All YAMLs for this example can be found in 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 found it helpful.
Thank you for reading!
Top comments (0)