Rancher v1.2:Swarmkit的实现
来源:互联网 发布:志鸿优化设计 编辑:程序博客网 时间:2024/06/05 07:07
引言
Rancher v1.2更新了之前对Swarm的支持,与Docker一样抛弃了就有的Swarm,选择支持Swarmkit。Swarmkit引擎非常轻量级,由于其内置早Docker Engine中,所以部署起来会非常方便。虽然目前Swarmkit引擎还在不断发展,而且bug也很多,但是它也有其擅长的使用场景,比如简单的CI/CD场景,它会非常灵活简洁。本文将带大家体验一下,Rancher v1.2对Swarmkit的支持。
部署与使用
部署方面秉承Rancher一贯的原则,非常简单,只需要在创建Env时选择Sawrm即可。
Env创建完毕后,会看到多个Infra Service需要创建,这时候和其他引擎一样,我们需要向Env中添加Host。我们知道Swarm的node有两种:Manager和Worker。Rancher创建的Swarm集群默认是3个Manager,多个Manager内有一个是Leader,另外两个备用。这样单个Host出问题,新的Leader会很快选举出来,保证集群的稳定性。比如我添加了两个Host,默认是先添加Manager角色,所以2个Host都会以Manager方式添加,如下图所示:
进入其中一台Host内,查看swarm集群状态,可以看到一个是Leader,另外一个Reachable做备用。
尝试创建一个简单的程序,查看与UI上的联动效果,如图所示:
如果使用Swarmkit的自定义网络方式,情况如何?虽然在UI上显示无IP,但是进入容器内部可以看到overlay对应的网卡,如图所示:
实现原理
那么Rancher是如何来完成Swarmkit的部署和联动呢?Rancher中Swarmkit也是基于Cattle来部署的,根据之前的文章分析,我们可以知道Rancher的基础设施编排的定义都是通过catalog中的infra-templates实现的,Swarmkit比较特殊它是在community-catalog中定义的,如果一直在rancher-catalog中寻找肯定找不到。compose文件中定义了一个service swarmkit-mon,如图所示:
如果探究原理,我们就需要知道swarmkit-mon对应的镜像是如何定义的。rancher/swarmkit这个dockerfile并没有在https://github.com/rancher下面的项目中,这个需要顺藤摸瓜,找到该Dockerfile的维护者(其实也是Rancher的一名员工),最终地址是https://github.com/LLParse/swarmkit-catalog。如图所示:
swarmkit-mon中内置了docker,并映射了Host上的docker.sock,这样可以在swarmkit-mon容器中控制docker创建swarmkit集群。swarmkit-mon的实现比较简单,主要包括两个shell脚本:run.sh负责swarmkit集群的管理和Rancher的联动,agent节点信息需要通过rancher-metadata读取,设置Host Label则直接调用Rancher API;health.sh负责监控swarmkit节点的状态(通过与docker.sock通信读取Swarm.LocalNodeState的状态),并与giddyup协作暴露健康检查端口,这样可以利用Rancher Cattle的healthcheck来保证swarmkit-mon服务的高可用性,每个Host的swarmkit-mon出问题时可以进行自动重建恢复。原理如图:
总结
目前来看,由于Kubernetes的发展的确迅猛,所以Rancher的更多精力都放在K8s上。针对Swarmkit的支持显得略显单薄,但是Swarmkit本身的问题也很多,目前也难以应对复杂场景,所以目前的支持力度应该是足够了。后续对docker1.13版本的Swarmkit支持也在持续迭代中。
原文来源:Rancher Labs
- Rancher v1.2:Swarmkit的实现
- Rancher v1.2新版本亮点解析
- Rancher v1.2:网络架构解读
- 实践指南-快速解锁Rancher v1.2
- Rancher v1.2震撼发布:更优秀的全栈化容器部署与管理平台
- Rancher v1.2基础设施引擎整体架构分析
- Swarm, Swarmkit 和 Swarm模式的比较
- Swarm, Swarmkit 和 Swarm模式的比较
- Rancher:2016的答卷
- Rancher 2.0 的第一印象
- centos7.2安装Rancher
- Rancher v1.3发布:Windows Container来了!
- Docker发布SwarmKit,一线工程师的体验总结
- Rancher的优点及不足
- 【转】Rancher 2.0:K8s之上的Rancher魔法
- rancher下的kubernetes之二:安装rancher和kubernetes
- 【转】Rancher部署Træfik实现微服务的快速发现
- Rancher部署Træfik实现微服务的快速发现
- memcached简介及java使用方法
- Spring中的依赖检查
- 一道简单的Python题
- 翻译Computer Relaying for Power Systems-2nd Edition(Arun G. Phadke, James S. Thorp)
- TMS320C6455的EMIF外部存储器接口
- Rancher v1.2:Swarmkit的实现
- Android ListView默认选中第一项或第N项
- Android中argb颜色值与int互转
- Nginx服务器中使用alias指令设置虚拟目录
- spring-boot-hello-world
- Docker简介
- solr多字段排序
- 搭建Android开发环境(超详细)
- jQuery如何获取选中单选按钮radio的值