SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
Kris Buytaert

@krisbuytaert
Infrastructure as Code Patterns
StackConf 2022, Berlin
• I used to be a developer
• Then I became an Ops person
• Chief Trolling/Travel/Technical Officer @ Inuits.eu
• Chief Yak Shaver @ o11y.eu
• Organiser of #devopsdays, #cfgmgmtcamp, #loadays, ...
• Everything is a Freaking DNS Problem
• Cofounder of all of the above
• DNS : devops needs sushi
• @krisbuytaert on twitter/github
Who am I ?
@krisbuytaert
Devops origins
@krisbuytaert
A global movement to improve the quality of software delivery leveraging Open
Source experiences , started in Gent in 2009
Devops definition
@krisbuytaert
We love running in circles
@krisbuytaert
• 1996 : Manual installation
• 2001 : Mondo Rescue (reproducable single instance)
• 2003 : System Imager , fast reproducable "identical" Infrastructure
• Image Sprawl
• "Overrides"
• 2005 : JeOS + Early IAC (CfEngine / Kickstart / FAI)
• 2010 : Desired State infrastructure as code , Puppet, Chef etc
• 2015 : Cloud provisioning , Terraform etc ..
Deploying an Infrastructure
@krisbuytaert
• 1 (Snowflake) server
• Multiple (snowflake) servers (cluster nodes)
• Virtualization
• Cloud
• Containers
20+ years of changes
@krisbuytaert
• Manual error
• Differences in nodes due to manual changes
• Not reproducable
• Humans
• Scale
Some of The problems
@krisbuytaert
Config Drift
@krisbuytaert
• Manually Crafted Snowflake
• Copied and modified
• Copied and modified
• Impossible to trace origin
• Impossible to reproduce
• Patching / Security nightmare
Image Sprawling & Golden Images vs JeOS
@krisbuytaert
FROM ubuntu

RUN apt-get update

RUN apt-get install -y git
RUN git clone git@github.com:prometheus/prometheus.git
RUN make install
What's wrong with this GW-Basic code ?
@krisbuytaert
Infrastructure as What ?
@krisbuytaert
• Treat configuration automation as Code
• Model your infrastructure
• Development best practices
• Model your infrastructure
• Pipeline your Code
• Test your Code
Infrastructure as Code
@krisbuytaert
• Reproducable Environments
• You never deploy 1x
• Local Test environments
• Development / User Acceptance / Testing / Shadow / Production / DR
• HA <- Keep cluster configuration in sync
• Prevent Configuration drift
• Cheap Disaster recovery
• ...
Infrastructure as Code Goals
@krisbuytaert
3 types of tools needed
• Provisioning
• Desired state
• Orchestration
2022 IaC Requirements
@krisbuytaert
• Create me an instance of application X
• Container instance
• VM instance
• Service X configuration via API

e.g Terraform , Pulumi
Provisioning
@krisbuytaert
• Ensure that this file present / service is running
• With these permissions
• Always / Verified
e.g Chef, Puppet, Salt
Desired state
@krisbuytaert
• Non frequent
• Trigger action X on resource Y based on characteristics A,B and or C
• First do X here then do Y there
• One off actions

e.g Ansible, Salt, Puppet Bolt
Orchestration
@krisbuytaert
• In computing, an idempotent operation is one that has no additional effect if it is called
more than once with the same input parameters.
• Not idempotent :
echo “root=disabled” >> /etc/someconfigfile
Idempodency
@krisbuytaert
Frequent enforcing desired state with reporting =
Automated population of a CMDB (Single source of truth) , with up to date data

Side Effect :
Having a single source from where to generate dynamic configuration

eg. reverse proxy , firewall rules, monitoring configuration, backup configuration
IaC & CMDB
@krisbuytaert
• Do you want a reproducible infrastructure ?
• Do you want to reduce manual error ?
• Do you want to achieve desired state ?
• Do you want to have automated configuration for monitoring, metrics, backups,
security etc ?
• Do you want to trivially spin up different identical environments (dev/uat/prod/dr)
• Do you want to be able to detect and prevent config drift ?
• Do you want to prevent image sprawl ?
Questions to ask :
@krisbuytaert
The Patterns
@krisbuytaert
• Code is not in source control
• Bolt / Ansible / Terraform is triggered from the admin's local machine
• Works for individual admin
• Doesn't Scale
• Prevents Collaboration
Pattern: It works from my homedir
@krisbuytaert
Improvement over $prev, but still doesn't Scale
Collaboration has been improved.
Pattern: It works from my workstation but its in git
@krisbuytaert
• Just the operating System
• Maybe some basic services
• Application is untouched
• Partial source of maybes
• Not suitable for derived configuration
• Kill your Silos
Pattern: We only automate the OS
@krisbuytaert
• Operating System
• Middle Ware
• Application
Pattern: We automate all the things
@krisbuytaert
• Package
• Config
• Service
Pattern: PCS
@krisbuytaert
• PCS
• Non Functional Requirements
• Monitoring
• Backups
• External dependencies
• Metrics
• ...
Pattern: PCS NFR
@krisbuytaert
• Package
• Config Files
• User Generated Data
Pattern: PCS UGC
@krisbuytaert
Pattern: Reproducable and Scalable Infrastructure
@krisbuytaert
• Ops use Chef but Devs use Java templating tool

