SlideShare a Scribd company logo
Dynamic infrastructure for
development
Balázs Rostás
About me
Motivation
● Startup At the beginning many attempts, chaotic unsystematic code and
workflows
● Later on the requirements stabilized It was time to create a scalable developer
friendly pipeline
● The road from idea to release was too long
● We needed an easy way to test the applications
What was at the beginning?
● New branch
● Local build
● (Build or pull the dependencies)
● Deploy it locally (with the dependencies)
● Deploy the database if needed and seed it with dummy data
Problem: Not scalable, a more complex service might not have enough resources to
run on a local machine, error-prone and hard to maintain.
Kubernetes to the rescue
● We moved all of our infrastructure to kubernetes
● The infrastructure became more scalable and maintainable
● It allowed us to easily implement zero downtime deployments
● Proper load balancing, health check and automatic restarts out of the box
Idea: Dynamic infrastructure
PoC:
● Branch name identifies the new infrastructure
● Multiple repositories can join the same environment by using the same branch
name
● The created infrastructure has a deterministic access point
○ branch.platform.avatao.build
● Every environment gets its own isolated database with proper mock data
● Create branch on a repository (e.g.: test)
● A build is started using Google Cloud Build
● New kubernetes namespace is created (called test, derived from the branch)
● Branch is created on the centralized kubernetes manifest repository (test)
● The configuration is changed on this new branch (sed) so that it uses the new
namespace (and others like replica number, read-only filesystem etc...)
PoC Implementation
● hack/deploy-platform.sh (test branch)
○ Copy kubernetes secrets from QA (default namespace in the dev cluster)
○ Generate kubernetes manifest files using envsubst
○ Run managers to provision databases or anything that is needed to deploy the platform
○ Deploy the platform using the QA docker images except for the service that is currently deployed
● Resources like etcd, redis, RabbitMQ are shared amongst namespaces to lower
costs and are separated using other techniques like prefixing
● The platform is now available here: test.platform.avatao.build
If we use the same branch name on any other repository it will realize that one is
already created with the same name so it would just deploy it here.
PoC Implementation
Success?
Yes.
Good as it is?
No.
What's the problem?
● Wasteful, we don't need a new infrastructure for every branch
● The cleaning up is manual and tedious
● The system using branch name as the identifier was easy to implement but it has
many flaws
○ I have to rename a branch if I'd like it to join a specific infrastructure
○ What if I accidentally make a branch on my service with an existing infrastructure?
○ One branch can only run in one infrastructure
● If I'd like to change something in the kubernetes manifest files or introduce new
microservices I am in trouble
● If anything changes on the QA the synchronization is not easy
Let's improve it
● Find the right the tool for the goal (CircleCI, Spinnaker)
● Helm instead of envsubst
● Instead of a centralized kubernetes manifest repository, each service is responsible
for their own helm chart
● Instead of using the branch as the identifier, develop an internal tool to create
infrastructures easily from any branch (it needs to store these information)
Example #1
● Developer is working on X and Y service using A and B branches respectively
● It is time to try it out in a feature infrastructure
● Using the internal tool a new feature infra is created where the X and Y services
use the A and B branches
● There is a push on either X or Y repository -> using the configuration of the
infrastructures we can deploy the app to the proper environment or
environments(!).
Example #2
● We'd like to deprecate a service or create new ones
● When creating the infrastructure we simply remove the service we'd like to
deprecate during creation
● For the new service we choose which repository we'd like to deploy (it needs to
have the proper helm chart and spinnaker pipeline ready)
● The infrastructure will be created with the old service removed and the new
service deployed
Garbage collection and maintenance
● If the infrastructure is not needed we can remove it with a click of a button, or it
can be automatically deleted after some time of inactivity.
○ Idea: Associate Github PRs to environments and on merged status delete them
● If the QA environment changes we can synchronize it using the internal tool
○ Must not be automatic to prevent breaking change
○ Only update the parts that are not worked on (master branch versions)
Thank you!

More Related Content

What's hot (20)

PPTX
Containers and HPC
Olli-Pekka Lehto
 
PDF
OpenNebula Conf | Lightning talk: Managing a Scientific Computing Facility wi...
NETWAYS
 
PPT
Ceph de facto storage backend for OpenStack
eNovance
 
PDF
High Availability from the DevOps side - OpenStack Summit Portland
eNovance
 
PDF
Docker Fundamentals
Anshul Patel
 
PPTX
What is the OpenStack Platform? By Peter Dens - Kangaroot
Kangaroot
 
PDF
Open stack platform director
Jsonr4
 
PDF
The road to enterprise ready open stack storage as service
Sean Cohen
 
PDF
Helm – The package manager for Kubernetes
FabianRosenthal1
 
PDF
OpenNebulaConf2017EU: Hyper converged infrastructure with OpenNebula and Ceph...
OpenNebula Project
 
