Containers, Heat, and Health Maintenance

Preview:

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

Containers  and  Heat  and  Health  Maintenance  

Mike  Spreitzer  IBM  Research  

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

•  OpenStack  can  do  health  maintenance  today  

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  

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  

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  

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!

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!

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}!

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}!

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!

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!

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!

Template  for  a  Container  with  Health  Maintenance,  p7  

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

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

Recommended