SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
"Dziesięć serwerów poproszę!", czyli co może Ci
zaoferować definiowanie infrastruktury jako kodu (IaC)
whoami
Piotr Górni
DevOps Engineer
piotr.gorni@tsh.io
Skąd się wzięło Infrastructure as Code?
czyli słowo wstępu o “unicorn serverach”
Geneza IaC - przykładowa infrastruktura
web1 “Unicorn” web2 “Banshee” db1 “Sinanju”
user: root
logi: /var/log/my_app/app.log
mount: /media/storage1
OS: Debian 7.0 (SysVinit)
cron: nie
user: cruz
logi: /my_app/app.log
mount: /mnt/storage
OS: CentOS 7 (systemd)
cron: tak
db: MSSQL
OS: MS Server 2016
2013 2014
“unicorn/snowflake servers”
“configuration drift”
Geneza IaC - przykładowa obsługa
?
?
?
● w jednym przypadku
aplikacja uruchamiana jest
jako user z
ograniczeniami, w drugim
jako root (źle); logi
aplikacji są niedostępne
dla non-root
● logi są zapisywane w
dwóch różnych miejscach
● mounty są pod innymi
ścieżkami
● na jednym z serwerów jest
cron
● występują dwa różne init
systemy (systemd vs
SysVinit)
● baza w ogóle jest na MS
Server
Geneza IaC - “moodboard” problemów
Brak trasowalności zmian
Brak możliwości szybkiego odtworzenia infrastruktury w razie
wypadku
Brak wersjonowania i
rollbacku
Spalone nie tylko serwery
Możliwość pomyłki przy repetycji
Zespół cieśni
nadgarstka...
Ciężkie do osiągnięcia
skalowanie poziome
Jak działa Infrastructure as Code?
podstawowe koncepty i mechanizmy działania
Infrastructure as Code - rozróżnienie pojęć
configuration orchestration configuration management
apt
install
nodejs
(...)
5k
servers
pls
IaC - configuration management - pull vs push
model “pull”
client-server
model “push”
agentless
server
“master”
node1
(running the agent)
node2
(running the agent)
node1
(no agent!)
node2
(no agent!)
+ szybkość dystrybucji
przy dużej skali
- wymaga utrzymywania mastera
- generuje single point of failure
- wdrożenie nowej konfiguracji co t (s,
min, ...)
+
szybkość
dystrybucji
przy
dużej
skali
-
wymaga
utrzymywania
mastera
-
generuje
single
point
of
failure
-
wdrożenie
nowej
konfiguracji
co
t
(s,
min,
...)
IaC - configuration management - state
local
remote
changes
terraform.tfstate
state backend
changes
terraform.tfstate
sync state
teraz mogę
dodać zasoby
Przegląd narzędzi
dla każdego coś się znajdzie
IaC - configuration orchestration
HashiCorp Terraform (2014)
AWS CloudFormation (2011)
Azure Resource Manager (2014)
Google Cloud Deployment Manager (2015?)
Pulumi (2018)
cloud agnostic
“cloud native”/cloud specific
IaC - configuration orchestration - Terraform
+ open source
+ “dojrzały”, industry standard; ma wsparcie dla setek dostawców usług cloudowych
+ bardzo rozszerzalny; można pisać własne moduły
+ możliwy import istniejącej infrastruktury
- stosunkowo wysoki próg wejścia
- konieczność nauki specjalnego DSL (HCL, tj. HashiCorp
Configuration Language)
- brak automatycznego rollbacku w przypadku dokonania
złych zmian
● pierwsza wersja: 2014
● język: Go
● język plików konfiguracyjnych: HCL
IaC - configuration orchestration - Terraform
provider "aws" {
alias = "us_east_1"
region = "us-east-1"
}
module "my_site" {
# Available inputs: https://github.com/futurice/terraform-utils/tree/master/aws_static_site#inputs
# Check for updates: https://github.com/futurice/terraform-utils/compare/v11.0...master
source = "git::ssh://git@github.com/futurice/terraform-utils.git//aws_static_site?ref=v11.0"
site_domain = "hello.example.com"
}
resource "aws_s3_bucket_object" "my_index" {
bucket = "${module.my_site.bucket_name}"
key = "index.html"
content = "<pre>Hello World!</pre>"
content_type = "text/html; charset=utf-8"
}
output "bucket_name" {
description = "The name of the S3 bucket that's used for hosting the content"
value = "${module.my_site.bucket_name}"
}
Źródło kodu: https://github.com/futurice/terraform-examples/tree/master/aws/aws_static_site
- brak automatycznego rollbacku w przypadku dokonania
złych zmian (wprowadzenie jest rozważane)
- narzędzie młodsze niż Terraform, dokumentacja jest
miejscami niekompletna
IaC - configuration orchestration - Pulumi
+ open source
+ mocny contender - członek CNCF
+ backend do przechowywania stanu (Pulumi Service) za darmo na start
+ potrafi załadować moduły Terraforma, co daje mu duże wsparcie dostawców
usług cloudowych poza tymi, które są tworzone dla niego natywnie
+ możliwy import istniejącej infrastruktury
+ nie wymaga nauki specjalnego języka/DSL, można pisać w ulubionym języku
+ wspiera więcej operacji na klastrach Kubernetesa
● pierwsza wersja: 2018
● język: głównie Go
● język plików konfiguracyjnych: Python,
TypeScript, JavaScript, Go, C#, F#
IaC - configuration orchestration - Pulumi
Źródło kodu: https://www.pulumi.com/docs/tutorials/aws/s3-website/
- vendor locking
IaC - configuration orchestration - cloud specific/native
+ najlepiej “rozumieją” cloudy z których pochodzą
+ bardzo szybko dostają update’y odpowiadające najnowszym resource’om
dostępnym na danych cloudach
AWS CloudFormation (2011)
Azure Resource Manager (2014)
Google Cloud Deployment Manager (2015?)
IaC - configuration management
IaC - configuration management - bezagentowość
agentlessness (bezagentowość)
IaC - configuration management - CFEngine
Fakty:
● pierwsza wersja: 1993
● obecny właściciel: Northern.tech
● języki: C
● język plików konfiguracyjnych: DSL
● mechanizm działania: client-server
PoC
IaC - configuration management - Nix/NixOS
Fakty:
● pierwsza wersja: 2003
● obecny właściciel: NixOS, open-source
● języki: Nix expression language
● język plików konfiguracyjnych: Nix expression language
● mechanizm działania: declarative package manager
OS na bazie CI?
Hold my beer.
IaC - configuration management - NixOS
Źródło kodu: https://en.wikipedia.org/wiki/NixOS
{
boot.loader.grub.device = "/dev/sda";
fileSystems."/".device = "/dev/sda1";
services.sshd.enable = true;
}
IaC - configuration management - Puppet
Fakty:
● pierwsza wersja: 2005
● obecny właściciel: Canonical Ltd.
● języki: Ruby, C++, Clojure
● język plików konfiguracyjnych: Puppet language, Ruby-based
DSL
● nazwy plików konfiguracyjnych: Puppet manifests
● repozytorium plików konfiguracyjnych: Puppet Forge
● mechanizm działania: client-server
Puppetmancing
- wymaga znajomości Ruby’ego do bardziej zaawansowanych zastosowań
- wymaga nauki DSL
- lepszy dla ludzi z backgroundem programistycznym
IaC - configuration management - Puppet
+ stoi za nim znacząca firma
+ dość mocna baza użytkowników, dokumentacja i wsparcie
+ dość mocno rozszerzalny
+ dojrzały, długo na rynku
IaC - configuration management - Puppet
Źródło kodu: https://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules
# execute 'apt-get update'
exec { 'apt-update': # exec resource named 'apt-update'
command => '/usr/bin/apt-get update' # command this resource will run
}
# install apache2 package
package { 'apache2':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}
# ensure apache2 service is running
service { 'apache2':
ensure => running,
}
IaC - configuration management - Chef
Fakty:
● pierwsza wersja: 2009
● obecny właściciel: Progress
● język: Ruby, Erlang
● język plików konfiguracyjnych: DSL oparty na Ruby
● nazwa plików konfiguracyjnych: recipes
● repozytorium plików konfiguracyjnych: Chef Supermarket
● mechanizm działania: it’s complicated
Chef’s kiss… except not
- serwer to zawiły kłębek ElasticSearcha, Erlanga, Ruby’ego…
- bardzo konfundujące sposoby uruchamiania
- dziwne zmiany licencyjne w 2019 i 2020
- używanie funkcji dry-run (nazywanej why-run) jest oficjalnie odradzane przez twórców
narzędzia
- konieczność wgłębienia się choć minimalnie w Ruby
- najbardziej dreaded narzędzie w ankiecie Developer Survey Stack Overflow 2019-2021
- starsze wersje nie są 100% open source
- wymaga nauki DSL
- edytowanie JSONów “z palca”
IaC - configuration management - Chef
+ na rynku od dawna
+ można sporo osiągnąć pisząc zaawansowany kod w Ruby/Ruby-based DSL
IaC - configuration management - Chef
Źródło kodu: https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-chef-recipes
execute "apt-get update" do
command "apt-get update"
end
apt_package "apache2" do
action :install
end
service "apache2" do
action [ :enable, :start ]
end
directory node['main']['doc_root'] do
owner 'www-data'
group 'www-data'
mode '0644'
action :create
end
cookbook_file "#{node['main']['doc_root']}/index.html" do
source 'index.html'
owner 'www-data'
group 'www-data'
action :create
end
IaC - configuration management - Juju
Fakty:
● pierwsza wersja: 2010
● obecny właściciel: Canonical Ltd.
● język: Python, Go
● język plików konfiguracyjnych: YAML + dowolny język
wykonywalny z CLI
● nazwy plików konfiguracyjnych: charms, bundles
● repozytorium plików konfiguracyjnych: Juju Charm Store
● mechanizm działania: client-server
Kolejny wytwór Canonicala...
- niewiele ludzi go używa
- snap od Canonicala też nie jest powszechnie używany
- Canonical ma też Puppeta, czemu po prostu nie używać Puppeta
- wysoki próg wejścia
- dokumentacja pozostawia trochę do życzenia
- nie działa na każdej dystrybucji Linuksa
IaC - configuration management - Juju
+ stoi za nim znacząca firma
IaC - configuration management - Juju
Źródło kodu: https://discourse.charmhub.io/t/writing-your-first-juju-charm/1046
name: vanilla
summary: Vanilla is an open-source, pluggable, themeable, multi-lingual forum.
maintainer: Your Name <your@email.tld>
description: |
Vanilla is designed to deploy and grow small communities to scale.
This charm deploys Vanilla Forums as outlined by the Vanilla Forums installation guide.
tags:
- social
provides:
website:
interface: http
requires:
database:
interface: mysql
#!/bin/bash
set -e # If any command fails, stop execution of the hook with that error
apt-get install -y apache2 php5-cgi php5-mysql curl php5-gd wget libapache2-mod-php5
dl="https://github.com/vanillaforums/Garden/archive/Vanilla_2.0.18.8.tar.gz"
# Grab Vanilla from upstream.
status-set maintenance "Fetching and installing Vanilla"
wget "$dl" -O /tmp/vanilla.tar.gz
# IDEMPOTENCY is very important in all charm hooks, even the install hook.
if [ -f /var/www/vanilla/conf/config.php ]; then
cp /var/www/vanilla/conf/config.php /tmp/
rm -rf /var/www/vanilla
fi
(...)
charm
hook
IaC - configuration management - Salt (SaltStack)
Fakty:
● pierwsza wersja: 2011
● obecny właściciel: VMWare, Inc.
● języki: Python
● język plików konfiguracyjnych: language-agnostic
● nazwy plików konfiguracyjnych: state modules, (…)
● mechanizm działania: both client-server and agentless
Salty?
- stosunkowo młody
- nie mogę znaleźć repozytorium plików konfiguracyjnych
IaC - configuration management - Salt (SaltStack)
+ tryb agentless istnieje
+ oparty na kolejce ZeroMQ - szybszy niż konkurencja
+ wspiera zdalne wykonywanie kodu - node’y nie muszą czekać na pobranie
konfiguracji
+ oficjalne tutoriale wydają się być dość sensowne
IaC - configuration management - SaltStack
Źródło kodu: https://docs.saltproject.io/en/latest/topics/tutorials/walkthrough.html#the-first-sls-formula
nginx:
pkg.installed: []
service.running:
- require:
- pkg: nginx
IaC - configuration management - Ansible
Fakty:
● pierwsza wersja: 2012
● obecny właściciel: RedHat
● język: Python
● język plików konfiguracyjnych: YAML
● nazwa plików konfiguracyjnych: playbooki
● repozytorium plików konfiguracyjnych: Ansible Galaxy
● mechanizm działania: agentless SSH
KISS!
- czasem trzeba się natrudzić, by napisać pewne rzeczy w YAMLu
- mimo wszystko dość młody
- może być wolniejszy niż konkurencja, szczególnie w skali
IaC - configuration management - Ansible
+ z racji prostoty mocny industry standard
+ stoi za nim znacząca firma
+ agentless SSH - prosty i zrozumiały mechanizm działania
+ konfiguracja w YAMLu, który jest to dość czytelny i przyjazny dla developerów
+ spora baza użytkowników
IaC - configuration management - Ansible
Źródło kodu: https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html
---
- name: Update web servers
hosts: webservers
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.yum:
name: httpd
state: latest
- name: Write the apache config file
ansible.builtin.template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
Werdykt
co wybrać?
Czynniki związane z wyborem narzędzia
- rozmiar zespołu developerskiego
- języki znane przez zespół developerski
- zastosowanie - bardzo specyficzna konfiguracja, czy może tylko instalacja
Dockera?
Przyszłość
kryształowa kula