PDF
OpenNebulaConf2017EU: IPP Cloud by Jimmy Goffaux, IPPON
OpenNebula Project
 
PPTX
Kubeflow on google kubernetes engine
Bear Su
 
PDF
Exploring Kubeflow on Kubernetes for AI/ML | DevNation Tech Talk
Red Hat Developers
 
PDF
Simplify Your Code with Helmfile
Codefresh
 
PDF
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Anant Corporation
 
PPTX
Manage Kubernetes application complexity with Helm
Annie Talvasto
 
PDF
OpenShift, Docker, Kubernetes: The next generation of PaaS
Graham Dumpleton
 
PDF
OpenNebulaConf2018 - OpenNebula in a Continuous Integration Environment - Geo...
OpenNebula Project
 
PDF
VASCAN - Docker and Security
Michael Irwin
 
PDF
Peanut Butter and jelly: Mapping the deep Integration between Ceph and OpenStack
Sean Cohen
 
Containers and HPC
Olli-Pekka Lehto
 
OpenNebula Conf | Lightning talk: Managing a Scientific Computing Facility wi...
NETWAYS
 
Ceph de facto storage backend for OpenStack
eNovance
 
High Availability from the DevOps side - OpenStack Summit Portland
eNovance
 
Docker Fundamentals
Anshul Patel
 
What is the OpenStack Platform? By Peter Dens - Kangaroot
Kangaroot
 
Open stack platform director
Jsonr4
 
The road to enterprise ready open stack storage as service
Sean Cohen
 
Helm – The package manager for Kubernetes
FabianRosenthal1
 
OpenNebulaConf2017EU: Hyper converged infrastructure with OpenNebula and Ceph...
OpenNebula Project
 
OpenNebulaConf2017EU: IPP Cloud by Jimmy Goffaux, IPPON
OpenNebula Project
 
Kubeflow on google kubernetes engine
Bear Su
 
Exploring Kubeflow on Kubernetes for AI/ML | DevNation Tech Talk
Red Hat Developers
 
Simplify Your Code with Helmfile
Codefresh
 
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Anant Corporation
 
Manage Kubernetes application complexity with Helm
Annie Talvasto
 
OpenShift, Docker, Kubernetes: The next generation of PaaS
Graham Dumpleton
 
OpenNebulaConf2018 - OpenNebula in a Continuous Integration Environment - Geo...
OpenNebula Project
 
VASCAN - Docker and Security
Michael Irwin
 
Peanut Butter and jelly: Mapping the deep Integration between Ceph and OpenStack
Sean Cohen
 

Similar to Dynamic infrastructure for development (20)

PDF
Successful DevOps implementation for small teams a true story
Jakub Paweł Głazik
 
PDF
Devops with Python by Yaniv Cohen DevopShift
Yaniv cohen
 
PPTX
Kubernetes 101
Stanislav Pogrebnyak
 
PDF
SCM Puppet: from an intro to the scaling
Stanislav Osipov
 
PDF
Distributed Tensorflow with Kubernetes - data2day - Jakob Karalus
Jakob Karalus
 
PPTX
The Rocky Cloud Road
Gert Drapers
 
DOCX
Gaganjot Kaur- The Nx Workspace.docx
Gaganjot kaur
 
PPTX
MongoDB Ops Manager and Kubernetes - James Broadhead
MongoDB
 
PDF
The State of the Veil Framework
VeilFramework
 
PDF
Triangle Devops Meetup 10/2015
aspyker
 
PPTX
Top 10 dev ops tools (1)
yalini97
 
PDF
Rise of the machines: Continuous Delivery at SEEK - YOW! Night Summary Slides
DiUS
 
PPTX
Exploring Next Generation Buildpacks - Anand Rao & Scott Deeg
VMware Tanzu
 
PDF
HPC on OpenStack
Erich Birngruber
 
PDF
DevOps Fest 2020. immutable infrastructure as code. True story.
Vlad Fedosov
 
PDF
Open shift and docker - october,2014
Hojoong Kim
 
PDF
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
Richard Bullington-McGuire
 
PDF
Velocity NYC 2017: Building Resilient Microservices with Kubernetes, Docker, ...
Ambassador Labs
 
PPTX
Snowflake Automated Deployments / CI/CD Pipelines
Drew Hansen
 
PDF
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
Wong Hoi Sing Edison
 
Successful DevOps implementation for small teams a true story
Jakub Paweł Głazik
 
Devops with Python by Yaniv Cohen DevopShift
Yaniv cohen
 
Kubernetes 101
Stanislav Pogrebnyak
 
SCM Puppet: from an intro to the scaling
Stanislav Osipov
 
Distributed Tensorflow with Kubernetes - data2day - Jakob Karalus
Jakob Karalus
 
The Rocky Cloud Road
Gert Drapers
 
Gaganjot Kaur- The Nx Workspace.docx
Gaganjot kaur
 
MongoDB Ops Manager and Kubernetes - James Broadhead
MongoDB
 
