gpt4 book ai didi

docker - 如果我重新启动运行了某些Pod的节点会发生什么

转载 作者:行者123 更新时间:2023-12-02 20:40:42 24 4
gpt4 key购买 nike

假设在Kubernetes节点上运行一些来自Deployments / StatefulSet / DaemonSet等的容器。
然后,我直接重新启动节点,然后启动docker,使用相同的参数启动kubelet。
这些 pod 会怎样?

  • 是否使用从kubelet本地保存的元数据重新创建它们?还是使用从api服务器检索到的信息?还是从OCI运行时恢复并表现为什么都没有发生?
  • 是否只能正常恢复无状态的pod(没有--local-data)?如果其中任何一个具有本地PV / dir,是否可以正常连接回去?
  • 如果我很长时间没有重新启动节点,该怎么办? api服务器会分配其他节点来创建那些容器吗?默认超时值是多少?我该如何配置呢?

  • 我所知道的:
     apiserver
    ^
    |(sync)
    V
    kubelet
    ^
    |(sync)
    V
    -------------
    | CRI plugin |(like api)
    | containerd |(like api-server)
    | runc |(low-level binary which manages container)
    | c' runtime |(container runtime where containers run)
    -------------
    当kubelet从kube-api-server接收到PodSpec时,它像远程服务一样调用CRI,步骤如下:
  • 创建PodSandbox(又称“暂停”图像,始终“停止”)
  • 创建容器
  • 运行容器

  • 因此,我 猜测,随着节点和docker重新启动,步骤1和2已经完成,容器处于“已停止”状态;然后,在重新启动kubelet时,它从kube-api-server提取最新信息,发现容器未处于“运行”状态,因此它调用CRI运行容器,然后一切恢复正常。
    请帮我确认一下。
    预先谢谢〜

    最佳答案

    好问题。首先是几件事; Pod未固定到某个节点。节点通常被视为Kubernetes可以用来运行其工作负载的“服务器场”。例如。您给Kubernetes设置了一组节点,还给了一组例如Deployment-应在服务器上运行的应用程序的期望状态。 Kubernetes负责调度这些Pod,并在集群中的某些内容发生更改时保持它们运行。
    独立Pod不受任何管理,因此,如果Pod崩溃,则无法恢复。您通常希望将无状态应用程序部署为Deployments,然后启动可管理一组Pod的ReplicaSets-例如4个Pod-您的应用实例。
    您想要的状态;带有的Deployment replicas: 4保存在Kubernetes控制平面内的 etcd 数据库中。
    然后,一组用于DeploymentReplicaSet的 Controller 负责使您的应用程序的4个副本保持 Activity 状态。例如。如果一个节点变得不负责任(或死亡),则新的pod将在其他Node上创建(如果它们由ReplicaSet的 Controller 管理)。
    Kubelet接收已调度到该节点的PodSpec,然后通过定期运行状况检查使这些Pod保持 Activity 状态。

    Is it that only stateless pod(no --local-data) can be recovered normally?


    pod 应视为临时食品-例如可以消失-但由管理它们的 Controller 恢复-除非部署为独立的Pod。因此,请勿在本地主机中存储本地数据。
    还有 StatefulSet Pod,用于有状态的工作负载-但有分布的有状态工作负载,例如3个Pod,它们使用 Raft复制数据。 etcd数据库是使用Raft的分布式数据库的示例。

    关于docker - 如果我重新启动运行了某些Pod的节点会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64029871/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com