zoukankan      html  css  js  c++  java
  • KubernetesDaemonset

    1. 简介

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

    DaemonSet 的一些典型用法:

    • 在每个节点上运行集群守护进程
    • 在每个节点上运行日志收集守护进程
    • 在每个节点上运行监控守护进程

    2. quick start

    2.1 创建ds

    资源模板ds-nginx.yaml信息如下:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nginx-ds
      labels:
        app: nginx
    spec:
      selector:
        # must be match .spec.template.matadata.labels
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          # 污点容忍配置 添加此配置后,ds可以运行到 master 节点
          tolerations:
          # this toleration is to have the daemonset runnable on master nodes
          # remove it if your masters can't run pods
          - key: node-role.kubernetes.io/master
            operator: Exists
            effect: NoSchedule
          containers:
          - name: nginx
            image: nginx
            ports:
            - name: http
              containerPort: 80
    

    创建资源

    $ kubectl create -f ds-nginx.yaml
    

    2.2 查看ds

    查看ds信息

    # kubectl get ds -owide
    $ kubectl get -f ds-nginx.yaml -owide
    NAME       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS   IMAGES   SELECTOR
    nginx-ds   2         2         2       2            2           <none>          19m   nginx        nginx    app=nginx
    

    pod信息如下

    master 和 node 各运行一个pod

    $ kubectl get po -owide
    NAME             READY   STATUS    RESTARTS   AGE   IP               NODE           NOMINATED NODE   READINESS GATES
    nginx-ds-7n8qj   1/1     Running   0          20m   10.100.235.209   k8s-master     <none>           <none>
    nginx-ds-htrvw   1/1     Running   0          20m   10.100.132.168   k8s-woker-01   <none>           <none>
    

    2.3 修改/删除 ds

    ds 修改删除没什么特别的,操作基本和deploy一样,这里就不再赘述,说几点验证过的结论。

    1. 删除ds中某个po后,ds会重新调度给被删除的node上重新生成一个新的pod
    2. 当有新的node加入集群后,ds会给新加入的node创建一个pod

    3. 与 Daemon Pods 通信

    与 DaemonSet 中的 Pod 进行通信的几种可能模式如下:

    • 推送(Push):配置 DaemonSet 中的 Pod,将更新发送到另一个服务,例如统计数据库。 这些服务没有客户端。
    • NodeIP 和已知端口:DaemonSet 中的 Pod 可以使用 hostPort,从而可以通过节点 IP 访问到 Pod。客户端能通过某种方法获取节点 IP 列表,并且基于此也可以获取到相应的端口。
    • DNS:创建具有相同 Pod 选择算符的 headless-services(无头服务), 通过使用 endpoints 资源或从 DNS 中检索到多个 A 记录来发现 DaemonSet。
    • Service:创建具有相同 Pod 选择算符的服务,并使用该服务随机访问到某个节点上的 守护进程(没有办法访问到特定节点)。

    4. 仅在某些节点上运行 Pod

    如果指定了 .spec.template.spec.nodeSelector,DaemonSet 控制器将在能够与 Node 选择算符匹配的节点上创建 Pod。 类似这种情况,可以指定 .spec.template.spec.affinity,之后 DaemonSet 控制器 将在能够与节点亲和性 匹配的节点上创建 Pod。 如果根本就没有指定,则 DaemonSet Controller 将在所有节点上创建 Pod。

  • 相关阅读:
    JS学习之构造函数、原型、原型链
    JS学习之面向对象(面向对象的创建方法,new运算符的工作原理)
    JS学习之事件流
    JS学习之生命周期与垃圾回收机制
    关于在XP操作系统和IIS5.1环境下的MVC环境搭建之IIS错误
    VS2010、.net 4.0下MVC3开发中Code First开发模式的数据迁移小结
    关于MVC3框架下的Jquery异步请求函数的学习心得之一——$.post()
    关于ASP调用存储过程的经典资料转载
    关于windows环境下的IIS 500内部服务器错误的一种解决办法
    接VS2010+Net+MVC3+EF4.1环境下的Code First一文的补充说明
  • 原文地址:https://www.cnblogs.com/ludangxin/p/15721773.html
Copyright © 2011-2022 走看看