Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >k8s通过deployment部署一个pod的流程

k8s通过deployment部署一个pod的流程

作者头像
你大哥
发布于 2021-10-11 03:28:07
发布于 2021-10-11 03:28:07
2K0
举报
文章被收录于专栏:容器云实践容器云实践

在学习k8s工作流程之前,我们得再次认识一下上篇k8s架构与组件详解中提到的kube-controller-manager一个k8s中许多控制器的进程的集合。

比如Deployment 控制器(DeploymentController)和 Job 控制器(JobController)是 Kubernetes 内置控制器的典型例子。在 Kubernetes 中,一个控制器至少追踪一种类型的 Kubernetes 资源。这些 资源对象有一个代表期望状态的 spec 字段。该资源的控制器负责所属对象当前状态接近期望状态。


一、控制器与apiserver的交互

上面提到的这些资源的控制器是如何确保资源对象当前状态接近于期望状态?

当然是持续同步apiserver中(查询etcd)资源对象的元数据,并不断更新对象属性。是这样么?

当集群中有几十上百万个资源对象时,光控制器的http同步请求就够apiserver喝一壶的,显然不太棒。所以Kubernetes采用了一个叫Informer的机制。Informer 是 Client-go 中的一个核心工具包。

在这里informer主要实现的作用如下:

  1. 更快地返回 List/Get 请求,减少对 Kubenetes API 的直接调用

使用 Informer 实例的 Lister() 方法, List/Get Kubernetes 中的 Object 时,Informer 不会去请求 Kubernetes API,而是直接查找缓存在本地内存中的数据,依赖Etcd的List&Watch机制,客户端及时获知这些对象的状态变化,然后更新本地缓存,这样就在客户端为这些API对象维护了一份和Etcd数据库中几乎一致的数据,然后控制器等客户端就可以直接访问缓存获取对象的信息,而不用去直接访问apiserver。通过这种方式,Informer 既可以更快地返回结果,又能减少对 Kubernetes API 的直接调用。

  1. 可监听事件并触发回调函数

Informer 通过 Kubernetes Watch API 监听某种 resource 下的所有事件。Watch API 本质上就是一种 APIServer 主动向客户端推送 Kubernetes 资源修改、创建的一种机制。这样我们就可以获取到资源的变更,及时更新对象状态。

关于k8s中 informer详细可参考:kubenetes informer 详解

通过上面我们知道了控制器是通过watch api监听apiserver中资源对象的更新,下面我们进入正题:k8s工作流程。


二、k8s工作流程

我们来看通过deployment部署pod的常规流程:

image-20210914114226232

  1. kubectlapiserver发送部署请求(例如使用 kubectl create -f deployment.yml)
  2. apiserver将 Deployment 持久化到etcd;etcd与apiserver进行一次http通信。
  3. controller manager通过watch api监听 apiserverdeployment controller看到了一个新创建的deplayment对象更后,将其从队列中拉出,根据deployment的描述创建一个ReplicaSet并将 ReplicaSet 对象返回apiserver并持久化回etcd。 以此类推,当replicaset控制器看到新创建的replicaset对象,将其从队列中拉出,根据描述创建pod对象。
  4. 接着scheduler调度器看到未调度的pod对象,根据调度规则选择一个可调度的节点,加载到pod描述中nodeName字段,并将pod对象返回apiserver并写入etcd。
  5. kubelet在看到有pod对象中nodeName字段属于本节点,将其从队列中拉出,通过容器运行时创建pod中描述的容器。

上面我们说到的deployment-replicaset-pod的关系如下:

