【问题标题】:simulate Daemon-set in kubernetes with using Deployment使用 Deployment 模拟 kubernetes 中的 Daemon-set
【发布时间】:2017-11-17 12:35:01
【问题描述】:

我正在尝试使用 Deployment/RC/Replica-set 在 kubernetes 中模拟 Daemon-set。

我想要达到的目标:

作为 daemon-set kind 在每个节点上部署 POD,我想在每个节点上部署 pod,但没有 kind daemonset。

有什么办法吗?找不到合适的方法来做到这一点。

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    您可以通过 hostPort 在 Kubernetes 中使用 Deployment/ReplicaSet 来做到这一点。

    假设您在 Kubernetes 集群中有 4 个节点,您可以创建一个部署或副本集,其 hostPort 和副本数等于集群中的节点数。

    例如,您想在 clustersize 等于 4 的每个节点上运行 nginx pod,然后您在部署/复制集定义中提到主机端口到容器端口。 kubernetes 调度器将无法在同一主机上调度超过 1 个 pod,这样所有节点都至少调度了一个 pod。

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-hello
      labels:  
        tier: frontend
        app: nginx-hello
    spec:
      replicas: 4
      template:
        metadata:
          labels:
            tier: frontend
            app: nginx-hello
        spec:
          containers:
          - name: nginx-hello
            image: nginxdemos/hello
            ports:
            - containerPort: 80
              hostPort: 8088
    

    【讨论】:

    • 您也可以在这个用例中使用基于集合的标签条件在多区域 kubernetes 集群上进行调度 例如,两个区域 zoneA 和 zoneB 中的 2 个节点 environment=production, zone in (zoneA , zoneB)
    • 但是,如果您的node 之一是NotReady,则必须有多个podhostPort 在一个node 中,这必须无法启动第二个pod,因为hostPort已经被占用了。
    • 并且k8s不会在新节点启动新的pod,除非在Ready Nodes的数量发生变化的时候增加或减少replicas
    • 但要求是每个节点调度一个pod。所以即使节点没有准备好,也不会调度pod。
    【解决方案2】:

    您可以在此处查看更多用例

    http://alesnosek.com/blog/2017/02/14/accessing-kubernetes-pods-from-outside-of-the-cluster/

    不能在同一个节点上调度使用相同 hostPort 的两个容器,并且 hostPort 的使用被认为是特权。 因此它有一些限制,例如

    1) 没有。副本数不应超过 no。将耗尽主机端口的节点数:)

    2) 所有主机都必须处于健康状态,这样 schedular 才能在每个主机上调度 pod。

    希望对你有所帮助.....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-16
      • 2019-12-06
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2021-12-18
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多