用Daemon Pod来进行通信

使用Pod来再DaemonSet中通信的手段有:

  • 推的方式:在DaemonSet中的Pod会被配置成发送更新到如状态数据库这样的服务。这些都没有客户端。

  • IP+端口方式:DaemonSet中的Pod可以使用主机端口。因此通过node的IP就可以访问。客户端知道了node的IP,就可以用实现约定配置好的端口进行通信了。

  • DNS方式:用同样的Pod选择器创建一个headless service,可以通过DNS使用终端资源或者获取数据的方式来探测DaemonSets。

  • 服务方式:用同样的Pod选择器来创建一个服务,使用这个服务来与任意一个node的后台进程通信。

更新一个DaemonSet

node标签一旦被改变,DaemonSet会迅速的添加Pod到最新匹配的node上,并且从最新不匹配的node上删除Pod。

修改DaemonSet创建的Pod是可以修改的。但是Pod不允许所有的字段都被更新。而且,DaemonSet控制器会使用原来的模板进行下一次的node创建。

DaemonSet也是可以删除的。如果用kubectl指定了--cascade=false,那Pod就会留在node上。可以用一个不同的模板创建一个新的DaemonSet。当有匹配的标签出现时,可以用不同模板生成的新的DaemonSet来识别出所有已经存在的Pods。如果Pod模板不匹配,则不会修改或者删除Pod。

在Kuberntes版本1.6或以后,可以使用DaemonSet的滚动更新。

DaemonSet的可选项

初始化脚本

直接在node上运行守护进程肯定是可以的(比如使用init,upstartd或者systemd方式来启动)。但是如果使用DaemonSet会有很多好处。

  • 像管理应用一样监控和管理守护进程。

  • 与应用使用相同的配置语言和工具(如Pod templates,Kubectl)

  • 在container里使用资源限制运行守护进程增强了守护线程和app容器的隔离性。然而,这个也可以通过在container而不是pod里运行daemon进程完成。

裸Pod

直接指定node来创建Pod是可以实现的。但是DaemonSet可以自动替换由于任何原因被删除的或者停止的Pod,以防止node挂了或者其他类型的node维护,比如kernel升级。

静态Pod

通过在被Kubelet监听的目录下创建文件的方式生成Pod是可以实现的,它们被称为静态Pod。不像DaemonSet,静态Pod不能被kubectl或者其他K9s API客户端管理。静态Pod不依赖apiserver。一般是集群启动时候用到的。在后续的版本中,静态Pod可能被废弃。

Deployment

DaemonSet与Deployment的相同点是他们都用于创建Pod,这些Pod是不期望被意外停止的。

使用Deployment可以管理无状态服务,如前端服务,它需要扩容和缩容指定的副本数,还可以滚动升级。而使用DaemonSet最重要的是产生一个Pod一直运行在指定的或者全部的宿主机上,或者是需要比其他的Pod先启动的场景。

相关阅读

《两地书》--K8s基础知识

Kubernetes的污点和容忍(上篇)

Kubernetes的污点和容忍(下篇)

Kubernetes的DaemonSet(上篇)

作者简介

作者是一个有美国硅谷、日本东京工作经验,十二年坚持一线写代码的程序媛。坚持原创文章。欢迎技术交流!

Kubernetes的DaemonSet(下篇)的更多相关文章

  1. Kubernetes的DaemonSet(上篇)

    背景 静儿作为美团容器化团队HULK的一员,经常需要和Kubernetes(k8s)打交道.第一次登陆node(宿主机)的时候,发现连续登陆几台都看到了Prometheus-Node-Exporter ...

  2. Kubernetes之DaemonSet控制器

    DaemonSet 简介 DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本.当有 Node 加入集群时,也会为他们新增一个 Pod .当有 Node 从集群移除时,这些 P ...

  3. Kubernetes组件-DaemonSet

    ⒈简介 Replicationcontroller和ReplicaSet都用于在Kubermetes集群上部署运行特定数量的pod.但是,当某些情况下我们希望在集群中的每个节点上运行同一个指定的pod ...

  4. Kubernetes之DaemonSet

    1.DaemonSet在每个节点上运行一个pod K8s中Replicationcontroller和ReplicaSet都用于在Kubernetes集群上运行部署特定数量的pod.但是,当希望pod ...

  5. kubernetes之DaemonSet以及滚动更新

    1.什么是DaemonSet? 1.1DaemonSet是Pod控制器的又一种实现方式,用于在集群中的全部节点上同时运行一份指定的Pod资源副本,后续加入集群的节点也会自动创建一个相关的Pod对象,当 ...

  6. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  7. 关于kubernetes我们还有什么可做的?

    kubernetes在容器编排大战中由于应用的可移植性以及支持混合云/多云部署方式上的灵活性.加上开放可扩展的理念,使得周边社区非常活跃.从既有调研结果看,kubernetes已成为容器编排领域的标准 ...

  8. 【云计算】K8S DaemonSet 每个node上都运行一个pod

    Kubernetes容器集群中的日志系统集成实践 Kubernetes是原生的容器编排管理系统,对于负载均衡.服务发现.高可用.滚动升级.自动伸缩等容器云平台的功能要求有原生支持.今天我分享一下我们在 ...

  9. 8 分钟了解 Kubernetes

    Kubernetes 脱胎于 Google 的 Borg 系统,是一个功能强大的容器编排系统.Kubernetes 及其整个生态系统(工具.模块.插件等)均使用 Go 语言编写,从而构成一套面向 AP ...

随机推荐

  1. Beta 冲刺day 6

    1.昨天的困难,今天解决的进度,以及明天要做的事情 昨天的困难:在导入导出方面遇到了困难,导出的文件不能直接导入. 今天解决的进度:完成了登录页面的背景设计,并再次测试了整个系统的功能. 明天要做的事 ...

  2. 学HTTP协议所要知道的基础知识(微总结)

    1.网络本质 进行资源共享和信息传输. 2.基于网络的应用程序的本质 就是获取数据和传输数据给用户使用. 3.TCP/IP协议栈工作流程 实体层是不属于TCP/IP协议栈的一层.也就是说TCP/IP协 ...

  3. (汇总)os模块以及shutil模块对文件的操作

    ''' # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux ...

  4. Flask入门之开发简单登陆界面

    涉及知识点: render_template() redirect():注意def的函数不要使用这个Python关键字 url_for():可以传参数给动态路由 动态路由 # Sample.py fr ...

  5. 使用伪类before和after

    .content { padding: 20px } .content::before { content: "我是before添加的内容"; font-weight: bold ...

  6. SVN服务器搭建--Subversio与TortoiseSVN的配置安装(Windows)

    1.  Subversio和TortoiseSVN 简介 Subversio简介: Subversion是一个自由,开源的版本控制系统,可以随意地免费下载.修改.以及重新发布. 是一个通用系统,可以管 ...

  7. Maven学习(三)-- 使用Maven构建项目

    摘自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...

  8. C语言可变参数va_list

    一.什么是可变参数 在C语言编程中有时会遇到一些参数个数可变的函数,例如printf(),scanf()函数,其函数原型为: int printf(const char* format,-) int ...

  9. nuget的问题, NuGet 程序包还原失败

    将项目中的packages.config 中引用移除. 1.使用nuget管理器,进行安装 2.下载对应dll,手动引入项目

  10. Render

    render 渲染元素 元素是React应用程序的最小构建块 "根"DOM节点,它内部的所有内容都将由React DOM进行管理 仅使用React构建的App程序通常具有单个Dom ...