Deploy-Replica-Pod


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 容器云实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
白话K8S核心组件概念
容器是利用了集装箱的思想,把可运行程序打包成可运行、自包含、标准化的镜像。通过K8S能够管理和编排我们打的镜像,举例来说,如果你想运行两个副本,直接在编排文件中配置replicas为2即可,你也可以使用HPA通过检测CPU、内存使用率实现自动扩缩容。
用户5166556
2020/08/20
8240
白话K8S核心组件概念
理解 K8S 的设计精髓之 List-Watch机制和Informer模块
最近想深入了解一下K8S的内部通信机制,因此读了几遍K8S的源码,感慨很深。至今清楚的记得,当了解到K8S 组件之间仅采用HTTP 协议通信,没有依赖中间件时,我非常好奇它是如何做到的。
云爬虫技术研究笔记
2019/11/05
3.6K0
【K8S 系列】k8s 学习一,Kubernetes 基本介绍及核心组件
kubernetes github:https://github.com/kubernetes/kubernetes
阿兵云原生
2023/02/16
5330
k8s实践(1)--k8s集群入门介绍和基础原理
1、简单了解集群的工作原理和基础概念,名词解释。 2、安装etcd集群:etcd分布式键值存储系统,用于保持集群状态,比如Pod、Service等对象信息。 3、安装k8s集群,简单了解集群的如何工作。 4、搭建集群网络:基础网络搞好,后面才能顺利部署各种资源。 5、学习k8s的安全、Secrets,ssl认证。如果安全认证没有搞好,创建pod和service都会报各种错误。 6、然后我们深入学习pod和service。 7、深入学习集群工作原理分析,从基础到深度,才能学的扎实。 8、有了pod和service,就需要知道如果发现,学习coreDNS 9、开始部署一些有状态的服务 10、案例实践
黄规速
2022/04/14
1.8K0
k8s实践(1)--k8s集群入门介绍和基础原理
k8s创建pod的整个过程
过去几年,以 Docker、Kubernetes 为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和 K8S 项目作为技术重心,试图“放长线钓大鱼”。
怀朔
2022/05/29
7K1
k8s创建pod的整个过程
k8s 自身原理之高可用
说到高可用,咱们在使用主机环境的时候(非 k8s),咱做高可用有使用过这样的方式:
阿兵云原生
2023/09/01
4190
k8s 自身原理之高可用
Kubenetes Pod 部署&滚动升级 调优
Pod 在滚动升级部署中部署pod个数到可用指标更新速率 是衡量 Kubenetes 调度能力最核心指标
KubeService@dongjiang
2022/11/16
8051
Kubenetes Pod 部署&滚动升级 调优
从零开始入门 K8s | Kubernetes API 编程范式
本文整理自《CNCF x Alibaba 云原生技术公开课》第 23 讲,点击“阅读原文”直达课程页面。
CNCF
2020/02/26
7460
k8s 自身原理 2
前面我们说到 K8S 的基本原理和涉及的四大组件,分享了前两个组件 etcd 和 ApiServer
阿兵云原生
2023/09/01
2460
k8s 自身原理 2
k8s 自身原理 4
前面咱们分享了 mater 和 worker 节点里面都有哪些组件,他们又是各自主要负责的工作是什么,现在我们心里应该都有数了吧
阿兵云原生
2023/09/01
1630
k8s 自身原理 4
图解 Deployment Controller 工作流程
上一篇文章《Kubernetes Controller Manager 工作原理》讲解了 Controller Manager 是怎么管理 Controller 的,我们知道 Controller 只需要实现相关事件 handler,无须再关心上层逻辑。本文将基于这篇文章,介绍 Deployment Controller 在接收到来自 Informer 的事件后,做了哪些工作。
CS实验室
2021/03/22
1.1K0
图解 Deployment Controller 工作流程
万字警告 - k8s入门,理应Pod先行!
大家好,欢迎来到小菜个人 solo 学堂。在这里,知识免费,不吝吸收!关注免费,不吝动手!死鬼~看完记得给我来个三连哦!
蔡不菜丶
2021/04/29
8270
万字警告 - k8s入门,理应Pod先行!
k8s必学必会知识梳理
对外暴露了Kubernetes API。它是的 Kubernetes 核心控制层。它被设计为水平扩展,即通过部署更多实例来横向扩展。API Server 负责和 etcd 交互(其他组件不会直接操作 etcd,只有 API Server 这么做),是整个 kubernetes 集群的数据中心,所有的交互都是以 API Server 为核心的。API Server 提供了以下的功能:
我的小碗汤
2019/07/30
2K0
Kubernetes整理
一般做法:容器A共享容器B$ docker run --net=B --volumes-from=B --name=A image-A ...,这种做法会存在一个问题,容器AB的关系从对等变成了拓扑。
铭丶
2021/03/12
7460
白话kubernetes的十万个为什么 - kubernetes
Kubernetes简称? 答:k8s或kube。 Kubernetes是什么? 答:由Google开发的一个强大的平台,可以在集群环境中管理容器化应用程序。本质上是一种特殊的数据库,里面存储的是能够组成kubernetes模型的各种资源,包括Pods、Deployments、Services、Config Maps、Secrets、Namespaces、Nodes、Service Accounts、Ingress、Jobs等等。可以参考:kubernetes实战之运行aspnetcore weba
justmine
2018/06/01
1.2K0
K8s组件和架构
Master节点是Kubernetes集群的控制节点,每个Kubernetes集群里至少有一个Master节点,它负责整个集群的决策(如调度),发现和响应集群的事件。一个集群通常运行多个Master控制节点,提供容错性和高可用性。Master节点可以运行在集群中的任意一个节点上,但是最好将Master节点作为一个独立节点,不在该节点上创建容器,因为如果该节点出现问题导致宕机或不可用,整个集群的管理就会失效。
谢公子
2023/02/27
1.1K0
K8s组件和架构
Kubernetes架构原来这么简单
Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。
用户1107783
2023/09/14
1.4K0
Kubernetes架构原来这么简单
k8s架构与组件详解
k8s系统在设计是遵循c-s架构的,也就是我们图中apiserver与其余组件的交互。在生产中通常会有多个Master以实现K8s系统服务高可用。K8s集群至少有一个工作节点,节点上运行 K8s 所管理的容器化应用。
你大哥
2021/10/11
3.9K0
k8s架构与组件详解
K8S核心组件介绍
负责对外提供集群各类资源的增删改查及 Watch 接口,它是 Kubernetes 集群中各组件数据交互和通信的枢纽。当收到一个创建 Pod 写请求时,它的基本流程是对请求进行认证、限速、授权、准入机制等检查后,写入到 etcd 即可。
灰子学技术
2021/08/27
1.9K0
K8S核心组件介绍
k8s 架构、基本概念及命令
API server: 是k8s 集群的前端接口,各种客户端工具以及k8s的其他组件 可以通过它管理k8s集群的各种资源。它提供了HTTP/HTTPS RESTful API, 即K8S API.
小手冰凉
2020/08/20
8000
k8s 架构、基本概念及命令
相关推荐
白话K8S核心组件概念
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档