or
• Terraform but Manual changes from UI.
Variants:
• Non centralized code base,

people run code from local forks undoing changes made by colleagues
• Templating tool is not idempotent (ruby sort ? / XML)
• Bonus points if the tool restarts a service on a change
Pattern: Multiple tools overwrite changes
@krisbuytaert
• Code is checked into a git repository
• The only way to apply is by central user
Pattern: Centralised apply , from source control
@krisbuytaert
• Tool is run once at deploy time then yolo
• manual changes afterwards are not identified or reversed
• State is not enforced, people are afraid to rerun playbooks
• Now we don't dare to update anymore
Orchestraition only mode, no desired state

AKA Yolo or Integrator mode
Pattern: We haven't run it for 6 months
@krisbuytaert
• Reporting says it's broken, we are not going to fix it
• Its been disabled for weeks, local modifications break it
• See Config Drift
Pattern: It's broken anyhow .
@krisbuytaert
• X < 120
• Periodically we run ensure the state of our Infrastructure
• We prevent config Drift
• We actively monitor broken runs
• We actively monitor change frequency
We have achieved desired state of our infra.
Pattern: We run it every X minutes
@krisbuytaert
• We setup everything, it worked for a while
• Then we broke service A ,
• Then something unrelated broke service B
• Automation got blamed
• We are not allowed to enable it again
• Team X doesn't trust automation,
• Often Team X = Security
• We manually make the changes now , but we have visibility on drift.
• We have semi desired state
Pattern: We run it in nooop now
@krisbuytaert
Pattern: We have a pipeline
@krisbuytaert
What is an Environment , a stack, a platform ?
A logically split of set of servers that together offer a service,
Typically existing in dev/uat/prod flavours
Environments
@krisbuytaert
• Limiting Blast radius
• Easy to spin up multiple variants
• Feature flagged code introduction
• And promotion of features
• Clear line of ownership (team bound)
• Same code , different config per environment
• Easier release management
Pattern : Using Environments
@krisbuytaert
• Huge blast radius
• Potential Scaling issues
• Difficult to "promote" changes
• Upgrade everthing or write host based if then case spaghetti
• Code duplication :

role_app_dev, role_app_uat, role_app_prod
Pattern : Not using environments
@krisbuytaert
• Typically with no environments
• Environment specific config is hardcoded
• See Config drift
Pattern: Config is hardcoded in the code
@krisbuytaert
• The same codebase is used
• Only the config data differs
• Multiple Environments possible
Pattern: Config Data defines config per environment
@krisbuytaert
• Code is run
• We will see the errors when they happen
• Code is not tested
Pattern: It we don't test
@krisbuytaert
• Every config run
• Collect information of the run,
• Store that information
• Be able to query a central source with live, correctly, machine generated data
• Reconfigure services based on changes in that data
• Full lifecycle
• Decomission instance => Automatically Clean out the data
Pattern: Single source of truth
@krisbuytaert
SSOT : e.g Puppet Exported Resources
@krisbuytaert
• Our Ansible playbook does a git commit to a config repo
• That repo gets checked out on the monitoring server
• Humans also modify this config
• Information is scattered over different tools
• you can't leverage the real power of automation , no dynamic reconfiguration of
resources
therefore configuration is often done manually , but through a tool
Pattern: No single source of truth
@krisbuytaert
We have one repo with all
• code
• passwords
• software binaries
Pattern: One repo for all the things
@krisbuytaert
"Blue printing"
Building a UI on top of a provisioning framework is typically an intermediate
step before people realize they either need to build in all AAA functionality and
buy a bloated tool.
Or realize git + Terraform solves these problems in a better way.
Pattern: Provisioning from a UI
@krisbuytaert
• We have written all code in house ?
• What do you mean there are modules on github to manage apache ?
• We spent about 3 months building our own
Pattern: we ignore the existing codebase group
@krisbuytaert
• Aka We do NOT understand Continuous Integration
• We have mapped our environments to git branches
• Obviously they are long running
• We are cherry picking changes from uat to prod
• We don't test those combinations
• We are in merge hell now
Puppet r10k is an antipattern.
So is running your gitops from multiple branches.
Pattern: We love Branching
@krisbuytaert
Puppet & Chef
Terraform & Pulumi
Pattern: We want a full language
@krisbuytaert
• All of these people say they are doing infrastructure as Code
• Some with 0 real benefit
• Find the patterns you like / dislike
• Implement or remove the ones you please
• My preferences might not fit your use case
Lessons Learned
@krisbuytaert
Kris Buytaert
@krisbuytaert
kris@inuits.eu
Essensteenweg 31
2930 Brasschaat
Belgium
Contact:
info@inuits.eu
+32-3-8082105