The State of the Veil Framework
VeilFramework
 
Triangle Devops Meetup 10/2015
aspyker
 
Top 10 dev ops tools (1)
yalini97
 
Rise of the machines: Continuous Delivery at SEEK - YOW! Night Summary Slides
DiUS
 
Exploring Next Generation Buildpacks - Anand Rao & Scott Deeg
VMware Tanzu
 
HPC on OpenStack
Erich Birngruber
 
DevOps Fest 2020. immutable infrastructure as code. True story.
Vlad Fedosov
 
Open shift and docker - october,2014
Hojoong Kim
 
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
Richard Bullington-McGuire
 
Velocity NYC 2017: Building Resilient Microservices with Kubernetes, Docker, ...
Ambassador Labs
 
Snowflake Automated Deployments / CI/CD Pipelines
Drew Hansen
 
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
Wong Hoi Sing Edison
 
Ad

Recently uploaded (20)

PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
Ad

Dynamic infrastructure for development

  • 3. Motivation ● Startup At the beginning many attempts, chaotic unsystematic code and workflows ● Later on the requirements stabilized It was time to create a scalable developer friendly pipeline ● The road from idea to release was too long ● We needed an easy way to test the applications
  • 4. What was at the beginning? ● New branch ● Local build ● (Build or pull the dependencies) ● Deploy it locally (with the dependencies) ● Deploy the database if needed and seed it with dummy data Problem: Not scalable, a more complex service might not have enough resources to run on a local machine, error-prone and hard to maintain.
  • 5. Kubernetes to the rescue ● We moved all of our infrastructure to kubernetes ● The infrastructure became more scalable and maintainable ● It allowed us to easily implement zero downtime deployments ● Proper load balancing, health check and automatic restarts out of the box
  • 6. Idea: Dynamic infrastructure PoC: ● Branch name identifies the new infrastructure ● Multiple repositories can join the same environment by using the same branch name ● The created infrastructure has a deterministic access point ○ branch.platform.avatao.build ● Every environment gets its own isolated database with proper mock data
  • 7. ● Create branch on a repository (e.g.: test) ● A build is started using Google Cloud Build ● New kubernetes namespace is created (called test, derived from the branch) ● Branch is created on the centralized kubernetes manifest repository (test) ● The configuration is changed on this new branch (sed) so that it uses the new namespace (and others like replica number, read-only filesystem etc...) PoC Implementation
  • 8. ● hack/deploy-platform.sh (test branch) ○ Copy kubernetes secrets from QA (default namespace in the dev cluster) ○ Generate kubernetes manifest files using envsubst ○ Run managers to provision databases or anything that is needed to deploy the platform ○ Deploy the platform using the QA docker images except for the service that is currently deployed ● Resources like etcd, redis, RabbitMQ are shared amongst namespaces to lower costs and are separated using other techniques like prefixing ● The platform is now available here: test.platform.avatao.build If we use the same branch name on any other repository it will realize that one is already created with the same name so it would just deploy it here. PoC Implementation
  • 10. Good as it is? No.
  • 11. What's the problem? ● Wasteful, we don't need a new infrastructure for every branch ● The cleaning up is manual and tedious ● The system using branch name as the identifier was easy to implement but it has many flaws ○ I have to rename a branch if I'd like it to join a specific infrastructure ○ What if I accidentally make a branch on my service with an existing infrastructure? ○ One branch can only run in one infrastructure ● If I'd like to change something in the kubernetes manifest files or introduce new microservices I am in trouble ● If anything changes on the QA the synchronization is not easy
  • 12. Let's improve it ● Find the right the tool for the goal (CircleCI, Spinnaker) ● Helm instead of envsubst ● Instead of a centralized kubernetes manifest repository, each service is responsible for their own helm chart ● Instead of using the branch as the identifier, develop an internal tool to create infrastructures easily from any branch (it needs to store these information)
  • 13. Example #1 ● Developer is working on X and Y service using A and B branches respectively ● It is time to try it out in a feature infrastructure ● Using the internal tool a new feature infra is created where the X and Y services use the A and B branches ● There is a push on either X or Y repository -> using the configuration of the infrastructures we can deploy the app to the proper environment or environments(!).
  • 14. Example #2 ● We'd like to deprecate a service or create new ones ● When creating the infrastructure we simply remove the service we'd like to deprecate during creation ● For the new service we choose which repository we'd like to deploy (it needs to have the proper helm chart and spinnaker pipeline ready) ● The infrastructure will be created with the old service removed and the new service deployed
  • 15. Garbage collection and maintenance ● If the infrastructure is not needed we can remove it with a click of a button, or it can be automatically deleted after some time of inactivity. ○ Idea: Associate Github PRs to environments and on merged status delete them ● If the QA environment changes we can synchronize it using the internal tool ○ Must not be automatic to prevent breaking change ○ Only update the parts that are not worked on (master branch versions)