【问题标题】:How does K8S auto-start the Deployments and DaemonSets?K8S 如何自动启动 Deployments 和 DaemonSets?
【发布时间】:2020-07-16 10:51:42
【问题描述】:

我已经使用 Kubeadm 安装了 K8S,并在控制平面节点和工作节点上看到了以下 pod。

Kubelet 作为 systemd 服务启动,它查看 /etc/kubernetes/manifests 文件夹并启动 etcd.yaml、kube-apiserver.yaml、kube-controller-manager.yaml 和 kube-scheduler 中定义的对象.yaml 文件。如果我将 yaml 文件放在同一个文件夹中,kubelet 会观察到相同的情况并启动相应的 K8S 对象。

我不确定在我启动/重新启动控制平面节点和工作节点后,上面屏幕截图中显示的 coredns 部署、kube-proxy 和 flannel DaemonSets 是如何自动启动的。有人可以帮助我完成 K8S 的启动过程吗?

【问题讨论】:

    标签: kubernetes startup


    【解决方案1】:

    Kubeadm 在 init addon 阶段安装 CoreDNS 和 kube-proxy。它是在基本集群功能已经启动(apiserver、控制器管理器等)之后安装的。 Kubeadm 以与运行 kubectl apply 相同的方式安装它。

    这里是code of kubeadm init addon phase,如果您想了解它实际上是如何工作的。

    必须使用清单文件夹(也称为static pods)启动 API 服务器、控制器管理器和调度程序,因为没有其他方法(技术上这不是 100% 正确,因为还有其他方法,例如,您可以运行您的使用 systemd 的控制平面)。当还没有 Kubernetes 时,你如何开始在 Kubernetes 上运行东西?没有 api 服务器来处理你的请求,没有调度器来调度你的 pod,没有控制器来管理资源。 启动基本组件后,您可以使用 api 以常规方式运行 pod。

    另外,回答您关于重新启动控制平面或节点时会发生什么的问题?您需要知道整个 k8s 集群的状态保存在 etcd 中。因此,当您重新启动控制平面时,kubernetes 从 etcd 读取状态,将其与现实进行比较,如果存在差异,它会调整现实以匹配 etcd 中的状态。例如如果没有 coredns 运行但 etcd 中有 coredns 对象,kubernetes 将启动它。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2014-01-24
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多