首页 > 其他分享 >23、DaemonSet-控制器

23、DaemonSet-控制器

时间:2023-03-21 23:00:45浏览次数:36  
标签:master1 kubectl 控制器 23 DaemonSet test pods daemonset

1、基础知识

1.1、简介

DaemonSet能够让所有(或者特定)的节点"精确的"运行同一个pod,它一般应用在集群环境中所有节点都必
须运行的守护进程的场景。
我们在部署k8s环境的时候,网络的部署样式就是基于这种DaemonSet的方式,因为对于网络来说,是所有节
点都必须具备的基本能力,而且不能随意中断,否则的话,节点上的容器通信就会出现问题。

1.2、常用的场景-flannel为例

master1 ~]# kubectl -n kube-system get ds
NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-flannel-ds   5         5         5       5            5           <none>                   5d1h
kube-proxy        5         5         5       5            5           kubernetes.io/os=linux   5d1h

master1 ~]# cat flannel/kube-flannel.yml
apiVersion: apps/v1
kind: DaemonSet

1.3、daemonset常用的服务

当节点加入到K8S集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从K8S集群中被移除,
被DaemonSet调度的pod会被移除,如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删
除。
   在某种程度上,DaemonSet承担了RC的部分功能,它也能保证相关pods持续运行,如果一个
DaemonSet的Pod被杀死、停止、或者崩溃,那么DaemonSet将会重新创建一个新的副本在这台计算节点上。
    
常用于后台支撑服务
 集群存储守护进程,如:glusterd,ceph
 日志收集服务,如:fluentd,logstash
 监控服务,如:Prometheus,collectd

1.4、DaemonSet流程图

1.5、资源清单解析

apiVersion: apps/v1 # API群组及版本
kind: DaemonSet     # 资源类型特有标识
metadata:
  name <string>      # 资源名称,在作用域中要唯一
  namespace <string> # 名称空间;DaemonSet资源隶属名称空间级别
spec:
  minReadySeconds <integer>  # Pod就绪后多少秒内任一容器无crash方可视为“就绪”
  selector <object>  # 标签选择器,必须匹配template字段中Pod模板中的标签
  template <object>  # Pod模板对象;
  revisionHistoryLimit <integer> # 滚动更新历史记录数量,默认为10;
  updateStrategy <Object>        # 滚动更新策略
    type <string>                # 滚动更新类型,可用值有OnDelete和
RollingUpdate;
  rollingUpdate <Object>     # 滚动更新参数,专用于RollingUpdate类型
    maxUnavailable <string>  # 更新期间可比期望的Pod数量缺少的数量或比例

2、实践1-DaemonSet

2.1、需求

之前我们在Node上启动Pod需要在RC中指定replicas的副本数的值,有些情况下,我们需要在所有节点都运行一个Pod,
因为Node数量会变化,所以Pod的副本数使用RC来指定就不合适了,这个时候Daemon Sets就派上了用场。
简单来说,Daemon Sets就是让一个pod在所有的k8s集群节点上都运行一个。

2.2、定义资源清单

cat >daemonset-test.yml<<'EOF'
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-test
spec:
  selector:
    matchLabels:
      app: pod-test
  template:
    metadata:
      labels:
        app: pod-test
    spec:
      containers:
      - name: pod-test
        image: 192.168.10.33:80/k8s/pod_test:v0.2
EOF

2.2.1、应用资源清单

master1 ]# kubectl apply -f daemonset-test.yml 

master1 ]# kubectl get ds
NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset-test   2         2         2       2            2           <none>          3s

master1 ]# kubectl get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
daemonset-test-mhj5l   1/1     Running   0          15s   10.244.3.145   node1   <none>           <none>
daemonset-test-nzjbg   1/1     Running   0          15s   10.244.4.86    node2   <none>           <none>

2.3、DaemonSet对象也支持滚动更新

master1 ]# kubectl set image daemonsets daemonset-test pod-test='192.168.10.33:80/k8s/pod_test:v0.1' &&\
kubectl rollout status daemonset daemonset-test daemonset.apps/daemonset-test image updated Waiting for daemon set "daemonset-test" rollout to finish: 0 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 0 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 of 2 updated pods are available... daemon set "daemonset-test" successfully rolled out

3、实践2-node-exporter所有节点上都部署采集数据的功能

3.1、定义资源配置清单

cat > prometheus-node-exporter.yml<<'EOF'
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-demo
  namespace: default
  labels:
    app: prometheus
    component: node-exporter
