【kubernetes】控制器DaemonSet入门及应用

一,概述

DaemonSet(简写 ds)控制器能够确保k8s集群的所有Node节点,都运行一个相同的Pod副本。
当Node节点增加时,该节点也会自动创建一个Pod副本。
当Node节点减少时,该节点也会自动删除这个Pod副本。
当删除DaemonSet时,所有节点上的Pod副本,也会自动删除。

二,原理

DaemonSet控制器会监听K8S中的DaemonSet对象,pod对象,node对象,这些监听对象的变化,会触发syncLoop循环,让K8S集群朝着DaemonSet对象描述的状态演进。

三,场景

  • 集群的每个node节点上运行存储,如:glusterd, ceph等;
  • 集群的每个node节点上运行日志收集组件,如:flunentd,logstash,filebeat 等;
  • 集群的每个node节点上运行监控组件,如:Prometheus,Node Exporter, collectd等。

四,DaemonSet 与 Deployment的区别

Deployment部署副本Pod,可以随机的分布在每个node节点上,部署可多可少,也可为零。
DaemonSet部署副本Pod,每个node节点最多只能运行一个Pod副本。

五,资源清单 常用字段

# kubectl explain ds

apiVersion	<string>   #当前资源使用的api版本,跟VERSION: apps/v1保持一致
kind	    <string>   #资源类型,跟KIND: DaemonSet保持一致
metadata	<Object>   #元数据,定义DaemonSet名字的
spec	    <Object>   #定义容器的
status	    <Object>   #状态信息,不能改
# kubectl explain ds.spec

minReadySeconds	        <integer>   #当新的pod启动几秒种后,再kill掉旧的pod。
revisionHistoryLimit	<integer>   #历史版本
selector	<Object> -required-     #用于匹配pod的标签选择器
template	<Object> -required-     #定义Pod的模板,基于这个模板定义的所有pod是一样的
updateStrategy	         <Object>   #daemonset的升级策略
# kubectl explain ds.spec.template

metadata	<Object>
spec        <Object>

六,案例:部署日志收集组件fluentd

所有node节点,包括master节点,都导入镜像进行安装:fluentd_2_5_1.tar.gz

vim daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet    # 指定资源类型
metadata:
  name: ds-fluedtd
  namespace: kubec-system
  labels:
    app: ds-fluedtd
spec:
  minReadySeconds: 5    # 最小的准备时间为5s
  revisionHistoryLimit: 8    # 更新历史版本 限制8个
  selector:
    matchLabels:
      theapp: pod-fluedtd
      version: v6
  template:
    metadata:
      labels:
        theapp: pod-fluedtd
        version: v6
    spec:
      tolerations:     # 添加容忍
      - key: node-role.kubernetes.io/control-plane  # 容忍master上的污点
        effect: NoSchedule                # 容忍影响和master相同
      containers:
      - name: pod-node
        image: xxxxxx/fluentd:v2.5.1   # 配置正确的fluentd镜像文件
        imagePullPolicy: IfNotPresent  # 本地拉取不成功,会从docker.hub上拉取     
        resources:    # 配置资源
          limits:     # 限制最大配置
            cpu: 500m
            memory: 300Mi
          requests:   # 需求最小配置
            cpu: 300m
            memory: 128Mi
        volumeMounts:
        - name: vol-fluedtd           # 与volumes的值保持相同
          mountPath: /path/to/logs/
      restartPolicy: Always
      volumes:                        
      - name: vol-fluedtd             # 与volumeMounts的name值保持相同
        nfs:                          # 采用nfs存储
          path: /data/volumes
          server: 192.168.40.180
  updateStrategy:        # 指定更新策略
    rollingUpdate:       # 采用滚动更新
      maxSurge: 2        # 最多增加2个
      maxUnavailable: 0  # 最少减少0个
    type: RollingUpdate  # 更新类型为滚动更新,默认值
kubectl get ds -n meidongyan

NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ds-fluedtd   3         3         3       3            3           <none>          132m

至此,安装成功,每个节点均已经部署一个pod副本!

1,Pod定义容忍 master主机上的污点,从而实现在master部署:

在这里插入图片描述

2,更新策略

  • 2-1
# 命令行更新pod
kubectl set image daemonsets [资源名] [容器名]=ikubernetes/filebeat:5.6.6-alpine -n kube-system

# 例如:
kubectl set image daemonsets ds-fluedtd pod-node=ikubernetes/filebeat:5.6.6-alpine -n kube-system
  • 2-2
# kubectl explain ds.spec.updateStrategy

rollingUpdate	<Object>     
type	        <string>

# kubectl explain ds.spec.updateStrategy.rollingUpdate
maxSurge	    <string>
maxUnavailable	<string>

# kubectl explain ds.spec.updateStrategy.type
type的values:
	  - "OnDelete":只有手工删除了DaemonSet创建的Pod副本,新的Pod副本才会被创建 
	  - "RollingUpdate":更新时,日版本的Pod将被自动“杀掉
...
updateStrategy:        # 指定更新策略
  rollingUpdate:       # 采用滚动更新
    maxSurge: 2        # 最多增加2个
    maxUnavailable: 0  # 最少减少0个
  type: RollingUpdate  # 更新类型为滚动更新,默认值
...
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直奔跑在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值