Mais conteúdo relacionado

Mais procurados

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsThe Software House
 
Kubernetes: from zero to be hero
Kubernetes: from zero to be heroKubernetes: from zero to be hero
Kubernetes: from zero to be heroThe Software House
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxDawid Rusnak
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...HighSolutions Sp. z o.o.
 
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aUruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aLaravel Poland MeetUp
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITKamil Grabowski
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Michał Kurzeja
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z CapistranoMichał Szajbe
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGBart Zaremba
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychThe Software House
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Polska
 
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Meet Magento Poland
 
2019.10.08 share con365 2019 open source in azure devops, on the example open...
2019.10.08 share con365 2019 open source in azure devops, on the example open...2019.10.08 share con365 2019 open source in azure devops, on the example open...
2019.10.08 share con365 2019 open source in azure devops, on the example open...Janusz Nowak
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wojciech Barczyński
 

Mais procurados (20)

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.js
 
Kubernetes: from zero to be hero
Kubernetes: from zero to be heroKubernetes: from zero to be hero
Kubernetes: from zero to be hero
 
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
 
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aUruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUG
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornych
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
 
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
 
Środowisko PWA
Środowisko PWAŚrodowisko PWA
Środowisko PWA
 
2019.10.08 share con365 2019 open source in azure devops, on the example open...
2019.10.08 share con365 2019 open source in azure devops, on the example open...2019.10.08 share con365 2019 open source in azure devops, on the example open...
2019.10.08 share con365 2019 open source in azure devops, on the example open...
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
 

