14
Containers and Heat and Health Maintenance Mike Spreitzer IBM Research

Containers, Heat, and Health Maintenance

Embed Size (px)

DESCRIPTION

Lightning talk from the OpenStack NYC meetup on October 8, 2014. http://bit.ly/ibm-os-meetup By Mike Spreitzer Heat is an OpenStack service that allows model based management of virtual infrastructure and software. We'll introduce Heat and show its use to manage Dockers containers with high availability. [10/14 update: Addresses this bug: https://review.openstack.org/#/c/127821/] The content of this talk is a statement from the IBM Research division, not IBM product divisions, and is not a statement from IBM regarding its plans, directions or product intents. Any activities described by this talk are subject to change.

Citation preview

Page 1: Containers, Heat, and Health Maintenance

Containers  and  Heat  and  Health  Maintenance  

Mike  Spreitzer  IBM  Research  

Page 2: Containers, Heat, and Health Maintenance

The  Take-­‐Away  •  You  can  use  Docker  through  Nova  •  Heat  provides  desired-­‐state  based  management  

•  OpenStack  can  do  health  maintenance  today  

Page 3: Containers, Heat, and Health Maintenance

Docker  and  Nova  •  There  is  a  “Docker  driver”  for  Nova  •  Allows  you  to  create/manage  Docker  containers  through  the  normal  API  for  VMs  

•  Special  images  

Page 4: Containers, Heat, and Health Maintenance

Heat  •  A  “template”  is  a  model:  desired  state  – Has  inputs  (“parameters”)  and  outputs  – Has  resources  

•  Most  correspond  to  an  object  in  an  OpenStack  API  •  Some  are  synthePc  things  

–  E.g.,  autoscaling  group  •  Each  has  inputs  (“properPes”)  and  outputs  (“aTributes”)  

•  A  “stack”  is  an  instance  of  a  template  –  Yes,  recursion  allowed  

•  Heat  allows  CRUD  of  stacks  from  templates  

Page 5: Containers, Heat, and Health Maintenance

The  Picture  of  Health  

OS::Neutron::LoadBalancer  

OS::Neutron::Pool  

OS::Nova::Server  

OS::Heat::HARestarter  

OS::Neutron::PoolMember  

OS::Ceilometer::Alarm  OS::Neutron::HealthMonitor  

Page 6: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p1  

heat_template_version: 2013-05-23!description: A container subject to health maintenance!parameters:! image:! type: string! description: Image used for containers! flavor:! type: string! description: flavor used by the containers! default: m1.tiny!

Page 7: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p2  

private_network:! type: string! description:! Name or ID of the network to which! the container will be attached! protocol_port:! type: number! description: port number where container listens! default: 80! pool_id:! type: string! description: LB Pool of which to be a member!

Page 8: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p3  

resources:! server:! type: OS::Nova::Server! properties:! flavor: {get_param: flavor}! image: {get_param: image}! networks:! - {network: {get_param: private_network}}! ! restarter:! type: OS::Heat::HARestarter! properties:! InstanceId: {get_resource: server}!

Page 9: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p4  

member:! type: OS::Neutron::PoolMember! properties:! pool_id: {get_param: pool_id}! address: {get_attr: [server, first_address]}! protocol_port: {get_param: protocol_port}!

Page 10: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p5  (old  version)  

gone_alarm:! type: OS::Ceilometer::Alarm! properties:! description: Detect container being unresponsive! meter_name: network.services.lb.member! statistic: avg! period: 70! evaluation_periods: 2! threshold: 1! alarm_actions: [ {get_attr:! [restarter, AlarmUrl]} ]! matching_metadata: {resource:! {get_resource: member} }! comparison_operator: lt!

Page 11: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p5  (new  version)  

gone_alarm:! type: OS::Ceilometer::Alarm! properties:! description: Detect container being unresponsive! meter_name: network.services.lb.member! statistic: avg! period: 70! evaluation_periods: 2! threshold: 1! alarm_actions: [ {get_attr:! [restarter, AlarmUrl]} ]! query: {field: resource_id, op: eq,! value: {get_resource: member} }! comparison_operator: lt!

Page 12: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p6  

outputs:! ceilometer_query:! value:! str_replace:! template:! ceilometer statistics! -m network.services.lb.member! -q resource_id=memberid -p 70 -a avg! params:! memberid: {get_resource: member}! description:! This is a Ceilometer CLI command that produces! stats similar to those used by the alarm!

Page 13: Containers, Heat, and Health Maintenance

Template  for  a  Container  with  Health  Maintenance,  p7  

restart_url:! value: {get_attr: [restarter, AlarmUrl]}! description: the webhook for the HARestarter! !

Page 14: Containers, Heat, and Health Maintenance

Also  Talk  to  Me  About  •  PaaS  and  IaaS  for  Containers  •  Balancing  an  ASG  across  AZs  •  HolisPc  placement  in  OpenStack