范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

一文带你深入Kubernetes中的DeamonSet

  写在前面学习 k8s  遇到整理笔记感觉不管是 dev  还是ops  ,离不开生命周期,钩子,守护进程这些,还是要看看底层的东西.DeamonSet  可以理解为特殊的ReplicaSet  ,即确保每个节点只运行一个pod副本  的pod Set  生命周期  与集群中node  节点的周期相同类似 系统中的守护进程  systemd   等
  人生真难,但不配让我认输 ---------沃金(知乎) daemonset
  DaemonSet   确保全部节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod  。 当有节点从集群移除时,这些Pod  也会被回收。删除DaemonSet  将会删除它创建的所有Pod  。即单实例,每个节点只跑一个pod  DaemonSet应用场景
  DaemonSet 的一些典型用法: 在每个Node上运行一个 GlusterFS存储  或者Ceph存储  的Daemon进程  在每个Node上运行一个 日志采集程序  ,例如Fluentd  或者Logstach  .在每个Node上运行一个 性能监控程序  ,采集该Node  的运行性能数据  ,例如PrometheusNode Exporter  , collectd  , New Relic agent或者Ganglia gmond等。
  一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个 DaemonSet。 一个稍微复杂的用法是为同一种守护进程部署多个 DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。这句话不太懂,以后再研究下
  DaemonSet  的Pod调度策略  与RC类似  ,除了使用系统内置的算法在每台Node上进行调度,也可以在Pod  的定义中使用NodeSelector  或NodeAffinity  来指定满足条件的Node  范围进行调度。
  学习环境准备  [root@vms81.liruilongs.github.io]-[~/ansible]  $dir=k8s-daemonset-create;mkdir $dir;cd $dir  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl config current-context kubernetes-admin@kubernetes  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl  create ns liruilong-dameonset-create namespace/liruilong-dameonset-create created  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl config set-context $(kubectl config current-context) --namespace=liruilong-daemonset-create Context "kubernetes-admin@kubernetes" modified. kubeadm中的deamonset
  使用kubeadm安装的k8s环境中是使用的DaemonSet,calico是网路相关,所有节点都需要有,kube-proxy是代理相关,用于负载均衡等操作  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController]  $kubectl  get ds -A NAMESPACE     NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE kube-system   calico-node   3         3         3       3            3           kubernetes.io/os=linux   4d23h kube-system   kube-proxy    3         3         3       3            3           kubernetes.io/os=linux   4d23h  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController]  $ Demonset的创建
  这里要说明的是 DaemonSet  和deployment  只有在kind  的位置不同,可以拷贝deployment  的模板进行修改apiVersion: apps/v1 kind: DaemonSet metadata:   creationTimestamp: null   labels:     app: myds1   name: myds1 spec:  #replicas: 1   selector:     matchLabels:       app: myds1  #strategy: {}   template:     metadata:       creationTimestamp: null       labels:         app: myds1     spec:       containers:       - image: nginx         name: nginx         resources: {} #status: {}  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl create deployment  myds1 --image=nginx --dry-run=client -o yaml > deamonset.yaml  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $vim deamonset.yaml
  我们创建一个deamonset,当前只有master节点和一个node节点正常工作
  因为master节点有污点,所以会发现这里只允许一个deamonset  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl apply -f deamonset.yaml daemonset.apps/myds1 created  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl  get nodes NAME                         STATUS     ROLES                  AGE     VERSION vms81.liruilongs.github.io   Ready      control-plane,master   4d22h   v1.22.2 vms82.liruilongs.github.io   Ready                       4d22h   v1.22.2 vms83.liruilongs.github.io   NotReady                    4d22h   v1.22.2  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl  get pods NAME          READY   STATUS    RESTARTS   AGE myds1-fbmhp   1/1     Running   0          35s  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $ 节点加入集群自动新增节点pod
  我们在启动一台机器,会发现,新加入的 vms83.liruilongs.github.io  节点自动运行一个deamonset [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl get nodes NAME                         STATUS   ROLES                  AGE     VERSION vms81.liruilongs.github.io   Ready    control-plane,master   4d22h   v1.22.2 vms82.liruilongs.github.io   Ready                     4d22h   v1.22.2 vms83.liruilongs.github.io   Ready                     4d22h   v1.22.2  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl get pods NAME          READY   STATUS    RESTARTS   AGE myds1-prldj   1/1     Running   0          6m13s myds1-pvwm4   1/1     Running   0          10m Deamonset污点节点加入pod
  下面我们从新修改deamonset资源文件,容忍有污点的节点 apiVersion: apps/v1 kind: DaemonSet metadata:   creationTimestamp: null   labels:     app: myds1   name: myds1 spec:  #replicas: 1   selector:     matchLabels:       app: myds1  #strategy: {}   template:     metadata:       creationTimestamp: null       labels:         app: myds1     spec:       terminationGracePeriodSeconds: 0       tolerations:       - operator: Exists       containers:       - image: nginx         name: nginx         resources: {} #status: {}  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl  apply  -f deamonsettaint.yaml daemonset.apps/myds1 created  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl get pods NAME          READY   STATUS              RESTARTS   AGE myds1-8tsnz   0/1     ContainerCreating   0          3s myds1-9l6d9   0/1     ContainerCreating   0          3s myds1-wz44b   0/1     ContainerCreating   0          3s
  会发现每个节点都运行一个deamontset相关的pod  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl describe  nodes vms81.liruilongs.github.io | grep Taint Taints:             node-role.kubernetes.io/master:NoSchedule  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl run pod1 --image=nginx --dry-run=server -o yaml | grep -A 6 terminationGracePeriodSeconds   terminationGracePeriodSeconds: 30   tolerations:   - effect: NoExecute     key: node.kubernetes.io/not-ready     operator: Exists     tolerationSeconds: 300   - effect: NoExecute
  当然,如果我们不想所以有污点的节点都运行deamonset相关pod,那么我们可以使用另一种指定kye的方式 apiVersion: apps/v1 kind: DaemonSet metadata:   creationTimestamp: null   labels:     app: myds1   name: myds1 spec:   selector:     matchLabels:       app: myds1   template:     metadata:       creationTimestamp: null       labels:         app: myds1     spec:       terminationGracePeriodSeconds: 0       tolerations:       - operator: Exists         key: node-role.kubernetes.io/master         effect: "NoSchedule"       containers:       - image: nginx         name: nginx         resources: {}
  会发现deamonset可以运行在master和node节点  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl apply -f deamonsetaint.yaml daemonset.apps/myds1 created  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-daemonset-create]  $kubectl get pods NAME          READY   STATUS              RESTARTS   AGE myds1-f7hbb   0/1     ContainerCreating   0          4s myds1-hksp9   0/1     ContainerCreating   0          4s myds1-nnmzp   0/1     ContainerCreating   0          4s Daemon Pods 是如何被调度的
  DaemonSet   确保所有符合条件的节点都运行该 Pod 的一个副本。 通常,运行 Pod   的节点由 Kubernetes   调度器选择。 不过,DaemonSet Pods   由 DaemonSet   控制器创建和调度。这就带来了以下问题:
  Pod 行为的不一致性:正常 Pod 在被创建后等待调度时处于 Pending 状态, DaemonSet Pods 创建后不会处于 Pending 状态下。
  Pod 抢占 由默认调度器处理。启用抢占后,DaemonSet 控制器将在不考虑 Pod 优先级和抢占 的情况下制定调度决策。这里的默认调度器即k8s中调度器。
  ScheduleDaemonSetPods   允许您使用默认调度器而不是 DaemonSet   控制器来调度 DaemonSets,   方法是将 NodeAffinity   条件而不是 .spec.nodeName   条件添加到 DaemonSet Pods  。 默认调度器接下来将 Pod   绑定到目标主机。
  如果   DaemonSet Pod  的节点亲和性配置已存在,则被替换 (原始的节点亲和性配置在选择目标主机之前被考虑)。 DaemonSet   控制器仅在创建或修改DaemonSet Pod  时执行这些操作, 并且不会更改 DaemonSet   的 spec.template  。nodeAffinity:   requiredDuringSchedulingIgnoredDuringExecution:     nodeSelectorTerms:     - matchFields:       - key: metadata.name         operator: In         values:         - target-host-name 与 Daemon Pods 通信
  DaemonSet 中的 Pod 进行通信的几种可能模式如下:
  推送(Push)  :配置 DaemonSet 中的 Pod,将更新发送到另一个服务,例如统计数据库。 这些服务没有客户端。
  NodeIP 和已知端口  :DaemonSet 中的 Pod 可以使用 hostPort,从而可以通过节点 IP 访问到 Pod。客户端能通过某种方法获取节点 IP 列表,并且基于此也可以获取到相应的端口。
  DNS:创建具有相同   Pod 选择算符的 无头服务, 通过使用 endpoints 资源或从 DNS 中检索到多个 A 记录来发现 DaemonSet。
  Service  :创建具有相同 Pod 选择算符的服务,并使用该服务随机访问到某个节点上的 守护进程(没有办法访问到特定节点)。更新 DaemonSet
  如果节点的标签被修改,DaemonSet 将立刻向新匹配上的节点添加 Pod, 同时删除不匹配的节点上的 Pod。你可以修改 DaemonSet 创建的 Pod。不过并非 Pod 的所有字段都可更新。 下次当某节点(即使具有相同的名称)被创建时,DaemonSet 控制器还会使用最初的模板。
  你可以修改  DaemonSet   创建的 Pod。不过并非 Pod   的所有字段都可更新。 下次当某节点(即使具有相同的名称)被创建时,DaemonSet 控制器还会使用最初的模板。
  您可以删除一个 DaemonSet。如果使用 kubectl 并指定 --cascade=orphan 选项, 则 Pod 将被保留在节点上。接下来如果创建使用相同选择算符的新 DaemonSet, 新的 DaemonSet 会收养已有的 Pod。 如果有 Pod 需要被替换,DaemonSet 会根据其 updateStrategy 来替换。 DaemonSet 的替代方案init 脚本
  直接在节点上启动守护进程(例如使用  init、upstartd  或systemd  )的做法当然是可行的。 不过,基于 DaemonSet   来运行这些进程有如下一些好处:像所运行的其他应用一样, DaemonSet   具备为守护进程提供监控和日志管理的能力。为守护进程和应用所使用的配置语言和工具(如 Pod 模板、kubectl)是相同的。 在资源受限的容器中运行守护进程能够增加守护进程和应用容器的隔离性。 然而,这一点也可以通过在容器中运行守护进程但却不在 Pod 中运行之来实现。 例如,直接基于 Docker 启动。 裸 Pod
  直接创建  Pod  并指定其运行在特定的节点上也是可以的。 然而,DaemonSet 能够替换由于任何原因(例如节点失败、例行节点维护、内核升级) 而被删除或终止的 Pod  。 由于这个原因,你应该使用 DaemonSet 而不是单独创建 Pod。静态 Pod
  通过在一个指定的、受  kubelet   监视的目录下编写文件来创建 Pod   也是可行的。 这类 Pod   被称为静态 Pod。 不像DaemonSet  ,静态 Pod 不受 kubectl   和其它 Kubernetes API   客户端管理。 静态 Pod 不依赖于 API 服务器,这使得它们在启动引导新集群的情况下非常有用。 此外,静态 Pod 在将来可能会被废弃。Deployments
  DaemonSet   与 Deployments   非常类似, 它们都能创建 Pod,并且 Pod   中的进程都不希望被终止(例如,Web 服务器、存储服务器)。建议为无状态的服务使用 Deployments  ,比如前端服务。 对这些服务而言,对副本的数量进行扩缩容、平滑升级,比精确控制 Pod 运行在某个主机上要重要得多。 当需要 Pod   副本总是运行在全部或特定主机上,并且当该 DaemonSet   提供了节点级别的功能(允许其他 Pod 在该特定节点上正确运行)时, 应该使用 DaemonSet。
  例如,网络插件通常包含一个以  DaemonSet   运行的组件。 这个 DaemonSet   组件确保它所在的节点的集群网络正常工作 [root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController]  $kubectl  get ds -A NAMESPACE     NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE kube-system   calico-node   3         3         3       3            3           kubernetes.io/os=linux   4d23h kube-system   kube-proxy    3         3         3       3            3           kubernetes.io/os=linux   4d23h  [root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController]  $