Semelhante a “Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infrastruktury jako kodu (IaC)

PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcjiMarcin Kurzyna
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Natalia Stanko
 
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposePrzenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposeMariusz Bąk
 
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comLeszek Mi?
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPROIDEA
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerLukas Lesniewski
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerKamil Grabowski
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na AndroidzieDaftcode
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł StefańskiPLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł StefańskiPROIDEA
 
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...PROIDEA
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.jsWojciech Kaniuka
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP3camp
 
PLNOG 18 - Marcin Motylski - Budowa wirtualnego Data Center
PLNOG 18 - Marcin Motylski - Budowa wirtualnego Data CenterPLNOG 18 - Marcin Motylski - Budowa wirtualnego Data Center
PLNOG 18 - Marcin Motylski - Budowa wirtualnego Data CenterPROIDEA
 

Semelhante a “Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infrastruktury jako kodu (IaC) (20)

PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010
 
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposePrzenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
 
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
 
Od Zera do Farmera
Od Zera do FarmeraOd Zera do Farmera
Od Zera do Farmera
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
 
Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na Androidzie
 
Docker
DockerDocker
Docker
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł StefańskiPLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
PLNOG16: Integracja Ceph w OpenStack - status i przyszłość, Paweł Stefański
 
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
PLNOG 18 - Marcin Motylski - Budowa wirtualnego Data Center
PLNOG 18 - Marcin Motylski - Budowa wirtualnego Data CenterPLNOG 18 - Marcin Motylski - Budowa wirtualnego Data Center
PLNOG 18 - Marcin Motylski - Budowa wirtualnego Data Center
 

