前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DCOS之Marathon应用拓展篇

DCOS之Marathon应用拓展篇

作者头像
zouyee
发布2021-02-01 15:17:59
5680
发布2021-02-01 15:17:59
举报
文章被收录于专栏:Kubernetes GOKubernetes GO

最近推出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实例

代码语言:javascript
复制
{    
    "id": "simple-docker",     
    "container": 
                        {      
                                "docker": 
                                        {        
                                            "image": "busybox"      
                                            }    
                             },    
       "cmd": "echo hello from docker",    
       "cpus": 0.2,   
       "mem": 32.0,    
       "instances": 2
}

2) entry point的docker实例

代码语言:javascript
复制
{    
    "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

代码语言:javascript
复制
{ 
     "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 先拉取镜像

代码语言:javascript
复制
{  
     "type": "DOCKER",  
     "docker": 
         {    
             "image": "group/image",    
             "forcePullImage": true 
           }
    }

结束语

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DCOS 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档