How to Create a Pod in Kubernetes

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。Kubernetes 服务、支持和工具广泛可用。

Kubernetes 为提供了一个框架来弹性地运行分布式系统。它负责应用程序的扩展和故障转移,提供部署模式等等。

服务发现和负载平衡 :Kubernetes 可以使用 DNS 名称或使用自己的 IP 地址公开容器。如果容器的流量很高,Kubernetes 能够负载均衡和分配网络流量,从而使部署稳定。
存储编排 Kubernetes :自动挂载存储系统,例如本地存储、公共云提供商等。
自动推出和回滚:使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如可以自动化 Kubernetes 为您的部署创建新容器、删除现有容器并将其所有资源用于新容器。
自动装箱: Kubernetes 提供了一个节点集群,它可以用来运行容器化的任务。告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。Kubernetes 可以将容器安装到节点上,以充分利用资源。
自我修复 Kubernetes 会重新启动失败的容器、替换容器、杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们通告给客户端。
安全和配置管理 Kubernetes 允许存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。

一般我们在创建pod的过程中都是,执行kubectl命令去apply对应的yaml文件,但是在执行这个操作的过程到pod被完成创建,k8s的组件都做了哪些操作呢?下面我们简要说说pod被创建的过程。

  1. 用户通过kubectl命名发起请求。
  2. apiserver通过对应的kubeconfig进行认证,认证通过后将yaml中的po信息存到etcd。
  3. Controller-Manager通过apiserver的watch接口发现了pod信息的更新,执行该资源所依赖的拓扑结构整合,整合后将对应的信息交给apiserver,apiserver写到etcd。
  4. Scheduler同样通过apiserver的watch接口更新到pod可以被调度,通过算法给pod分配节点,并将pod和对应节点绑定的信息交给apiserver,apiserver写到etcd。
  5. kubelet从apiserver获取需要创建的pod信息,调用CNI接口给pod创建pod网络,调用CRI接口去启动,调用CSI进行存储卷的挂载。
  6. 网络,容器,存储创建完成后pod创建完成,等业务进程启动后,pod运行成功。

TL;DR

源码解析:K8s 创建 pod 时,背后发生了什么(一)(2021)

K8S - Kubelet 通过控制器创建 Pod 流程分析

https://docs.niewx.cn/20201117kubernetes-zhong-pod-de-chuang-jian-liu-cheng

001.kubelet容器运行时状态缓存 · 语雀