61
Keeping Track of Stateful Infrastructure

keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

Keeping Track of Stateful Infrastructure

Page 2: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

Patrick Meyer #serveradmin on Freenode [email protected] @HerrSpace

Page 3: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

Serveradmin

DNS

Backup

Virtual MachineProvisioning

Puppet

LoadbalancersRouters

Hypervisors

VirtualMachines

Page 4: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

• Virtual Machine Orchestration • Puppet and Serveradmin • Loadbalancing Traffic • PowerDNS and Serveradmin

Page 5: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 6: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 7: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

cpu_modelstring

game_marketstring

Page 8: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

hypervisor

vm

cpu_modelstring

game_marketstring

Page 9: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

hypervisor

vm

cpu_modelstring

hostnamestring

game_marketstring

Page 10: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

hypervisor

vm

cpu_modelstring

hostnamestring

game_marketstring

hypervisorrelation

Page 11: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

hypervisor

vm

cpu_modelstring

hostnamestring

game_marketstring

hypervisorrelation

vmsreverse of hypervisor

Page 12: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

Attribute Value

servertype hypervisor

hostname hv1.example.com

vmsvm1.example.comvm2.example.comvm3.example.com

cpu_model L5640

Hypervisor Object VM Object

Attribute Value

servertype vm

hostname vm1.example.com

hypervisor hv1.example.com

game_market de

Page 13: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

E A V / C R

Attribute Value Relation

ServerObject

ServertypeObjecttype

Page 14: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

AdminapiThe Python Library

Page 15: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

from adminapi.dataset import Queryobj = Query().new_object(servertype='project')obj.update({ 'hostname': 'fosdem-example', 'responsible_admin': ['patrick.meyer'],})obj.commit()

Page 16: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

from adminapi.dataset import Queryfrom adminapi.filters import Anylist(Query( { 'project': 'tempolis', 'game_market': Any('xx', 'xy', 'xz') }, [ 'hostname', 'hypervisor' ]))

[DatasetObject({ 'hypervisor': 'aw-hv-009.ndco.ig.local', 'hostname': 'xx1db.tmp.ig.local', 'object_id': 55875,}, 55875)]

Page 17: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

