Jonas Linde <jonas.linde@b3.se>
- IT-konsulter sedan 1994
- Infrastruktur
- Systemutveckling
- Ledning och Styrning
- DevOps
- Sedan 2017 en del av B3 Consulting Group
- IT-konsult sedan 1997
- Infrastruktur
- Systemutveckling
- Ledning och Styrning
- DevOps
- Bakgrund
- Övning
- Uppbyggnad
- Exekvering
- Sammanfattning
- Övningar
- CFEngine » 1993
- Puppet » 2005
- Chef » 2009
- Ansible » 2012
- Docker » 2013
- Serverless » 2014
- OpsCode Inc » 2009
- Chef Inc » 2013
- Chef InSpec » securty & compliance
- Chef Habitat » platform-independent build artifacts
- Chef Infra » programvaran Chefs nya namn
- Chef Automate » enterprise platform
- Chef Workstation » command line tools
- Open Source » 2019
- Progress Software Corporation » 2020
- Systems Integration Framework
- Configuration Management and Automation Platform
- Configuration as Code
- Enterprise Automation Stack
- Chef SaaS
- workstation
- server
- nodes
- Centralt lager för kokböcker och metadata
- cookbooks
- roles
- environments
- data_bags
- nodes
- Har ett WebUI
- från början inte Open Source
- men gratis upp till 25 noder
Hanterar servern
Använder
knife
för att kommunicera med servern och nodernaKan använda
chef-run
för att köra ad-hoc på noderchef-workstation
är ett paket att ladda ner från https://chef.io/downloadschefdk
är ett liknande paket byggt av communityn (hopslaget med workstation)Med
knife
kan man även hämta community-skrivna kokböckerknife supermarket search apt knife supermarket download aptly
- Kör
chef-client
regelbundet - Hämtar konfiguration från servern
- Exekverar kokböcker
- test and repair
- Med
chef-solo
kan man köra utan central server
- Gör steg 1-3 i Try Chef Infra (https://jonaseel.se/chef/)
chef-repo
cookbook
recipe
resource
attribute
- Innehåller
roles/
environments/
data_bags/
- Läs mer:
{ "chef_type": "role", "json_class": "Chef::Role", "name": "webserver", "description": "The base role for systems that serve HTTP traffic", "default_attributes": { "apache2": { "listen_ports": [ "80" ] } }, "run_list": [ "recipe[apache2]", "recipe[apache2::mod_ssl]", "role[monitor]" ] }
{ "chef_type": "environment", "json_class": "Chef::Environment", "name": "dev", "description": "Dev Environment", "default_attributes": { "apache2": { "listen_ports": [ "80" ] } }, "cookbook_versions": { "couchdb": "= 11.0.0" } }
data_bags/ sample_bag_1/ sample_item_1_1.json sample_item_1_2.json sample_item_1_3.json sample_bag_2/ sample_item_2_1.json sample_item_2_2.json { // This is a comment "id": "ITEM_NAME", "anykey": "anyvalue" }
- Innehåller
README.md
metadata.rb
recipes/
attributes/
files/
templates/
extensions/
- Läs mer: http://docs.chef.io/cookbooks.html
- En samling resurser
- Kan även innehålla styrkoder
- villkor:
case
,if
,unless
- loopar:
each
- villkor:
- Läs mer: https://docs.chef.io/recipes.html
$ cat webserver/recipes/default.rb # # Cookbook:: webserver # Recipe:: default # # Copyright:: 2018, The Authors, All Rights Reserved. apt_update package 'apache2' template '/var/www/html/index.html' do source 'index.html.erb' end service 'apache2' do action [:enable, :start] end
cron
execute
bash
file
package
apt_package
apt_update
service
template
user
package 'tar' do version '1.16.1' action :install endeller
package 'tar' do version '1.16.1' endeller
package 'tar'
bash 'extract_module' do cwd ::File.dirname(src_filepath) code <<-EOH mkdir -p #{extract_path} tar xzf #{src_filename} -C #{extract_path} mv #{extract_path}/*/* #{extract_path}/ EOH not_if { ::File.exist?(extract_path) } end
execute 'test-nagios-config' do command 'nagios3 --verify-config' action :nothing end template '/etc/nagios3/configures-nagios.conf' do # other parameters notifies :run, 'execute[test-nagios-config]', :delayed endeller
execute 'test-nagios-config' do command 'nagios3 --verify-config' action :nothing subscribes :run, 'template[/etc/nagios3/configures-nagios.conf]', :immediately end
Kommer från
ohai
» verktyg som samlar fakta om nodenattributes/
» i en kokbokrecipes/
» i en kokbokenvironments/
» frånchef-repo
roles/
» frånchef-repo
Exempel:
$ cat cookbooks/starter/attributes/default.rb default["starter_name"] = "Sam Doe" override["system_name"] = "Chef Starter"
Läs mer: https://docs.chef.io/attributes.html
Exempel:
$ cat webserver/templates/index.html.erb <html> <head> <title>Learn Chef Demo</title> </head> <body> <h1>Hello Learn Chef</h1> <p>This is <%=node['hostname']%></p> </body> </html>
- På workstation skrivs kokböcker och roller m.m.
- Med
knife
laddas allt upp till servern - Noderna kör
chef-client
som hämtar konfiguration från servern och exekverar recepten cron
kan användas för att startachef-client
periodiskt- Med
knife
kan manbootstrap
:a en nod
chef-solo
är en lokal Chef-server- Kommandot
'chef-client -z ...'
startar en lokal server- och kör sedan mot den
- Kommandot
chef-run
kör enstaka recept på en eller fler noder
Listan av recept som ska exekveras kan anges
på kommandoraden:
chef-client --runlist "apache2,recipe[apache2::mod_ssl],role[webserver]"
på kommandoraden i cron
i en roll:
"run_list": [ "recipe[apache2]", "recipe[apache2::mod_ssl]", "role[webserver]" ]
Om ingen
run_list
anges, används senaste lyckade exekvering- sparas i
node
-objektet på servern
- sparas i
- Resurser specificeras i recept i kokböcker
- Environments och roller specificerar vilka recept som ska köras
- Attribut kan sättas på många olika sätt
- Avsett att köras med
pull
i client-server-arkitektur - Men kan även köras med
push
med eller utan server
- Kokbokshanteringen är ömtålig
- Attributordningen är hemsk
- Serverbegreppet är gammalmodigt
- Pull-metoden kräver övervakning
- Servern är besvärlig
- Kan hantera hela infrastrukturen
- automatisering
- kontroll
- Pull-metoden ger oberoende körningar
- Kraftfullt språk
- Finns för många OS
- Kan hantera publika moln
- server / verktyg (
pull
/push
) - Ruby / Python
- Ruby / YAML
- IT-chefer / systemadministatörer
- Gör steg 4 och 5 i Try Chef Infra (https://jonaseel.se/chef/)
- städa inte upp förrän senare
- Skriv en enkel egen kokbok som t.ex.
- skapar en fil som ägs av
myuser:mygroup
och har filskyddet-r--r--r--
- skapar en fil med innehållet
"filen ligger på <hostname>"
där<hostname>
ärweb1
,web2
ellerlb
beroende på nod - uppgraderar alla paket på en nod
- skapar en fil som ägs av
- Skaffa en Chef-server
- https://manage.chef.io/signup
- gratis upp till 5 noder och 2 användare
- https://learn.chef.io