zoukankan      html  css  js  c++  java
  • Kubernetes组件-DaemonSet

    ⒈简介

      Replicationcontroller和ReplicaSet都用于在Kubermetes集群上部署运行特定数量的pod。但是,当某些情况下我们希望在集群中的每个节点上运行同一个指定的pod就需要更为复杂的操作。
      这些情况包括pod执行系统级别的与基础结构相关的操作。例如,希望在每个节点上运行日志收集器和资源监控器。一个典型的例子就是Kubernetes自己的kube-proxy进程,它需要运行在所有节点上才能使服务工作。

      要在所有集群节点上运行一个pod,需要创建一个DaemonSet对象,DaemonSet确保创建足够的pod,并在自己的节点上部署每个pod,DaemonSet并没有期望副本数的概念。它不需要,因为它的工作是确保一个匹配它选择器的pod在每个节点上运行。如果节点下线,DaemonSet不会在其他地方重新创建pod。但是,当将一个新节点添加到集群中时,DaemonSet会立刻部署一个新的pod实例。如果有人无意中删除了一个pod,那么它也会重新创建一个新的pod。与ReplicaSet一样,DaemonSet 从配置的pod模板创建pod。

    ⒉使用DaemonSet只在特定的节点上运行pod

      默认情况下DaemonSet将在集群中的所有节点上部署pod,除非指定这些pod只在部分节点上运行,这是通过DaemonSet描述文件中pod模板的nodeselector属性指定的。
      DaemonSet中的节点选择器定义了DaemonSet必须将其pod部署到的节点。
      注意:节点可以防止pod被部署到节点上而设置为不可调度的。DaemonSet仍然可以将pod部署到这些节点上,因为无法调度的属性只会被调度器使用,而DaemonSet管理的pod则完全绕过调度器。这是预料之中的,因为DaemonSet的目的是运行系统服务,即使是在不可调度的节点上,系统服务通常也需要运行。

    ⒊定义(创建)DaemonSet

    apiVersion: apps/v1  #指定当前描述文件遵循apps/v1版本的KubernetesAPI
    kind: DaemonSet #我们在描述一个DaemonSet
    metadata:
      name: ssd-monitor  #指定DaemonSet的名称
    spec:
      selector: #pod选择器决定了DaemonSet的操作对象
        matchLabels:
          app: ssd-monitor
      template: #创建新pod所使用的pod模板
        metadata:
          labels:
            app: ssd-monitor #模板中的pod标签显然必须和DaemonSet的标签选择器相匹配,否则控制器将无休止的创建新的pod实例。因为创建新的pod不会使实际的副本数量接近期望的副本数量。为了防止出现这种情况,Kubernetes API服务会校验DaemonSet的定义不会接收错误的配置。
                        #不指定DaemonSet的标签选择器也是一种选择,因为DaemonSet会自动从模板中提取标签,而且描述文件也将更简短
        spec:
          nodeSelector: #pod模板包含一个节点选择器,会选择有disk=ssd标签的节点
            disk: ssd
          containers:
          - name: coreqi
            image: fanqisoft/coreqi
            ports:
            - containerPort: 8080

      创建以上描述文件后使用kubectl命令创建DaemonSet

    kubectl create -f ssd-monitor-daemonset.yaml

      可以使用kubectl get 和 kubectl describe来检查DaemonSet

    #ds是DaemonSet的缩写
    kubectl get ds
    kubectl describe ds

     * 如果节点的标签更改了,那么节点的标签不符合DaemonSet的指定标签,该节点上由DaemonSet创建的pod也会被随之销毁。

    ⒋删除DaemonSet

      使用以下命令删除DaemonSet

    kubectl delete ds {dsName} 

      删除DaemonSet会删除所有的pod。这种情况下是需要列出pod来确认的。

  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/11423802.html
Copyright © 2011-2022 走看看