Mais de The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeThe Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSThe Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptThe Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptThe Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychThe Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case studyThe Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejThe Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachThe Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsThe Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeThe Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduThe Software House
 

Mais de The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infrastruktury jako kodu (IaC)

  • 1. "Dziesięć serwerów poproszę!", czyli co może Ci zaoferować definiowanie infrastruktury jako kodu (IaC)
  • 3. Skąd się wzięło Infrastructure as Code? czyli słowo wstępu o “unicorn serverach”
  • 4. Geneza IaC - przykładowa infrastruktura web1 “Unicorn” web2 “Banshee” db1 “Sinanju” user: root logi: /var/log/my_app/app.log mount: /media/storage1 OS: Debian 7.0 (SysVinit) cron: nie user: cruz logi: /my_app/app.log mount: /mnt/storage OS: CentOS 7 (systemd) cron: tak db: MSSQL OS: MS Server 2016 2013 2014 “unicorn/snowflake servers” “configuration drift”
  • 5. Geneza IaC - przykładowa obsługa ? ? ? ● w jednym przypadku aplikacja uruchamiana jest jako user z ograniczeniami, w drugim jako root (źle); logi aplikacji są niedostępne dla non-root ● logi są zapisywane w dwóch różnych miejscach ● mounty są pod innymi ścieżkami ● na jednym z serwerów jest cron ● występują dwa różne init systemy (systemd vs SysVinit) ● baza w ogóle jest na MS Server
  • 6. Geneza IaC - “moodboard” problemów Brak trasowalności zmian Brak możliwości szybkiego odtworzenia infrastruktury w razie wypadku Brak wersjonowania i rollbacku Spalone nie tylko serwery Możliwość pomyłki przy repetycji Zespół cieśni nadgarstka... Ciężkie do osiągnięcia skalowanie poziome
  • 7. Jak działa Infrastructure as Code? podstawowe koncepty i mechanizmy działania
  • 8. Infrastructure as Code - rozróżnienie pojęć configuration orchestration configuration management apt install nodejs (...) 5k servers pls
  • 9. IaC - configuration management - pull vs push model “pull” client-server model “push” agentless server “master” node1 (running the agent) node2 (running the agent) node1 (no agent!) node2 (no agent!) + szybkość dystrybucji przy dużej skali - wymaga utrzymywania mastera - generuje single point of failure - wdrożenie nowej konfiguracji co t (s, min, ...) + szybkość dystrybucji przy dużej skali - wymaga utrzymywania mastera - generuje single point of failure - wdrożenie nowej konfiguracji co t (s, min, ...)
  • 10. IaC - configuration management - state local remote changes terraform.tfstate state backend changes terraform.tfstate sync state teraz mogę dodać zasoby
  • 11. Przegląd narzędzi dla każdego coś się znajdzie
  • 12. IaC - configuration orchestration HashiCorp Terraform (2014) AWS CloudFormation (2011) Azure Resource Manager (2014) Google Cloud Deployment Manager (2015?) Pulumi (2018) cloud agnostic “cloud native”/cloud specific
  • 13. IaC - configuration orchestration - Terraform + open source + “dojrzały”, industry standard; ma wsparcie dla setek dostawców usług cloudowych + bardzo rozszerzalny; można pisać własne moduły + możliwy import istniejącej infrastruktury - stosunkowo wysoki próg wejścia - konieczność nauki specjalnego DSL (HCL, tj. HashiCorp Configuration Language) - brak automatycznego rollbacku w przypadku dokonania złych zmian ● pierwsza wersja: 2014 ● język: Go ● język plików konfiguracyjnych: HCL
  • 14. IaC - configuration orchestration - Terraform provider "aws" { alias = "us_east_1" region = "us-east-1" } module "my_site" { # Available inputs: https://github.com/futurice/terraform-utils/tree/master/aws_static_site#inputs # Check for updates: https://github.com/futurice/terraform-utils/compare/v11.0...master source = "git::ssh://git@github.com/futurice/terraform-utils.git//aws_static_site?ref=v11.0" site_domain = "hello.example.com" } resource "aws_s3_bucket_object" "my_index" { bucket = "${module.my_site.bucket_name}" key = "index.html" content = "<pre>Hello World!</pre>" content_type = "text/html; charset=utf-8" } output "bucket_name" { description = "The name of the S3 bucket that's used for hosting the content" value = "${module.my_site.bucket_name}" } Źródło kodu: https://github.com/futurice/terraform-examples/tree/master/aws/aws_static_site
  • 15. - brak automatycznego rollbacku w przypadku dokonania złych zmian (wprowadzenie jest rozważane) - narzędzie młodsze niż Terraform, dokumentacja jest miejscami niekompletna IaC - configuration orchestration - Pulumi + open source + mocny contender - członek CNCF + backend do przechowywania stanu (Pulumi Service) za darmo na start + potrafi załadować moduły Terraforma, co daje mu duże wsparcie dostawców usług cloudowych poza tymi, które są tworzone dla niego natywnie + możliwy import istniejącej infrastruktury + nie wymaga nauki specjalnego języka/DSL, można pisać w ulubionym języku + wspiera więcej operacji na klastrach Kubernetesa ● pierwsza wersja: 2018 ● język: głównie Go ● język plików konfiguracyjnych: Python, TypeScript, JavaScript, Go, C#, F#
  • 16. IaC - configuration orchestration - Pulumi Źródło kodu: https://www.pulumi.com/docs/tutorials/aws/s3-website/
  • 17. - vendor locking IaC - configuration orchestration - cloud specific/native + najlepiej “rozumieją” cloudy z których pochodzą + bardzo szybko dostają update’y odpowiadające najnowszym resource’om dostępnym na danych cloudach AWS CloudFormation (2011) Azure Resource Manager (2014) Google Cloud Deployment Manager (2015?)
  • 18. IaC - configuration management
  • 19. IaC - configuration management - bezagentowość agentlessness (bezagentowość)
  • 20. IaC - configuration management - CFEngine Fakty: ● pierwsza wersja: 1993 ● obecny właściciel: Northern.tech ● języki: C ● język plików konfiguracyjnych: DSL ● mechanizm działania: client-server PoC
  • 21. IaC - configuration management - Nix/NixOS Fakty: ● pierwsza wersja: 2003 ● obecny właściciel: NixOS, open-source ● języki: Nix expression language ● język plików konfiguracyjnych: Nix expression language ● mechanizm działania: declarative package manager OS na bazie CI? Hold my beer.
  • 22. IaC - configuration management - NixOS Źródło kodu: https://en.wikipedia.org/wiki/NixOS { boot.loader.grub.device = "/dev/sda"; fileSystems."/".device = "/dev/sda1"; services.sshd.enable = true; }
  • 23. IaC - configuration management - Puppet Fakty: ● pierwsza wersja: 2005 ● obecny właściciel: Canonical Ltd. ● języki: Ruby, C++, Clojure ● język plików konfiguracyjnych: Puppet language, Ruby-based DSL ● nazwy plików konfiguracyjnych: Puppet manifests ● repozytorium plików konfiguracyjnych: Puppet Forge ● mechanizm działania: client-server Puppetmancing
  • 24. - wymaga znajomości Ruby’ego do bardziej zaawansowanych zastosowań - wymaga nauki DSL - lepszy dla ludzi z backgroundem programistycznym IaC - configuration management - Puppet + stoi za nim znacząca firma + dość mocna baza użytkowników, dokumentacja i wsparcie + dość mocno rozszerzalny + dojrzały, długo na rynku
  • 25. IaC - configuration management - Puppet Źródło kodu: https://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules # execute 'apt-get update' exec { 'apt-update': # exec resource named 'apt-update' command => '/usr/bin/apt-get update' # command this resource will run } # install apache2 package package { 'apache2': require => Exec['apt-update'], # require 'apt-update' before installing ensure => installed, } # ensure apache2 service is running service { 'apache2': ensure => running, }
  • 26. IaC - configuration management - Chef Fakty: ● pierwsza wersja: 2009 ● obecny właściciel: Progress ● język: Ruby, Erlang ● język plików konfiguracyjnych: DSL oparty na Ruby ● nazwa plików konfiguracyjnych: recipes ● repozytorium plików konfiguracyjnych: Chef Supermarket ● mechanizm działania: it’s complicated Chef’s kiss… except not
  • 27. - serwer to zawiły kłębek ElasticSearcha, Erlanga, Ruby’ego… - bardzo konfundujące sposoby uruchamiania - dziwne zmiany licencyjne w 2019 i 2020 - używanie funkcji dry-run (nazywanej why-run) jest oficjalnie odradzane przez twórców narzędzia - konieczność wgłębienia się choć minimalnie w Ruby - najbardziej dreaded narzędzie w ankiecie Developer Survey Stack Overflow 2019-2021 - starsze wersje nie są 100% open source - wymaga nauki DSL - edytowanie JSONów “z palca” IaC - configuration management - Chef + na rynku od dawna + można sporo osiągnąć pisząc zaawansowany kod w Ruby/Ruby-based DSL
  • 28. IaC - configuration management - Chef Źródło kodu: https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-chef-recipes execute "apt-get update" do command "apt-get update" end apt_package "apache2" do action :install end service "apache2" do action [ :enable, :start ] end directory node['main']['doc_root'] do owner 'www-data' group 'www-data' mode '0644' action :create end cookbook_file "#{node['main']['doc_root']}/index.html" do source 'index.html' owner 'www-data' group 'www-data' action :create end
  • 29. IaC - configuration management - Juju Fakty: ● pierwsza wersja: 2010 ● obecny właściciel: Canonical Ltd. ● język: Python, Go ● język plików konfiguracyjnych: YAML + dowolny język wykonywalny z CLI ● nazwy plików konfiguracyjnych: charms, bundles ● repozytorium plików konfiguracyjnych: Juju Charm Store ● mechanizm działania: client-server Kolejny wytwór Canonicala...
  • 30. - niewiele ludzi go używa - snap od Canonicala też nie jest powszechnie używany - Canonical ma też Puppeta, czemu po prostu nie używać Puppeta - wysoki próg wejścia - dokumentacja pozostawia trochę do życzenia - nie działa na każdej dystrybucji Linuksa IaC - configuration management - Juju + stoi za nim znacząca firma
  • 31. IaC - configuration management - Juju Źródło kodu: https://discourse.charmhub.io/t/writing-your-first-juju-charm/1046 name: vanilla summary: Vanilla is an open-source, pluggable, themeable, multi-lingual forum. maintainer: Your Name <your@email.tld> description: | Vanilla is designed to deploy and grow small communities to scale. This charm deploys Vanilla Forums as outlined by the Vanilla Forums installation guide. tags: - social provides: website: interface: http requires: database: interface: mysql #!/bin/bash set -e # If any command fails, stop execution of the hook with that error apt-get install -y apache2 php5-cgi php5-mysql curl php5-gd wget libapache2-mod-php5 dl="https://github.com/vanillaforums/Garden/archive/Vanilla_2.0.18.8.tar.gz" # Grab Vanilla from upstream. status-set maintenance "Fetching and installing Vanilla" wget "$dl" -O /tmp/vanilla.tar.gz # IDEMPOTENCY is very important in all charm hooks, even the install hook. if [ -f /var/www/vanilla/conf/config.php ]; then cp /var/www/vanilla/conf/config.php /tmp/ rm -rf /var/www/vanilla fi (...) charm hook
  • 32. IaC - configuration management - Salt (SaltStack) Fakty: ● pierwsza wersja: 2011 ● obecny właściciel: VMWare, Inc. ● języki: Python ● język plików konfiguracyjnych: language-agnostic ● nazwy plików konfiguracyjnych: state modules, (…) ● mechanizm działania: both client-server and agentless Salty?
  • 33. - stosunkowo młody - nie mogę znaleźć repozytorium plików konfiguracyjnych IaC - configuration management - Salt (SaltStack) + tryb agentless istnieje + oparty na kolejce ZeroMQ - szybszy niż konkurencja + wspiera zdalne wykonywanie kodu - node’y nie muszą czekać na pobranie konfiguracji + oficjalne tutoriale wydają się być dość sensowne
  • 34. IaC - configuration management - SaltStack Źródło kodu: https://docs.saltproject.io/en/latest/topics/tutorials/walkthrough.html#the-first-sls-formula nginx: pkg.installed: [] service.running: - require: - pkg: nginx
  • 35. IaC - configuration management - Ansible Fakty: ● pierwsza wersja: 2012 ● obecny właściciel: RedHat ● język: Python ● język plików konfiguracyjnych: YAML ● nazwa plików konfiguracyjnych: playbooki ● repozytorium plików konfiguracyjnych: Ansible Galaxy ● mechanizm działania: agentless SSH KISS!
  • 36. - czasem trzeba się natrudzić, by napisać pewne rzeczy w YAMLu - mimo wszystko dość młody - może być wolniejszy niż konkurencja, szczególnie w skali IaC - configuration management - Ansible + z racji prostoty mocny industry standard + stoi za nim znacząca firma + agentless SSH - prosty i zrozumiały mechanizm działania + konfiguracja w YAMLu, który jest to dość czytelny i przyjazny dla developerów + spora baza użytkowników
  • 37. IaC - configuration management - Ansible Źródło kodu: https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html --- - name: Update web servers hosts: webservers remote_user: root tasks: - name: Ensure apache is at the latest version ansible.builtin.yum: name: httpd state: latest - name: Write the apache config file ansible.builtin.template: src: /srv/httpd.j2 dest: /etc/httpd.conf
  • 39. Czynniki związane z wyborem narzędzia - rozmiar zespołu developerskiego - języki znane przez zespół developerski - zastosowanie - bardzo specyficzna konfiguracja, czy może tylko instalacja Dockera?