11.DaemonSet的应用编排机制
  IS4yhiOomKTv 2023年11月02日 31 0
DaemonSet的应用编排机制
DaemonSet:在集群中的每个节点上,都要部署一个且只能部署目标应用的一个实例;
           也可以基于标签选择器管控一组Pod副本;
DaemonSet在什么场景中可以用到:
我们使用zabbix监控目标主机的时候,通常在每一个目标主机上面部署一个zabbix.agent,但没必要在一个节点上部署多个,像这种场景下就可以使用DaemonSet
或者kube-proxy、kube-flanner、ProjectCalico、csi-node

常用场景
   ◼ 特定类型的系统化应用,例如kube-proxy,以及Calico网络插件的节点代理calico-node等
   ◼ 集群存储守护进程、集群日志收集守护进程以及节点监控守护进程等
DaemonSet在API格式上与Deployment区别:
与Deployment相似,DaemonSet对象也使用标签选择器和Pod模板,区别之处在于,DaemonSet不需要定义replicas(Pod副本数量),其Pod数量随节点数量而定;


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数量缺少的数量或比例;

示例:prometheus
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-demo
  namespace: default
spec:
  selector:
    matchLabels:
      app: prometheus
      component: node-exporter
  template:
    metadata:
      name: prometheus-node-exporter
      labels:
        app: prometheus
        component: node-exporter
    spec:
      containers:
      - image: prom/node-exporter:v1.4.0
        name: prometheus-node-exporter
        ports:
          - name: prom-node-exp
          containerPort: 9100
          hostPort: 9100
hostNetwork: true
hostPID: true
实际案例
prometheus的pod资源定义
[root@K8s-master01 chapter8]#cat daemonset-demo.yaml 
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: prom/node-exporter:v1.4.0
        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

创建并查看pod
[root@K8s-master01 chapter8]#kubectl apply -f daemonset-demo.yaml 
daemonset.apps/daemonset-demo created
[root@K8s-master01 chapter8]#kubectl get pods -o wide
NAME                             READY   STATUS    RESTARTS       AGE     IP            NODE         NOMINATED NODE   READINESS GATES
daemonset-demo-bztnc             1/1     Running   0              2m11s   10.0.0.105    k8s-node03   <none>           <none>
daemonset-demo-t56r2             1/1     Running   0              2m11s   10.0.0.104    k8s-node02   <none>           <none>
daemonset-demo-zc5fm             1/1     Running   0              2m11s   10.0.0.103    k8s-node01   <none>           <none>

发现每个工作节点运行一个副本,但控制平面节点上没有被部署相应的实例

去访问服务所在的节点,会得到该节点的各种指标  如:进程、cpu核心、磁盘设备等
[root@K8s-master01 ~]#curl 10.0.0.105:9100/metrics

查看daemonset的信息
[root@K8s-master01 ~]#kubectl get daemonset
NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset-demo   3         3         3       3            3           <none>          10h
更新策略
更新策略
   ◼ rollingUpdate:滚动更新,自动触发
   ◼ onDelete:删除时更新,手动触发
   
滚动更新
   ◼ 配置策略:rollingUpdate更新策略支持使用maxUnavailable参数来定义单批次允许更新的最大副本数量
   ◼ 更新方式
      ◆~$ kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ...
      ◆直接更新原配置文件,而后使用“kubectl apply”命令触发更新
      
对上述prometheus版本进行更新
查看daemonset的详细信息
[root@K8s-master01 ~]#kubectl get daemonset -o wide
NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS                 IMAGES                      SELECTOR
daemonset-demo   3         3         3       3            3           <none>          10h   prometheus-node-exporter   prom/node-exporter:v1.4.0   app=prometheus,component=node-exporter

对daemonset下的daemonset-demo pod中的prometheus-node-exporter容器进行镜像更新
[root@K8s-master01 ~]#kubectl set image daemonset daemonset-demo prometheus-node-exporter=prom/node-exporter:latest -n default
daemonset.apps/daemonset-demo image updated

监视更新过程(先删掉一个,更新一个,等就绪了,再更新第二个,因为更新策略默认是maxUnavailable:
其默认更新数量为1个1个滚动更新)
[root@K8s-master01 ~]#kubectl get pods -w
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ozzp9aSSE46S   2023年11月30日   33   0   0 DNSIPPod
  YKMEHzdP8aoh   2023年12月11日   67   0   0 DNSidePod
  eHipUjOuzYYH   2023年11月13日   28   0   0 cssico字段
  zNxK8cIqmu7p   2023年11月19日   34   0   0 ServerAPIPod
  L83A5jZvvg3Q   2023年11月19日   37   0   0 源码包icoredis
  3n45YYmVLV9P   2023年11月13日   20   0   0 ico#includeLine
  ZLGFQDxSRQTs   2023年11月14日   31   0   0 Docker私有仓库Pod