IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 面试了字节跳动和阿里,他们都问了这个K8S问题 -> 正文阅读

[系统运维]面试了字节跳动和阿里,他们都问了这个K8S问题

以前在找工作的时候面试了一些大厂,其中在面试字节跳动和阿里巴巴的时候,对于K8S这块,他们问了一个相同的问题:请详细说说,用户执行了一个deployment.yaml文件时,新创建了一个Pod,这个Pod的创建流程是怎样的, Pod的更新流程又是怎样的。简短的一个问题,要是想答的详细,其实还是涉及了K8S中的很多东西,我觉的这是一道比较有质量的题,我在现场答出来了,在这里,我想再总结一下,查漏补缺,算是对面试的总结,更是对K8S自身的学习和沉淀。

我在回答这个问题的时候,其实头脑里大概是有一个流程图的,然后再按着从头到尾,逐步展开的的原则来详细说明,下面就参照这幅图,再来还原一个Pod被创建时的流程。

第一步:假如我们的deployment.yaml中使用了Nginx镜像,且replicas的值设置为1,然后用户执行了kubectl create -f deployment.yaml命令。

第二步:kubectl执行yaml文件后,对api-server发起了请求,这时api-server会对此次操作进行身份认证,在客户端的~/.kube文

件夹下,已经设置好了相关的用户认证信息,这样api-server会知道我是哪个用户,并对此用户进行鉴权,当api-server确定我们的请求合法后,就会接受本次操作,并把相关的信息保存到etcd中。

第三步:下面controller-manager组件就会介入,controller-manager是有多个类型的,比如Deployment Controller, 它的作用就是负责监听Deployment,此时Deployment Controller发现我们的deployment.yaml文件诉求是需要一个复本集且数量为1,那么它就会去创建一个ReplicaSet,一个ReplicaSet的产生,又被另一个叫做ReplicaSet的Controller监听到了,紧接着它就会去分析ReplicaSet的语义,它了解到是要依照ReplicaSet的template去创建Pod, 它一看这个Pod并不存在,那么就新建此Pod,当Pod刚被创建时,它的nodeName属性值为空,代表着此Pod未被调度。

第四步:调度工作自然是由Scheduler组件来完成的,Scheduler一直关注Pod及Node的信息,所以它就要把未被调度的Pod,调度到合适的Node上去。但是它所做的也只是把它的调度方案,返回给api-server。

第五步:kubelet组件布署于Node之上,它从api-server处知道有一个Pod应该要被调度到自身所在Node上来,它会先判断本地是否在此Pod,如果不存在,则会进入创建Pod流程,创建Pod有分为几种情况,第一种是容器不需要挂载外部存储,则相当于直接docker run把容器启动,但不会直接挂载docker网络,而是通过CNI调用网络插件配置容器网络,如果需要挂载外部存储,则还要调用CSI来挂载存储。

第六步:Pod建立成功后,ReplicaSet Controller会对其持续进行关注,如果Nginx Pod因意外或被我们手动退出,ReplicaSet Controller会知道,并创建新的Pod,以保持replicas数量期望值。

第七步:更新Pod,什么时候会更新Pod? 当deployment.yaml文件中template的部分被更新,就会触发Pod更新,因为Deployment Controller 会把template部分文本计算一个hash值,根据这个hash值判断文本变化。

第八步:既然触发了更新,那么ReplicaSet Controller就会新建一个ReplicaSet并在其中启动新的Pod,在老的ReplicaSet里关闭Pod,直到新的ReplicaSet接替老的ReplicaSet。

总结

可以看到,对于一个简单的问题,可以回答的内容还是很多,我相信上述内容,如果面试官不是要求你对源码上熟悉与开发,已经回答的比较详尽了。我建议在面试的时候,如果面试官问了一个你比较熟或精通的问题,那么你应该抓住机会尽可能的把这个问题讲深,讲广,如果面试官不叫停,甚至可以把与此相关的东西说出来。你知道这样做的目的吗?可以在评论处与一讨论 : )

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:45:44  更:2021-11-22 12:47:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:27:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码