Más contenido relacionado

La actualidad más candente

Senarai semak fizikal
Senarai semak fizikalSenarai semak fizikal
Senarai semak fizikalshasmileys
 
GURU SEBAGAI SATU PROFESION
GURU SEBAGAI SATU PROFESIONGURU SEBAGAI SATU PROFESION
GURU SEBAGAI SATU PROFESIONridzuangrik
 
Inovasi ICT dalam Pengajaran Pembelajaran
Inovasi ICT dalam Pengajaran PembelajaranInovasi ICT dalam Pengajaran Pembelajaran
Inovasi ICT dalam Pengajaran PembelajaranSidek Aziz
 
Beberapa ciri penting teori ini dijelaskan seperti berikut
Beberapa ciri penting teori ini dijelaskan seperti berikutBeberapa ciri penting teori ini dijelaskan seperti berikut
Beberapa ciri penting teori ini dijelaskan seperti berikutazimahbtomar
 
RPT BM KSSR TAHUN 4
RPT BM KSSR TAHUN 4RPT BM KSSR TAHUN 4
RPT BM KSSR TAHUN 4Halina
 
Data Processing behind LINE Game Platform
Data Processing behind LINE Game PlatformData Processing behind LINE Game Platform
Data Processing behind LINE Game PlatformLINE Corporation
 
Penambahbaikan Pentaksiran Berasaskan Sekolah
Penambahbaikan Pentaksiran Berasaskan SekolahPenambahbaikan Pentaksiran Berasaskan Sekolah
Penambahbaikan Pentaksiran Berasaskan Sekolahtajul2
 
Rph psk t4 kebersihan di sekolah
Rph psk t4 kebersihan di sekolahRph psk t4 kebersihan di sekolah
Rph psk t4 kebersihan di sekolahNurfaten Ismail
 
Ciri ciri guru yang efektif dan peranan guru dalam
Ciri ciri guru yang efektif dan peranan guru dalamCiri ciri guru yang efektif dan peranan guru dalam
Ciri ciri guru yang efektif dan peranan guru dalamNor Amalina Che ZamZan
 
Unit 13 (persediaan sebagai guru)
Unit 13 (persediaan sebagai guru)Unit 13 (persediaan sebagai guru)
Unit 13 (persediaan sebagai guru)Yayasan Negeri
 
Rph bm tahun 3 jaga keselamatan diri
Rph bm tahun 3   jaga keselamatan diriRph bm tahun 3   jaga keselamatan diri
Rph bm tahun 3 jaga keselamatan diriKasturi Biru
 
Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...
Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...
Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...Samsul Hamdan
 
RPH Wudhu' Tingkatan 1
RPH Wudhu' Tingkatan 1RPH Wudhu' Tingkatan 1
RPH Wudhu' Tingkatan 1toriq04
 
Pemikiran daripada perspektif islam
Pemikiran daripada perspektif islamPemikiran daripada perspektif islam
Pemikiran daripada perspektif islamMazmon Mahmud
 
Boneka prasekolah
Boneka prasekolahBoneka prasekolah
Boneka prasekolaheela5346
 

La actualidad más candente (20)

Senarai semak fizikal
Senarai semak fizikalSenarai semak fizikal
Senarai semak fizikal
 
GURU SEBAGAI SATU PROFESION
GURU SEBAGAI SATU PROFESIONGURU SEBAGAI SATU PROFESION
GURU SEBAGAI SATU PROFESION
 
Inovasi ICT dalam Pengajaran Pembelajaran
Inovasi ICT dalam Pengajaran PembelajaranInovasi ICT dalam Pengajaran Pembelajaran
Inovasi ICT dalam Pengajaran Pembelajaran
 
Hiperaktif
HiperaktifHiperaktif
Hiperaktif
 
Beberapa ciri penting teori ini dijelaskan seperti berikut
Beberapa ciri penting teori ini dijelaskan seperti berikutBeberapa ciri penting teori ini dijelaskan seperti berikut
Beberapa ciri penting teori ini dijelaskan seperti berikut
 
Tukuh Reti
Tukuh RetiTukuh Reti
Tukuh Reti
 
RPT BM KSSR TAHUN 4
RPT BM KSSR TAHUN 4RPT BM KSSR TAHUN 4
RPT BM KSSR TAHUN 4
 