from adminapi.dataset import Queryfrom adminapi.filters import Anylist(Query( { 'project': 'tempolis', 'game_market': Any('xx', 'xy', 'xz') }, [ ‘hostname', {'hypervisor': ['hostname', 'project']} ]))

[DatasetObject({ 'hypervisor': DatasetObject({ 'project': 'ndco', 'object_id': 10781, 'hostname': 'aw-hv-009.ndco.ig.local' }, 10781), 'object_id': 55875, 'hostname': 'xx1db.tmp.ig.local'}, 55875)]

Page 18: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

from adminapi.dataset import Queryfrom adminapi.filters import Regexpq = Query( { 'hostname': Regexp('fosdem[0-9]+.*') }, [ 'state' ])

for server in q: server['state'] = 'maintenance'

q.commit()

Page 19: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

from adminapi.dataset import Queryfrom adminapi.filters import Regexpserver = Query( { 'hostname': Regexp('fosdem1.*') }).get()

server.delete()server.commit()

Page 20: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

AdminapiThe Executable

Page 21: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

$ adminapi xx1db.tmp.ig.local -a hypervisoraw-hv-009.ndco.ig.local

$ ssh $(adminapi xx1db.tmp.ig.local -a hypervisor)aw-hv-009:~$

Page 22: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

$ adminapi hypervisor=aw-hv-009.ndco.ig.localserver1.project.ig.localserver23.project.ig.local server42.project.ig.local

$ polysh $(adminapi hypervisor=aw-hv-009.ndco.ig.local)ready (3)> cat /etc/debian_versionserver1.project.ig.local : 8.11server23.project.ig.local : 9.6 server42.project.ig.local : 9.6

Page 23: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

$ adminapi 'hostname=regexp(fosdem.*) responsible_admin=patrick.meyer'-a hostname -a hypervisorfosdem3.admin.ig.local aw-hv-009.ndco.ig.localfosdem4.admin.ig.local aw-hv-009.ndco.ig.local

Page 24: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

$ adminapi 'hostname=regexp(fosdem.*)'-a hostname -a state -o object_id-u 'state=maintenance'fosdem3.admin.ig.local maintenancefosdem4.admin.ig.local maintenance

Page 25: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

ServershellThe Webinterface

attr, delattr, setattr, inspect, edit, delete, history,

Page 26: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 27: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 28: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 29: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 30: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 31: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 32: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 33: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 34: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 35: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 36: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 37: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 38: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 39: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 40: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 41: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 42: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration
Page 43: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

IGVMigvm build/delete vm_hostnameigvm migrate vm_hostname [hypervisor_hostname]igvm start/stop/restart vm_hostnameigvm disk-set vm_hostname sizeigvm mem-set vm_hostname sizeigvm vcpu-set vm_hostname countigvm evacuate hv_hostname

Page 44: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

IGVMigvm build/delete vm_hostnameigvm migrate vm_hostname [hypervisor_hostname]igvm start/stop/restart vm_hostnameigvm disk-set vm_hostname sizeigvm mem-set vm_hostname sizeigvm vcpu-set vm_hostname countigvm evacuate hv_hostname

from igvm.commands import vm_build, vcpu_setvm_build('fosdem4.admin.ig.local')vcpu_set('fosdem4.admin.ig.local', 8)

Page 45: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

• Virtual Machine Orchestration • Puppet and Serveradmin • Loadbalancing Traffic • PowerDNS and Serveradmin

Page 46: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

$db_addr = ig::server::query_one({ 'project' => 'west', 'game_market' => 'de', 'game_world' => 1, 'function' => 'db',}, 'intern_ip')

$project_networks = ig::server::query({ 'servertype' => 'project_network', 'project' => 'west',}, ['intern_ip', 'primary_ip6']).reduce([]) |$memo, $net| { $memo + [$net['intern_ip'], $net['primary_ip6']]}

Page 47: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

version: 5hierarchy: - name: ig::server data_hash: ig::server::hiera_backend options: restrict: [...] - hostname - intern_ip - loadbalancer: - hostname - object_id - intern_ip - primary_ip6 - protocol_port - route_network: - object_id - network_type [...]

Page 48: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

class ig::server ( [...] Ig::Server::Hostname $hostname, Ig::Inet $intern_ip, Array[Struct[{ ‘hostname' => Ig::Server::Hostname, ‘object_id' => Integer, ‘intern_ip' => Ig::Inet, ‘primary_ip6' => Optional[Ig::Inet6], ‘protocol_port' => Array[Pattern[/\A[a-z][a-z0-9]*\Z/]], ‘route_network' => Struct[{ 'object_id' => Integer, 'network_type' => String, }], }]] $loadbalancer = [], [...]

Page 49: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

define ig::helper::nrpe_command ( String[1] $command, Ig::Monitoring_check $check = $title,) { concat::fragment { "nrpe_command_${check}": target => $ig::software::nrpe::commands_conf, order => "${check}_0", content => "\ncommand[${check}] = ${command}", } if !($check in $ig::server::monitoring_checks) { ig::server::change_multi_attribute( $ig::server::object_id, 'monitoring_checks', [$check], # <- These will be added [] # <- These will be removed ) }}

Page 50: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

ig::helper::nrpe_command { 'cpu_steal_time': command => "${ig::software::igmonplugins::path}/check_cpu_steal_time.py",}

$ adminapi fosdem1.admin.ig.local -a monitoring_checks | \sed 's/\s\+/\n/g' | grep cpu_steal_timecpu_steal_time

Page 51: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

• Virtual Machine Orchestration • Puppet and Serveradmin • Loadbalancing Traffic • PowerDNS and Serveradmin

Page 52: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

App Servers

Requests

Replies

Req

uests

Rep

lies

HardwareLoadbalancers

Requests

Replies

Page 53: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

App Servers

Requests

Replies Req

uests

Rep

lies

HardwareLoadbalancers

Requests

Page 54: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

loadbalancer

vm loadbalancerrelation

health_check health_checkrelation

protocol_portstring, multi

intern_ipipv4 address

Page 55: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

Attribute Value

servertype loadbalancer

intern_ip 212.72.191.57

protocol_port tcp443tcp80

health_check https.west.hc

Web loadbalancer

Attribute Value

hc_type https

hc_port 443

hc_query HEAD /api/health_check

hc_ok_codes 242

HTTPS Health

Page 56: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

Repmgr Master

Attribute Value

hc_type postgres

hc_port 5432

hc_query SELECT lb_check_write()

hc_user loadbalancer

DB Loadbalancer

Attribute Value

servertype loadbalancer

intern_ip 10.43.8.1

protocol_port tcp5432

health_check postgres.west.hc

Page 57: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

• Virtual Machine Orchestration • Puppet and Serveradmin • Loadbalancing Traffic • PowerDNS and Serveradmin

Page 58: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

CREATE TABLE records ( id BIGSERIAL PRIMARY KEY, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(65535) DEFAULT NULL, ttl INT DEFAULT NULL, [...]);

Page 59: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

create or replace view dns_internal.records as select server.hostname::text as name, case family(server.intern_ip) when 4 then 'A'::text else 'AAAA'::text end as type, host(server.intern_ip) as content from public.server where server.intern_ip is not null[...]

CREATE TABLE records ( id BIGSERIAL PRIMARY KEY, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(65535) DEFAULT NULL, ttl INT DEFAULT NULL, [...]);

Page 60: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

create or replace view dns_internal.records as[...]union all select server.hostname::text as name, 'SSHFP'::text as type, attribute.value::text as content from public.server join public.server_string_attribute as attribute using (server_id) where server.intern_ip is not null and attribute.attribute_id = ‘sshfp'union all[...]

Page 61: keeping track of stateful infrastructure › 2019 › schedule › event › keeping_track_s… · Puppet Loadbalancers Routers Hypervisors Virtual Machines • Virtual Machine Orchestration

#serveradmin on Freenode github.com/innogames/serveradmin github.com/innogames/igvm github.com/innogames/testtool github.com/innogames/polysh