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
knifeför att kommunicera med servern och nodernaKan använda
chef-runfö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
knifekan man även hämta community-skrivna kokböckerknife supermarket search apt knife supermarket download aptly
- Kör
chef-clientregelbundet - Hämtar konfiguration från servern
- Exekverar kokböcker
- test and repair
- Med
chef-solokan man köra utan central server
- Gör steg 1-3 i Try Chef Infra (https://jonaseel.se/chef/)
chef-repocookbookreciperesourceattribute
- 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.mdmetadata.rbrecipes/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
cronexecutebash
filepackageapt_packageapt_update
servicetemplateuser
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-reporoles/» 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
knifeladdas allt upp till servern - Noderna kör
chef-clientsom hämtar konfiguration från servern och exekverar recepten cronkan användas för att startachef-clientperiodiskt- Med
knifekan 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-runkö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_listanges, 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
pulli client-server-arkitektur - Men kan även köras med
pushmed 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:mygroupoch har filskyddet-r--r--r-- - skapar en fil med innehållet
"filen ligger på <hostname>"där<hostname>ärweb1,web2ellerlbberoende 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
![[init ab]](/krakan/slides/raw/master/img/b3-tagline.png)
![[me]](/krakan/slides/raw/master/img/mii.png)
![[lingon]](/krakan/slides/raw/master/img/lingon.png)
![[dominoes]](/krakan/slides/raw/master/img/dominoes.png)
![[Chef Attributes]](/krakan/slides/raw/master/img/chef_attributes_table.png)
![[more dominoes]](/krakan/slides/raw/master/img/dominoes2.jpg)