spec:
  selector:
    matchLabels:
      app: prometheus
      component: node-exporter
  template:
    metadata:
      name: prometheus-node-exporter
      labels:
        app: prometheus
        component: node-exporter
    spec:
      containers:
      - image: 192.168.10.33:80/k8s/node-exporter:v1.2.2
        name: prometheus-node-exporter
        ports:
        - name: prom-node-exp
          containerPort: 9100
          hostPort: 9100
        livenessProbe:
          tcpSocket:
            port: prom-node-exp
          initialDelaySeconds: 3
        readinessProbe:
          httpGet:
            path: '/metrics'
            port: prom-node-exp
            scheme: HTTP
          initialDelaySeconds: 5
      hostNetwork: true
      hostPID: true
EOF

3.2、应用资源清单

master1 ]# kubectl apply -f prometheus-node-exporter.yml 
daemonset.apps/daemonset-demo created


master1 ]# kubectl get ds
NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset-demo   2         2         0       2            0           <none>          3s


master1 ]# kubectl get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES
daemonset-demo-c9ckn   1/1     Running   0          12s   192.168.10.30   node2   <none>           <none>
daemonset-demo-wcklf   1/1     Running   0          12s   192.168.10.29   node1   <none>           <none>


# 测试访问是否正常
master1 ]# curl -I  192.168.10.30:9100/metrics
HTTP/1.1 200 OK
Content-Type: text/plain; version=0.0.4; charset=utf-8
Date: Tue, 21 Mar 2023 14:51:51 GMT

master1 ]# curl -I  192.168.10.29:9100/metrics
HTTP/1.1 200 OK
Content-Type: text/plain; version=0.0.4; charset=utf-8
Date: Tue, 21 Mar 2023 14:51:58 GMT

标签:master1,kubectl,控制器,23,DaemonSet,test,pods,daemonset
From: https://www.cnblogs.com/ygbh/p/17241655.html

相关文章

  • 2023/3/21
    今天最大的进度,就是配置好安卓的PDF的开源库。之前找了很长时间的开源库,但是往往就是配置依赖的时候死掉。不仅仅需要在build.gradle里面导入依赖。而且还需要在setting.gr......
  • 2023年3.21软工日报
    今天继续优化cp作业,优化成功,最短路径Floyd算法。最后今天尝试安卓端,最后就是那个啥,我调用了api接口高德地图的;  最后cp照: ......
  • 2023-03-21 Trie字典树
    rie字典树也称前缀树prefixtree什么是Trie字典树也称字典树DigitalTree;前缀树PrefixTreeTrie是一个多叉树,通常只用来处理字符串前面几章我们一直在用的都是二叉......
  • 22、Deployment-控制器
    1、基础知识1.1、简介Deployment资源对象在内部使用ReplicaSet来实现Pod的自动化编排。Deployment资源对象不管是在作用、文件定义格式、具体操作等方面都可以看做RC......
  • CorelDRAW Graphics Suite 2023 套件已经发布啦
    ​2023年3月14日14时,全球知名矢量制图及设计软件,CorelDRAWGraphicsSuite2023中文版(以下简称CorelDRAW2023)新品发布会在苏州举行,本次发布会由思杰马克丁软件有......
  • 2023/3/21 组会:ChatGPT 对数据增强的影响及 ChatGPT 的鲁棒性,Dense 和 Document 检索
    前两个也许跟上了,后两个完全没跟上,以后再详细读读吧qwq反正组会跟不上才是正常现象。AugGPT:LeveragingChatGPTforTextDataAugmentation摘要、引言、相关工作当......
  • SMU Spring 2023 Trial Contest Round 1
    A.PrependandAppend如果两段字符不同就可以删掉,如果不能删了就是最初的字符串#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn;stri......
  • SpringMVC-lesson02-hellospringmvc-2023-03-21
    参考网页:https://www.kuangstudy.com/bbs/1618521039124783105第1步:注册web.xml,注册DispatcherServlet<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http:......
  • 2023年3月21日(软件工程日报)
    今天主要内容,完成地铁app主页面及其跳转页面设计,具体情况在第一次结对作业中,之后学习数组适配器适用于纯文本的列表数据,简单适配器适用于带图标的列表数据。然而实际应......
  • wolvctf 2023 zombie xss
    当时做的时候没想到这道题考的是XSS,归结原因在于对nodejs的代码不熟悉。先上源码:bot.js源码就不放了,主要功能概括一下就是点击用户提交的链接,把flag放到cookie里传过去,很......