外媒iPhone13系列将配备更大的电池不出意外,苹果将于下个月推出iPhone13系列手机。消息透露称苹果已经批准台积电的第六代工艺为之后的产品大规模生产IPD。未来iPhoneiPad系列的外围芯片将要变得更薄,以便华为mate系列和三星note系列曾经在朋友的朋友圈说过华为出了鸿蒙我就买一台,说到做到在使用上我忽然觉得三星华为就像三国的周瑜诸葛亮,不是要黑谁和谁个人感觉不说它们是谁和谁,苹果像曹操,今天不说苹果十年三星用户,比特币挖矿算力升至全球第三,哈萨克斯坦为何成为矿业投资胜地?哈萨克斯坦正成为除了中国和北美外的第三大比特币淘金圣地,中国矿工已经开始向西大迁徙。据剑桥另类金融中心的数据显示,哈萨克斯坦的比特币挖矿算力占比在今年4月份就已达到8。2,在全球算没等小米MIX4直接入手一加9Pro,个中原由慢慢道来上半年本来就准备换手机的,看来看去不是价格高就是整体表现不符合自己的心意。一直拖到7月末,上一款手机真的无法使用了。此时换手机再次提上日程,没想到此时华为P50系列发布,小米MIX手机屏蔽柜的主要功能有哪些?手机屏蔽柜的主要功能有哪些?下面将由爱特急速科技小编来为大家简单介绍下手机屏蔽柜的主要功能!对于手机屏蔽柜来说,很多机构学校等都需要使用屏蔽设备来确保安全保密,其中手机屏蔽柜等设备任正非再次ampampquot点名批评ampampquot!炸掉华为研发金字塔投千亿研发费解决问题8月12日讯相信大家都知道,华为作为国内实力最强的民营科技巨头,具备了全球领先的科研能力,如今在芯片5G通讯技术手机终端甚至是操作系统领域,都有着超强的研发水准,而就在近日,华为创realmeBook真机泄露定位轻薄本跨屏互联售价4365元8月12日realmeBook正式公布将于8月18日1500发布,这次曝光的是软件部分,realme将推出其PC与手机之间的协同功能,将WindowsAndroid生态融合,实现跨作为手机核心的半导体大脑,你知道多少?在2014年首届世界互联网大会上,主持人问雷军小米未来发展战略,他说目标是五到十年成为世界第一的智能手机公司。主持人马上问苹果的高级副总裁怎么看,他回答非常现实又带着一点讥讽和不屑9大电商平台会员模式全揭秘在今年的618之后,我总结了今年淘宝618的一大关键词会员。你会发现,这次几乎所有商家的消费诱饵都捆绑了品牌会员,用尽了招数拉你入会。其实,不仅是商家在推会员,平台会员在这几年更是无敌是多么寂寞ROG新机皇G352021款评测重构电竞秩序ROGG35升级而来作为无数游戏玩家心目中的信仰品牌,ROG玩家国度代表着超凡的设计和极致的性能。今天为大家带来的正是ROG游戏台式机中的最新旗舰产品ROG光魔G35电AI最强挑战来了!觅影医学人工智能算法大赛启动8月13日,由科创中国联合体指导,腾讯公司联合首都医科大学附属北京同仁医院首都师范大学郑州大学第一附属医院上海市胸科医院上海全景医学影像联合发起的2021觅影医学人工智能算法大赛正
苹果空间音频引擎新专利曝光,将为VR游戏提供更真实音效编译VR陀螺近日,美国专利商标局正式授予苹果一项与空间音频3D音频有关的专利。苹果这项空间音频3D音频授权专利是针对使用苹果新的音频引擎的开发者设计的,旨在为未来的游戏提供令人振奋关于英特尔第十二代架构AlderLake目前所知道的一切AlderLake或者说英特尔第十二代架构是英特尔今年下半年推出的针对台式机笔记本电脑等平台的处理器架构,和之前的架构有多个重大变化,例如新的微架构PCIE5。0总线DDR5内存等始终还是硬件加速好UE5LUMEN光线追踪技术的软硬加速区别日前,EPIC发布了UE5(UnrealEngine5)的早期访问版本,这是该公司的第五代游戏引擎,五表示这一代面向的三维游戏主机世代是第五代,例如XboxSeriesXPlaysIntel下一代CPUAlderLake十四核版实测性能初曝随着新产品研发进度进入下一个阶段,像Intel这类上游厂商都会提前数个月向下游厂商提供测试样品供其做新平台研发验证用,在昨天(周六),GeekBench官网上就出现了这类样品的实测单卡以太坊算力164MHsNVIDIAGA100矿卡性能爆表随着产品线全面更换为LHR锁矿版后,NVIDIA的矿卡布局也正式全面展开,日前就有社交媒体上的网友发布了型号为170HX的规格表,标注的以太坊算力搞到164MHs。250瓦耗电,单4700S让主机和PC有了首次的直接性能对比自从Xbox开启采用x86指令集处理器后,游戏机和PC在过去十多年里已经从IBMCellMIPS等不同的指令集全面向PC靠拢(除了任天堂采用ARM外),除了指令集都一样外,两者在某性能彪悍支持RTX3080Intel野兽峡谷NUC小主机将在9月上市在台北电脑展上,英特尔曾经展示过一台名为BeastCanyon(野兽峡谷)的NUC小主机,这台NUC搭配了基于10纳米制程的TigerLakeB后缀十一代桌面处理器,与现有桌面版本NVIDIA逆转胜?荒野大镖客2最新更新支持DLSS性能提升接近45就在昨天,RocketStart正式发布了荒野大镖客2的更新补丁,该更新补丁除了引入新的游戏模式外,最受瞩目的还是集成了NVIDIA的DLSS支持,透过DLSS技术,NVIDIA图碾压性胜利DDR53200性能实测众所周知,Intel的下一代处理器架构为AdlerLake,它提供了DDR5和DDR4两种内存的支持,对于用户来说,这就存在一个抉择问题,毕竟DDR5内存属于全新规格,首先的问题是带你看懂T系列首款机型vivoT1精准线下的性能机最近vivo带来了全新T系列产品,首款vivoT1定位2000档,搭载骁龙778G平台,整体配置跟iQOOZ5雷同,关于这款机器大家很好奇是怎样的策略,科技头条带着同样的疑问去扒了就这?RTX2070四成性能IntelArc炼金术士独显512EU性能首曝众所周知,Intel将会在明年基于XeHPG的独立显卡,该显卡产品线代号为炼金术士,最高端版本拥有512EU,号称相当于RTX3070。然而就在今天,有社交软件的网友在Geekbe