Data Processing behind LINE Game Platform
Data Processing behind LINE Game PlatformData Processing behind LINE Game Platform
Data Processing behind LINE Game Platform
 
Penambahbaikan Pentaksiran Berasaskan Sekolah
Penambahbaikan Pentaksiran Berasaskan SekolahPenambahbaikan Pentaksiran Berasaskan Sekolah
Penambahbaikan Pentaksiran Berasaskan Sekolah
 
Rph psk t4 kebersihan di sekolah
Rph psk t4 kebersihan di sekolahRph psk t4 kebersihan di sekolah
Rph psk t4 kebersihan di sekolah
 
Rph bahasa malaysia kssr tahun 1
Rph bahasa malaysia kssr tahun 1Rph bahasa malaysia kssr tahun 1
Rph bahasa malaysia kssr tahun 1
 
Ciri ciri guru yang efektif dan peranan guru dalam
Ciri ciri guru yang efektif dan peranan guru dalamCiri ciri guru yang efektif dan peranan guru dalam
Ciri ciri guru yang efektif dan peranan guru dalam
 
Unit 13 (persediaan sebagai guru)
Unit 13 (persediaan sebagai guru)Unit 13 (persediaan sebagai guru)
Unit 13 (persediaan sebagai guru)
 
Rph bm tahun 3 jaga keselamatan diri
Rph bm tahun 3   jaga keselamatan diriRph bm tahun 3   jaga keselamatan diri
Rph bm tahun 3 jaga keselamatan diri
 
Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...
Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...
Artikel: Tahap Pengaplikasian Teknologi Maklumat dan Komunikasi (TMK) Dalam P...
 
RPH Wudhu' Tingkatan 1
RPH Wudhu' Tingkatan 1RPH Wudhu' Tingkatan 1
RPH Wudhu' Tingkatan 1
 
Pemikiran daripada perspektif islam
Pemikiran daripada perspektif islamPemikiran daripada perspektif islam
Pemikiran daripada perspektif islam
 
Rancangan pengajaran harian aeiou
Rancangan pengajaran harian aeiouRancangan pengajaran harian aeiou
Rancangan pengajaran harian aeiou
 
Slaid kitar hidup haiwan
Slaid kitar hidup haiwanSlaid kitar hidup haiwan
Slaid kitar hidup haiwan
 
Boneka prasekolah
Boneka prasekolahBoneka prasekolah
Boneka prasekolah
 

Similar a Infrastructure as Code Patterns

Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Controlindiver
 
Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?Bruno Capuano
 
Microservices: The Best Practices
Microservices: The Best PracticesMicroservices: The Best Practices
Microservices: The Best PracticesPavel Mička
 
The Rocky Cloud Road
The Rocky Cloud RoadThe Rocky Cloud Road
The Rocky Cloud RoadGert Drapers
 
How Percolate uses CFEngine to Manage AWS Stateless Infrastructure
How Percolate uses CFEngine to Manage AWS Stateless InfrastructureHow Percolate uses CFEngine to Manage AWS Stateless Infrastructure
How Percolate uses CFEngine to Manage AWS Stateless InfrastructurePercolate
 
Continuous Integration, the minimum viable product
Continuous Integration, the minimum viable productContinuous Integration, the minimum viable product
Continuous Integration, the minimum viable productJulian Simpson
 
Database as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesDatabase as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesObjectRocket
 
Evolving for Kubernetes
Evolving for KubernetesEvolving for Kubernetes
Evolving for KubernetesChris McEniry
 
Deploying your SaaS stack OnPrem
Deploying your SaaS stack OnPremDeploying your SaaS stack OnPrem
Deploying your SaaS stack OnPremKris Buytaert
 
Detecting secrets in code committed to gitlab (in real time)
Detecting secrets in code committed to gitlab (in real time)Detecting secrets in code committed to gitlab (in real time)
Detecting secrets in code committed to gitlab (in real time)Chandrapal Badshah
 
Operating Consul as an Early Adopter
Operating Consul as an Early AdopterOperating Consul as an Early Adopter
Operating Consul as an Early AdopterNelson Elhage
 
DevOpsGuys - DevOps Automation - The Good, The Bad and The Ugly
DevOpsGuys - DevOps Automation - The Good, The Bad and The UglyDevOpsGuys - DevOps Automation - The Good, The Bad and The Ugly
DevOpsGuys - DevOps Automation - The Good, The Bad and The UglyDevOpsGroup
 
Automation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit Europe
Automation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit EuropeAutomation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit Europe
Automation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit EuropeAppDynamics
 
DevOps: Automate all the things
DevOps: Automate all the thingsDevOps: Automate all the things
DevOps: Automate all the thingsMat Mannion
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesAmazon Web Services
 
