Deployment

Service

Daemonset

这种模式就是确保在每个k8s的node节点上创建一个pod实例,有且仅有一个实例。当node被添加到集群中,Pod也被添加上去。当node被从集群移除,这些Pod会被垃圾回收。删除一个DaemonSet将会清理它创建的Pod。

DaemonSet 的典型应用场景有:

  • 在集群的每个节点上运行存储 Daemon,比如 glusterd 或 ceph。
  • 在每个节点上运行日志收集 Daemon,比如 flunentd 或 logstash。
  • 在每个节点上运行监控 Daemon,比如 Prometheus Node Exporter 或 collectd。

其实 Kubernetes 自己就在用 DaemonSet 运行系统组件。执行如下命令:

kubectl get daemonset --namespace=kube-system

kubectl get pods --namespace=kube-system -o wide

可以看到flannel, kube-proxy等以daemonset形式存在的资源

Daemonset对应的属性例如label,镜像如果更新那么需要更新pod. DaemonSet目前有两种升级策略,可以通过.spec.updateStrategy.type指定:

OnDelete: 该策略表示当更新了DaemonSet的模板后,只有手动删除旧的DaemonSet Pod才会创建新的DaemonSet Pod

RollingUpdate: 该策略表示当更新DaemonSet模板后会自动删除旧的DaemonSet Pod并创建新的DaemonSetPod

sidecar 挎斗模式

将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。 使用此模式还可以使用异构组件和技术来构建应用程序。

此模式之所以称作“挎斗”(Sidecar),是因为它类似于三轮摩托车上的挎斗。 在此模式中,挎斗附加到父应用程序,为应用程序提供支持性功能。 此外,挎斗与父应用程序具有相同的生命周期:与父应用程序一起创建,一起停用。 挎斗模式有时也称为搭档模式,这是一种分解模式。

挎斗服务不一定要属于应用程序的一部分,而只是与应用程序相连接。 不管它位于哪个位置,父应用程序都会跟随。挎斗是连同主应用程序一起部署的支持性进程或服务。 以三轮摩托车为例,挎斗附加在一辆三轮摩托车上,每辆三轮摩托车有自身的挎斗。 同样,挎斗服务与其父应用程序具有相同的生命周期。 对于应用程序的每个实例,都会部署一个挎斗实例,并连同应用程序实例一起托管该挎斗实例。

使用挎斗模式的好处包括:

  • 在运行时环境和编程语言方面,挎斗与其主应用程序相互独立,因此,无需为每种语言开发一个挎斗。

  • 挎斗可以访问主应用程序所能访问的资源。 例如,一个挎斗可以监视该挎斗和主应用程序使用的系统资源。

  • 挎斗与主应用程序保持密切的距离,因此两者之间的通信不存在明显的延迟。

  • 即使是对于不提供扩展性机制的应用程序,也仍可以使用挎斗来扩展功能,只需在主应用程序所用的同一主机或子容器中,将挎斗附加为自身的进程即可。

挎斗模式通常与容器一起使用,因而称作挎斗容器或搭档容器。

问题和注意事项

  • 请考虑部署服务、进程或容器时所用的部署和打包格式。 容器特别适合用于挎斗模式。
  • 在设计挎斗服务时,请慎重决定进程间通信机制。 除非达不到性能要求,否则请尽量使用不区分语言或框架的技术。
  • 在将功能放入挎斗之前,请考虑该功能是作为独立的服务还是更传统的守护程序运行更有利。
  • 此外,请考虑是否能够以库的形式或使用传统扩展机制实现功能。 特定于语言的库可能提供更深度的集成和更少的网络开销。

何时使用此模式

在以下情况下使用此模式:

  • 主应用程序使用一组异类语言和框架。 使用不同框架以不同语言编写的应用程序可以使用挎斗服务中的某个组件。
  • 某个组件由远程团队或不同的组织拥有。
  • 某个组件或功能必须共置在应用程序所在的同一台主机上
  • 希望某个服务与主应用程序具有相同的整体生命周期,但同时又能独立更新该服务。
  • 需要精细控制特定资源或组件的资源限制。 例如,想要限制特定组件使用的内存量。 可将组件部署为挎斗,然后独立于主应用程序管理内存用量。
此模式可能不适用于以下情况:
  • 当进程间通信需要优化时。 父应用程序与挎斗服务之间的通信会产生一定的开销,执行调用时存在明显的延迟。频繁通信的接口可能无法接受这种弊端。
  • 在某些小型应用程序中,为每个实例部署挎斗服务所产生的资源开销会抵消隔离所带来的优势。
  • 当服务需要以不同于或独立于主应用程序的方式缩放时。 如果存在这种情况,将功能部署为独立的服务可能更好。

