LOADING

Follow me

DCOS之Marathon应用拓展篇
四月 18, 2016|DCOS

DCOS之Marathon应用拓展篇

DCOS之Marathon应用拓展篇
 

最近推出DCOS之Marathon相关文章,主要介绍DCOS系统选用Marathon作为应用管理工具使用情况,上周我们介绍了应用相关基础知识,接下来请阅读第四遍文章:DCOS之Marathon应用拓展篇

应用的健康检查

    健康检查针对的是App下的每一个Task,Marathon框架通过健康检查来实现应用的故障恢复,健康检查实现了对Task的生命周期的管理。

Marathon将应用的可恢复性与监控检查结合在一起,在状态发现变化时,触发scale操作,保证原有的可用服务的数量,如图3-10所示是Marathon健康检查的状态机。

Task有三种活动状态:健康,非健康和扩展中,状态变化根据逻辑运算进行判定,三个参数主要是:请求实例数i,健康实例数h,运行实例数r。当h=r !=i时,即健康实例数等于运行实例数但不等于请求实例数,运行状态将变为scaling,启动i-r个实例。

Marathon 在健康检查中设置了相关选项,健康检查主要有三种方式:HTTP、TCP、COMMAND,主要选项有以下几种:其中 gracePeriodSeconds、intervalSeconds、MaxConsecutiveFailures、timeoutSeconds 适用于所有检查方式,portIndex、port适用于TCP与HTTP,path、ignoreHttp1xx只适用于HTTP。

1)intervalSeconds:健康检查周期,默认为60s

2)timeoutSeconds:健康检查等待的超时失败时间,默认为20s

3)path:健康检查的请求访问路径,支持HTTP,默认为/

4)gracePeriodSeconds:允许忽略的检查失败最长时间,默认为300s。

5)MaxConsecutiveFailures:规定在多少次健康检查失败后为unhealthy服务,默认为3s

6)protocol:健康检查采用的协议,对于COMMAND,欲使其有效,需要在Marathon启动时设置”–executor health_checks”选项,其表明未明确executor时的默认选择为HTTP

7)portIndex:对服务进行健康检查时,访问的目的端口是host  port,在Marathon中是随机分配的,并且一个服务可以存在多个端口,因此使用portIndex定义健康检查的端口的索引值,默认为0。

8)ignoreHttp1xx:忽略返回状态码100-199,默认为false,健康检查获取的返回码在此范围内,查询结果无效,状态保持不变。

9)command:Marathon 的健康检查基于最初的端口资源规则,对于Docker容器,服务端口即监听端口地址都与此规则不同,例如Docker容器要求像虚机一样有主机的IP,并 且每个服务端口都是特定的,那么这样的情况就需要使用command方式,使用外部命令行实现。下述三个实例分别使用HTTP、TCP和COMMAND实 现健康检查。

应用之间存在依赖关系,依赖关系可以是应用级别的依赖,也可以是应用组级别的依赖,如果是应用组级别的依赖,那么组内的子分组、应用都会等待依赖服务对象可用后才会启动。依赖定义可以表述为相对路径或者绝对路径。

  

应用实例

1)Docker实例

{    
    "id": "simple-docker",     
    "container": 
                        {      
                                "docker": 
                                        {        
                                            "image": "busybox"      
                                            }    
                             },    
       "cmd": "echo hello from docker",    
       "cpus": 0.2,   
       "mem": 32.0,    
       "instances": 2
}

2) entry point的docker实例

{    
    "id": "simple-docker",    
     "container": 
                             {      
                                     "docker":
                                              {        
                                                  "image": "mesosphere/inky"     
                                                   }    
                               },    
      "args": ["hello", "from", "docker"],    
      "cpus": 0.2,   
       "mem": 32.0,  
        "instances": 2
}

Docker 镜像“mesosphere/inky”的Dockerfile定义如下:

FROM busybox

MAINTAINER support@mesosphere.io

CMD [“inky”]

ENTRYPOINT [“echo”]

3)启动一个docker registry,并持久化数据到本地volume

{ 
     "id": "/docker/registry",  
     "instances": 1, 
      "cpus": 0.5, 
       "mem": 1024.0,  
       "disk": 128, 
        "container": 
                {    
                    "docker": 
                            {      
                                    "type": "DOCKER",      
                                    "image": "registry:latest",     
                                     "network": "BRIDGE",     
                                     "parameters": [],    
                                     "portMappings": 
                                                     [        
                                                         {          
                                                             "containerPort": 5000,          
                                                             "hostPort": 0,          
                                                             "protocol": "tcp",          
                                                             "servicePort": 5000        
                                                             }     
                                                        ]    
                                    },    
                           "volumes": 
                                       [      
                                           {      
                                                 "hostPath": "/local/path/to/store/packages",        
                                                 "containerPath": "/storage",        "mode": "RW"      
                                              }   
                                        ]  
                     },  
         "env": {    "SETTINGS_FLAVOR": "local",    "STORAGE_PATH": "/storage"  },
         "ports": [ 0 ]
}

4) Marathon 0.8.2与Mesos 0.22.0支持在启动task前强制docker 先拉取镜像

{  
     "type": "DOCKER",  
     "docker": 
         {    
             "image": "group/image",    
             "forcePullImage": true 
           }
    }
结束语

 

关于DCOS应用相关的文章后续会继续推出,本周即将推出的内容主要包括容器持久化方案、容器存储驱动等存储文章,敬请期待!感谢您对苏研DCOS的关注与支持,努力一直在路上!

no comments
Share

发表评论