zoukankan      html  css  js  c++  java
  • Kubernetes之DaemonSet控制器

    DaemonSet 简介

    DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

    使用 DaemonSet 的一些典型用法:

    • 运行集群存储 daemon,例如在每个 Node 上运行 glusterdceph
    • 在每个 Node 上运行日志收集 daemon,例如fluentdlogstash
    • 在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond

    一个简单的用法是,在所有的 Node 上都存在一个 DaemonSet,将被作为每种类型的 daemon 使用。 一个稍微复杂的用法可能是,对单独的每种类型的 daemon 使用多个 DaemonSet,但具有不同的标志,和/或对不同硬件类型具有不同的内存、CPU要求。

    kubernetes 自己也在使用DaemonSet 管理自己的组件

    $ kubectl get ds -n kube-system
    NAME          DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE-SELECTOR   AGE
    calico-node   4         4         4         4            4           <none>          34d

    案例:

    #启动一个redis配置一下filebeat

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redis
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: redis
          role: log-store
      template:
        metadata:
          labels:
            app: redis
            role: log-store
        spec:
          containers:
          - name: redis-pod
            image: redis:4.0-alpine
          ports:
          - name: redis
            containerPort: 6379
    
    ---
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: filebeat-ds
      namespace: default
    spec:
      selector:
        matchLabels:
          app: filebeat
          release: all
      template:
        metadata:
          labels:
            app: filebeat
            release: all
        spec:
          containers:
          - name: filebeat-ds-pod
            image: ikubernetes/filebeat:5.6.6-alpine
            env:
            - name: REDIS_HOST
              value: redis.default.svc.cluster.local
            - name: REDIS_LOG_LEVEL
              value: info

    暴露redis端口 供filebeat访问

    $ kubectl expose deployment redis --port=6379

    查看一下服务

    $ kubectl get ds
    NAME          DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE-SELECTOR   AGE
    filebeat-ds   4         4         4         4            4           <none>          12m
    $ kubectl get pods -o wide
    NAME                            READY     STATUS    RESTARTS   AGE       IP            NODE
    filebeat-ds-8tf5v               1/1       Running   0          13m       10.42.2.78    k8s-node01
    filebeat-ds-9fqfv               1/1       Running   0          13m       10.42.0.220   rancher-node
    filebeat-ds-pdc8m               1/1       Running   0          13m       10.42.1.108   k8s-master
    filebeat-ds-v4dct               1/1       Running   0          13m       10.42.3.214   k8s-node02

     滚动更新

     kubectl explain ds.spec.updateStrategy

    默认是 rollingUpdate 是删除式更新

    rollingUpdate 只支持 maxUnavailable  ,因为ds是每个主机上启动一个pod,所以不能有多余节点的启动

    $ kubectl set image ds filebeat-ds filebeat-ds-pod=ikubernetes/filebeat:5.6.7-alpine
    daemonset "filebeat-ds" image updated
  • 相关阅读:
    c#图像处理
    事件机制(复习)
    .net控件Control透明
    什么东西
    btn控件
    Tao 1.2.0图形框架发布
    java 泛型的类型擦除与桥方法
    来博客园的第一篇博文
    fastjson @JSONField
    java文件编译后,出现xx$1.class的原因
  • 原文地址:https://www.cnblogs.com/xzkzzz/p/9553321.html
Copyright © 2011-2022 走看看