示例

挎斗模式适用于许多方案。 一些常见示例:

  • 基础结构 API。 基础结构开发团队创建了一个连同每个应用程序一起部署的服务,而不是特定于语言的客户端库,来访问基础结构。 该服务作为挎斗加载,为基础结构服务(包括日志记录、环境数据、配置存储、发现、运行状况检查和监视程序服务)提供一个公用层。 挎斗还监视父应用程序的主机环境和进程(或容器),并将信息记录到集中式服务。
  • 管理 NGINX/HAProxy。 将 NGINX 与用于监视环境状态的挎斗服务一起部署,然后,在需要更改状态时更新 NGINX 配置文件并回收进程。
  • 代表挎斗。 将代表服务部署为挎斗。 应用程序通过代表发出调用,后者可处理日志记录、路由、断路、和其他连接相关功能。
  • 卸载代理。 将 NGINX 代理放在 node.js 服务实例的前面,以便为服务提供静态文件内容

Docker 常用模式的更多相关文章

  1. 关于Docker 常用命令

    Docker 常用命令 分类列一下常用的CLI命令 仓库相关 search/ pull / push / login etc. 例:docker pull ubuntu 从仓库下载ubuntuimag ...

  2. docker专题(2):docker常用管理命令(上)

    http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...

  3. Centos7 docker 常用指令

    Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上 一.docker的安装及卸载 1.查看当前系统内核版本: [root@docker ~]# uname - ...

  4. Docker应用二:docker常用命令介绍

     Docker常用命令使用介绍 docker中常用的命令: 1.docker search image_name:搜查镜像 2.docker pull image_name:从镜像库中拉去镜像 3.d ...

  5. 1021 docker常用命令和Jenkins搭建

    docker常用命令 1.镜像管理 docker pull (镜像名) # 默认拉取最新版本的镜像 docker pull (镜像名:版本号) #拉取指定版本的镜像 docker push (镜像名) ...

  6. docker 常用 命令

    http://os.51cto.com/art/201409/451117.htm 2.1 在测试机启动容器,安装ssh docker run -i -t ubuntu /bin/bash #此方式运 ...

  7. Docker 常用命令总结

    Docker 常用命令总结   回到顶部 镜像相关 搜索 docker search *image_name* 下载 docker pull *image_name* 查看 docker images ...

  8. Docker---(3)Docker常用命令

    原文:Docker---(3)Docker常用命令 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn.net/weixin_3 ...

  9. [转帖]Docker常用命令总结

    Docker常用命令总结 http://www.ha97.com/5546.html 发表于: Linux, 互联网, 虚拟化与云计算 | 作者: 博客教主 标签: docker,常用命令,总结 PS ...

随机推荐

  1. .net文件夹上传下载组件

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

  2. pycharm 2018 激活码

    本页面破解不止一种,选择适合你的使用 --------------------------------------------------------------------------------- ...

  3. 数据库应用之--Redis+mysql实现大量数据的读写,以及高并发

    一.开发背景 在项目开发过程中中遇到了以下三个需求: 1. 多个用户同时上传数据: 2. 数据库需要支持同时读写: 3. 1分钟内存储上万条数据: 根据对Mysql的测试情况,遇到以下问题: 1. 最 ...

  4. 编译安装和二进制安装mysql

    二进制安装mysql-5.6.46 mysql二进制安装,已经编译成二进制了,只需要做一些配置即可 [root@localhost ~]$ yum install autoconf libaio -y ...

  5. [loj 2478][luogu P4843]「九省联考 2018」林克卡特树

    传送门 Description 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一 ...

  6. shell脚本编程——生产实战案例

    生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要 ...

  7. Promethues实战-简易教程系列

    1.监控概述 2.Promethues基础 3.Promethues初体验

  8. NPVariant -js传递给NPAPI插件参数在firefox和chrome需要采用不同的获取方式

    原帖地址:http://blog.sina.com.cn/s/blog_4c6631790102wd1o.html 整数参数 typedef struct _NPVariant { NPVariant ...

  9. c语言程序课程设计题目

    <C语言程序设计>课程设计课题表 一.A类 .职工信息管理系统设计 职工信息包括职工号.姓名.性别.年龄.学历.工资.住址.电话等(职工号不重复).试设计一职工信息管理系统,使之能提供以下 ...

  10. Facebook 对 PHP 的改进

    PHP 是传统意义上的解释型语言,而不是编译型语言. 因此,在命令行或 Web 服务器调用解释器解释 PHP 代码之前,PHP 代码就是 PHP 代码.PHP 解释器会解释 PHP 脚本,把代码转换为 ...