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来确认的。

  • 相关阅读:
    字符输入输出
    每日一例
    每日一例
    结构
    指针数组的初始化
    装箱,拆箱,正则表达式
    数据类型的转换
    怎样让程序不断执行
    SQL练习1关于插入删除,修改,单表查询
    SQLSERVER 总结1
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/11423802.html
Copyright © 2011-2022 走看看