Pipeline all the Dashboards as Code
Pipeline all the Dashboards as CodePipeline all the Dashboards as Code
Pipeline all the Dashboards as CodeKris Buytaert
 

Similar a Infrastructure as Code Patterns (20)

Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Control
 
Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?
 
Migrating big data
Migrating big dataMigrating big data
Migrating big data
 
Microservices: The Best Practices
Microservices: The Best PracticesMicroservices: The Best Practices
Microservices: The Best Practices
 
GitOps , done Right
GitOps , done RightGitOps , done Right
GitOps , done Right
 
The Rocky Cloud Road
The Rocky Cloud RoadThe Rocky Cloud Road
The Rocky Cloud Road
 
Devops For Drupal
Devops  For DrupalDevops  For Drupal
Devops For Drupal
 
How Percolate uses CFEngine to Manage AWS Stateless Infrastructure
How Percolate uses CFEngine to Manage AWS Stateless InfrastructureHow Percolate uses CFEngine to Manage AWS Stateless Infrastructure
How Percolate uses CFEngine to Manage AWS Stateless Infrastructure
 
Continuous Integration, the minimum viable product
Continuous Integration, the minimum viable productContinuous Integration, the minimum viable product
Continuous Integration, the minimum viable product
 
Database as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesDatabase as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on Kubernetes
 
Evolving for Kubernetes
Evolving for KubernetesEvolving for Kubernetes
Evolving for Kubernetes
 
Deploying your SaaS stack OnPrem
Deploying your SaaS stack OnPremDeploying your SaaS stack OnPrem
Deploying your SaaS stack OnPrem
 
Detecting secrets in code committed to gitlab (in real time)
Detecting secrets in code committed to gitlab (in real time)Detecting secrets in code committed to gitlab (in real time)
Detecting secrets in code committed to gitlab (in real time)
 
Operating Consul as an Early Adopter
Operating Consul as an Early AdopterOperating Consul as an Early Adopter
Operating Consul as an Early Adopter
 
DevOpsGuys - DevOps Automation - The Good, The Bad and The Ugly
DevOpsGuys - DevOps Automation - The Good, The Bad and The UglyDevOpsGuys - DevOps Automation - The Good, The Bad and The Ugly
DevOpsGuys - DevOps Automation - The Good, The Bad and The Ugly
 
Automation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit Europe
Automation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit EuropeAutomation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit Europe
Automation: The Good, The Bad and The Ugly with DevOpsGuys - AppD Summit Europe
 
Hosting Ruby Web Apps
Hosting Ruby Web AppsHosting Ruby Web Apps
Hosting Ruby Web Apps
 
DevOps: Automate all the things
DevOps: Automate all the thingsDevOps: Automate all the things
DevOps: Automate all the things
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless Architectures
 
Pipeline all the Dashboards as Code
Pipeline all the Dashboards as CodePipeline all the Dashboards as Code
Pipeline all the Dashboards as Code
 

Más de Kris Buytaert

Years of (not) learning , from devops to devoops
Years of (not) learning , from devops to devoopsYears of (not) learning , from devops to devoops
Years of (not) learning , from devops to devoopsKris Buytaert
 
Observability will not fix your Broken Monitoring ,Ignite
Observability will not fix your Broken Monitoring ,IgniteObservability will not fix your Broken Monitoring ,Ignite
Observability will not fix your Broken Monitoring ,IgniteKris Buytaert
 
From devoops to devops 13 years of (not) learning
From devoops to devops 13 years of (not) learningFrom devoops to devops 13 years of (not) learning
From devoops to devops 13 years of (not) learningKris Buytaert
 
Help , My Datacenter is on fire
Help , My Datacenter is on fireHelp , My Datacenter is on fire
Help , My Datacenter is on fireKris Buytaert
 
Devops is Dead, Long live Devops
Devops is Dead, Long live DevopsDevops is Dead, Long live Devops
Devops is Dead, Long live DevopsKris Buytaert
 
10 years of #devopsdays, but what have we really learned ?
10 years of #devopsdays, but what have we really learned ? 10 years of #devopsdays, but what have we really learned ?
10 years of #devopsdays, but what have we really learned ? Kris Buytaert
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure FirstKris Buytaert
 
Is there a Future for devops ?
Is there a Future for devops   ? Is there a Future for devops   ?
Is there a Future for devops ? Kris Buytaert
 
10 Years of #devopsdays weirdness
10 Years of #devopsdays weirdness10 Years of #devopsdays weirdness
10 Years of #devopsdays weirdnessKris Buytaert
 
ADDO 2019: Looking back at over 10 years of Devops
ADDO 2019:    Looking back at over 10 years of DevopsADDO 2019:    Looking back at over 10 years of Devops
ADDO 2019: Looking back at over 10 years of DevopsKris Buytaert
 
Can we fix dev-oops ?
Can we fix dev-oops ?Can we fix dev-oops ?
Can we fix dev-oops ?Kris Buytaert
 
Continuous Infrastructure First Ignite Edition
Continuous Infrastructure First  Ignite EditionContinuous Infrastructure First  Ignite Edition
Continuous Infrastructure First Ignite EditionKris Buytaert
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure FirstKris Buytaert
 
Open Source Monitoring in 2019
Open Source Monitoring in 2019 Open Source Monitoring in 2019
Open Source Monitoring in 2019 Kris Buytaert
 
Migrating to Puppet 5
Migrating to Puppet 5Migrating to Puppet 5
Migrating to Puppet 5Kris Buytaert
 
Repositories as Code
Repositories as CodeRepositories as Code
Repositories as CodeKris Buytaert
 
Devops is a Security Requirement
Devops is a Security RequirementDevops is a Security Requirement
Devops is a Security RequirementKris Buytaert
 
Is there a future for devops ?
Is there a future for devops ?Is there a future for devops ?
Is there a future for devops ?Kris Buytaert
 
Looking back at 5 years of #cfgmgmtcamp
Looking back at 5 years of #cfgmgmtcampLooking back at 5 years of #cfgmgmtcamp
Looking back at 5 years of #cfgmgmtcampKris Buytaert
 
Pipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodeKris Buytaert
 

Más de Kris Buytaert (20)

Years of (not) learning , from devops to devoops
Years of (not) learning , from devops to devoopsYears of (not) learning , from devops to devoops
Years of (not) learning , from devops to devoops
 
Observability will not fix your Broken Monitoring ,Ignite
Observability will not fix your Broken Monitoring ,IgniteObservability will not fix your Broken Monitoring ,Ignite
Observability will not fix your Broken Monitoring ,Ignite
 
From devoops to devops 13 years of (not) learning
From devoops to devops 13 years of (not) learningFrom devoops to devops 13 years of (not) learning
From devoops to devops 13 years of (not) learning
 
Help , My Datacenter is on fire
Help , My Datacenter is on fireHelp , My Datacenter is on fire
Help , My Datacenter is on fire
 
Devops is Dead, Long live Devops
Devops is Dead, Long live DevopsDevops is Dead, Long live Devops
Devops is Dead, Long live Devops
 
10 years of #devopsdays, but what have we really learned ?
10 years of #devopsdays, but what have we really learned ? 10 years of #devopsdays, but what have we really learned ?
10 years of #devopsdays, but what have we really learned ?
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
 
Is there a Future for devops ?
Is there a Future for devops   ? Is there a Future for devops   ?
Is there a Future for devops ?
 
10 Years of #devopsdays weirdness
10 Years of #devopsdays weirdness10 Years of #devopsdays weirdness
10 Years of #devopsdays weirdness
 
ADDO 2019: Looking back at over 10 years of Devops
ADDO 2019:    Looking back at over 10 years of DevopsADDO 2019:    Looking back at over 10 years of Devops
ADDO 2019: Looking back at over 10 years of Devops
 
Can we fix dev-oops ?
Can we fix dev-oops ?Can we fix dev-oops ?
Can we fix dev-oops ?
 
Continuous Infrastructure First Ignite Edition
Continuous Infrastructure First  Ignite EditionContinuous Infrastructure First  Ignite Edition
Continuous Infrastructure First Ignite Edition
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
 
Open Source Monitoring in 2019
Open Source Monitoring in 2019 Open Source Monitoring in 2019
Open Source Monitoring in 2019
 
Migrating to Puppet 5
Migrating to Puppet 5Migrating to Puppet 5
Migrating to Puppet 5
 
Repositories as Code
Repositories as CodeRepositories as Code
Repositories as Code
 
Devops is a Security Requirement
Devops is a Security RequirementDevops is a Security Requirement
Devops is a Security Requirement
 
Is there a future for devops ?
Is there a future for devops ?Is there a future for devops ?
Is there a future for devops ?
 
Looking back at 5 years of #cfgmgmtcamp
Looking back at 5 years of #cfgmgmtcampLooking back at 5 years of #cfgmgmtcamp
Looking back at 5 years of #cfgmgmtcamp
 
Pipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as Code
 

Último

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Último (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

Infrastructure as Code Patterns

  • 1. Kris Buytaert @krisbuytaert Infrastructure as Code Patterns StackConf 2022, Berlin
  • 2. • I used to be a developer • Then I became an Ops person • Chief Trolling/Travel/Technical Officer @ Inuits.eu • Chief Yak Shaver @ o11y.eu • Organiser of #devopsdays, #cfgmgmtcamp, #loadays, ... • Everything is a Freaking DNS Problem • Cofounder of all of the above • DNS : devops needs sushi • @krisbuytaert on twitter/github Who am I ? @krisbuytaert
  • 4. A global movement to improve the quality of software delivery leveraging Open Source experiences , started in Gent in 2009 Devops definition @krisbuytaert
  • 5. We love running in circles @krisbuytaert
  • 6. • 1996 : Manual installation • 2001 : Mondo Rescue (reproducable single instance) • 2003 : System Imager , fast reproducable "identical" Infrastructure • Image Sprawl • "Overrides" • 2005 : JeOS + Early IAC (CfEngine / Kickstart / FAI) • 2010 : Desired State infrastructure as code , Puppet, Chef etc • 2015 : Cloud provisioning , Terraform etc .. Deploying an Infrastructure @krisbuytaert
  • 7. • 1 (Snowflake) server • Multiple (snowflake) servers (cluster nodes) • Virtualization • Cloud • Containers 20+ years of changes @krisbuytaert
  • 8. • Manual error • Differences in nodes due to manual changes • Not reproducable • Humans • Scale Some of The problems @krisbuytaert
  • 10. • Manually Crafted Snowflake • Copied and modified • Copied and modified • Impossible to trace origin • Impossible to reproduce • Patching / Security nightmare Image Sprawling & Golden Images vs JeOS @krisbuytaert
  • 11. FROM ubuntu RUN apt-get update RUN apt-get install -y git RUN git clone git@github.com:prometheus/prometheus.git RUN make install What's wrong with this GW-Basic code ? @krisbuytaert
  • 12. Infrastructure as What ? @krisbuytaert
  • 13. • Treat configuration automation as Code • Model your infrastructure • Development best practices • Model your infrastructure • Pipeline your Code • Test your Code Infrastructure as Code @krisbuytaert
  • 14. • Reproducable Environments • You never deploy 1x • Local Test environments • Development / User Acceptance / Testing / Shadow / Production / DR • HA <- Keep cluster configuration in sync • Prevent Configuration drift • Cheap Disaster recovery • ... Infrastructure as Code Goals @krisbuytaert
  • 15. 3 types of tools needed • Provisioning • Desired state • Orchestration 2022 IaC Requirements @krisbuytaert
  • 16. • Create me an instance of application X • Container instance • VM instance • Service X configuration via API e.g Terraform , Pulumi Provisioning @krisbuytaert
  • 17. • Ensure that this file present / service is running • With these permissions • Always / Verified e.g Chef, Puppet, Salt Desired state @krisbuytaert
  • 18. • Non frequent • Trigger action X on resource Y based on characteristics A,B and or C • First do X here then do Y there • One off actions e.g Ansible, Salt, Puppet Bolt Orchestration @krisbuytaert
  • 19. • In computing, an idempotent operation is one that has no additional effect if it is called more than once with the same input parameters. • Not idempotent : echo “root=disabled” >> /etc/someconfigfile Idempodency @krisbuytaert
  • 20. Frequent enforcing desired state with reporting = Automated population of a CMDB (Single source of truth) , with up to date data Side Effect : Having a single source from where to generate dynamic configuration eg. reverse proxy , firewall rules, monitoring configuration, backup configuration IaC & CMDB @krisbuytaert
  • 21. • Do you want a reproducible infrastructure ? • Do you want to reduce manual error ? • Do you want to achieve desired state ? • Do you want to have automated configuration for monitoring, metrics, backups, security etc ? • Do you want to trivially spin up different identical environments (dev/uat/prod/dr) • Do you want to be able to detect and prevent config drift ? • Do you want to prevent image sprawl ? Questions to ask : @krisbuytaert
  • 23. • Code is not in source control • Bolt / Ansible / Terraform is triggered from the admin's local machine • Works for individual admin • Doesn't Scale • Prevents Collaboration Pattern: It works from my homedir @krisbuytaert
  • 24. Improvement over $prev, but still doesn't Scale Collaboration has been improved. Pattern: It works from my workstation but its in git @krisbuytaert
  • 25. • Just the operating System • Maybe some basic services • Application is untouched • Partial source of maybes • Not suitable for derived configuration • Kill your Silos Pattern: We only automate the OS @krisbuytaert
  • 26. • Operating System • Middle Ware • Application Pattern: We automate all the things @krisbuytaert
  • 27. • Package • Config • Service Pattern: PCS @krisbuytaert
  • 28. • PCS • Non Functional Requirements • Monitoring • Backups • External dependencies • Metrics • ... Pattern: PCS NFR @krisbuytaert
  • 29. • Package • Config Files • User Generated Data Pattern: PCS UGC @krisbuytaert
  • 30. Pattern: Reproducable and Scalable Infrastructure @krisbuytaert
  • 31. • Ops use Chef but Devs use Java templating tool or • Terraform but Manual changes from UI. Variants: • Non centralized code base, people run code from local forks undoing changes made by colleagues • Templating tool is not idempotent (ruby sort ? / XML) • Bonus points if the tool restarts a service on a change Pattern: Multiple tools overwrite changes @krisbuytaert
  • 32. • Code is checked into a git repository • The only way to apply is by central user Pattern: Centralised apply , from source control @krisbuytaert
  • 33. • Tool is run once at deploy time then yolo • manual changes afterwards are not identified or reversed • State is not enforced, people are afraid to rerun playbooks • Now we don't dare to update anymore Orchestraition only mode, no desired state AKA Yolo or Integrator mode Pattern: We haven't run it for 6 months @krisbuytaert
  • 34. • Reporting says it's broken, we are not going to fix it • Its been disabled for weeks, local modifications break it • See Config Drift Pattern: It's broken anyhow . @krisbuytaert
  • 35. • X < 120 • Periodically we run ensure the state of our Infrastructure • We prevent config Drift • We actively monitor broken runs • We actively monitor change frequency We have achieved desired state of our infra. Pattern: We run it every X minutes @krisbuytaert
  • 36. • We setup everything, it worked for a while • Then we broke service A , • Then something unrelated broke service B • Automation got blamed • We are not allowed to enable it again • Team X doesn't trust automation, • Often Team X = Security • We manually make the changes now , but we have visibility on drift. • We have semi desired state Pattern: We run it in nooop now @krisbuytaert
  • 37. Pattern: We have a pipeline @krisbuytaert
  • 38. What is an Environment , a stack, a platform ? A logically split of set of servers that together offer a service, Typically existing in dev/uat/prod flavours Environments @krisbuytaert
  • 39. • Limiting Blast radius • Easy to spin up multiple variants • Feature flagged code introduction • And promotion of features • Clear line of ownership (team bound) • Same code , different config per environment • Easier release management Pattern : Using Environments @krisbuytaert
  • 40. • Huge blast radius • Potential Scaling issues • Difficult to "promote" changes • Upgrade everthing or write host based if then case spaghetti • Code duplication : role_app_dev, role_app_uat, role_app_prod Pattern : Not using environments @krisbuytaert
  • 41. • Typically with no environments • Environment specific config is hardcoded • See Config drift Pattern: Config is hardcoded in the code @krisbuytaert
  • 42. • The same codebase is used • Only the config data differs • Multiple Environments possible Pattern: Config Data defines config per environment @krisbuytaert
  • 43. • Code is run • We will see the errors when they happen • Code is not tested Pattern: It we don't test @krisbuytaert
  • 44. • Every config run • Collect information of the run, • Store that information • Be able to query a central source with live, correctly, machine generated data • Reconfigure services based on changes in that data • Full lifecycle • Decomission instance => Automatically Clean out the data Pattern: Single source of truth @krisbuytaert
  • 45. SSOT : e.g Puppet Exported Resources @krisbuytaert
  • 46. • Our Ansible playbook does a git commit to a config repo • That repo gets checked out on the monitoring server • Humans also modify this config • Information is scattered over different tools • you can't leverage the real power of automation , no dynamic reconfiguration of resources therefore configuration is often done manually , but through a tool Pattern: No single source of truth @krisbuytaert
  • 47. We have one repo with all • code • passwords • software binaries Pattern: One repo for all the things @krisbuytaert
  • 48. "Blue printing" Building a UI on top of a provisioning framework is typically an intermediate step before people realize they either need to build in all AAA functionality and buy a bloated tool. Or realize git + Terraform solves these problems in a better way. Pattern: Provisioning from a UI @krisbuytaert
  • 49. • We have written all code in house ? • What do you mean there are modules on github to manage apache ? • We spent about 3 months building our own Pattern: we ignore the existing codebase group @krisbuytaert
  • 50. • Aka We do NOT understand Continuous Integration • We have mapped our environments to git branches • Obviously they are long running • We are cherry picking changes from uat to prod • We don't test those combinations • We are in merge hell now Puppet r10k is an antipattern. So is running your gitops from multiple branches. Pattern: We love Branching @krisbuytaert
  • 51. Puppet & Chef Terraform & Pulumi Pattern: We want a full language @krisbuytaert
  • 52. • All of these people say they are doing infrastructure as Code • Some with 0 real benefit • Find the patterns you like / dislike • Implement or remove the ones you please • My preferences might not fit your use case Lessons Learned @krisbuytaert
  • 53. Kris Buytaert @krisbuytaert kris@inuits.eu Essensteenweg 31 2930 Brasschaat Belgium Contact: info@inuits.eu +32-3-8082105