Kubernetes探索-Pod面试

本篇及此系列文章只针对面试相关问题做了简单总结,后续会出比较详细的系列文章....

1. 创建Pod的底层逻辑

1)创建单个Pod时:组件间的交互流程和描述如下图,该过程中controller-manager组件不工作。

流程描述

① 客户端提交创建请求【通过 api-server 的restful 接口 或kubectl 命令行工具,支持JSON 和 YAML

② api-server 处理用户请求,将 pod 信息存储至 etcd 中;

③ kube-scheduler 通过 api-server 接口监测到未绑定的 pod,尝试为 pod 分配 node 节点;

        两阶段进行:预选阶段和优选阶段

                预选阶段:遍历所有的 node 节点,根据策略筛选出候选节点;

                优选阶段:为预选阶段所选的候选节点进行打分,取分数最高者;

④ 选出最优节点后,进行 pod绑定操作,并将结果存储至 etcd 中;

⑤ 目标节点的 kubelet 进程通过 api-server 接口监测到 pod绑定事件,从 etcd 获取 pod 清单,下载镜像并启动容器;

⑥ kubelet通过接口上报pod状态给api-server,api-server更新etcd资源信息

2)创建Deployment时:组件间的交互流程和描述如下图:

流程描述 

① 客户端提交创建请求【通过 api-server 的restful 接口 或kubectl 命令行工具,支持JSON 和 YAML

② api-server 验证并存储deployment信息到 etcd 数据中心;

③ + ④ deployment-controller通过api-server监测到新deployment对象创建,则创建一个replicaset对象并存储到etcd数据中心;

⑤+⑥ replicaset-controller通过api-server监测到新replicaset对象创建,则基于配置信息创建指定数量的pod副本;

⑦ kube-scheduler 通过 api-server 接口监测到未绑定的 pod,尝试为 pod 分配 node 节点;

        两阶段进行:预选阶段和优选阶段

                预选阶段:遍历所有的 node 节点,根据策略筛选出候选节点;

                优选阶段:为预选阶段所选的候选节点进行打分,取分数最高者;

⑧ 选出最优节点后,进行 pod绑定操作,并将结果存储至 etcd 中;

⑨ 目标节点的 kubelet 进程通过 api-server 接口监测到 pod绑定事件,从 etcd 获取 pod 清单,下载镜像并启动容器;

⑩ kubelet通过接口上报pod状态给api-server,api-server更新etcd资源信息

2. Pod的运行状态有哪些?

  • Pending:API Server已经创建该Pod,且Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程。
  • Running:Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态。
  • Succeeded:Pod内所有容器均成功执行退出,且不会重启。
  • Failed:Pod内所有容器均已退出,但至少有一个容器退出为失败状态。
  • Unknown:由于某种原因无法获取该Pod状态,可能由于网络通信不畅导致。

3. 什么是静态Pod?

  • 由kubelet创建,存在于特定node上的无法进行健康检查的pod;
  • 不能通过api-server进行管理;
  • 无法与Replication Controller,Deployment或者DaemonSet进行关联

4. Pod的重启策略有哪些

  • 作用:重启策略应用于Pod内的所有容器,当pod内的某容器异常退出/健康检测失败时,kubelet会根据重启策略完成相应操作;
  • 重启策略
    • Always(default):当容器失效时,由kubelet自动重启该容器
    • OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器;
    • Never:不论容器运行状态如何,kubelet都不会重启该容器
  • 重启策略与控制方式(Replication Controller,Job,DaemonSet和kubelet)关联
    • Replication Controller和DaemonSet:必须设置为Always,需要保证该容器持续运行;
    • Job:OnFailure或Never,确保容器执行完成后不再重启;
    • kubelet:在Pod失效时重启,不论将RestartPolicy设置为何值,也不会对Pod进行健康检查。

5. Pod的健康检查方式

kubernetes提供三类Probe(探针),kubelet会定期执行探针检测Pod的健康状态。

  • LivenessProbe探针:判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,kubelet将杀掉该容器,并根据容器的重启策略做相应处理。若一个容器不包含LivenessProbe探针,kubelet认为该容器的LivenessProbe探针返回值用于是“Success”。
  • ReadineeProbe探针:用于判断容器是否启动完成(ready状态)。如果ReadinessProbe探针探测到失败,Pod的状态将被修改。Endpoint Controller将从Service的Endpoints中删除包含该容器所在Pod的Eedpoint。
  • StartupProbe探针:启动检查机制,应用一些启动缓慢的业务,避免业务长时间启动而被上面两类探针kill掉。

6. LivenessProbe探针的实现方式

  • ExecAction:在容器内执行一个命令,若返回码为0,则表明容器健康。
  • TCPSocketAction:通过容器的IP地址和端口号执行TCP检查,若能建立TCP连接,则表明容器健康。
  • HTTPGetAction:通过容器的IP地址、端口号及路径调用HTTP-Get方法,若响应的状态码大于等于200且小于400,则表明容器健康。

7. Pod的常见调度方式

常见的Pod调度方式有以下四种:

  • Deployment或Replication Controller:自动部署一个容器应用的多份副本,持续监控副本的数量,在集群内始终维持用户指定的副本数量。
  • NodeSelector:定向调度,当需要将Pod调度到特定Node上时,可以通过Node的标签(Label)和 Pod的nodeSelector属性相匹配。
  • NodeAffinity亲和性调度亲和性调度机制极大的扩展了Pod的调度能力,目前有两种节点亲和力表达式。
  • requiredDuringSchedulingIgnoredDuringExecution:硬规则,必须满足指定的规则,调度器才可以调度Pod至Node上(类似nodeSelector)
  • preferredDuringSchedulingIgnoredDuringExecution:软规则,优先调度至满足的Node的节点,但不强求,多个优先级规则还可以设置权重值。
  • Taints和Tolerations(污点和容忍)
    • Taint:Node属性,表示Node拒绝特定Pod运行;
    • Toleration:Pod的属性,表示Pod能容忍运行在标注了Taint的Node上。

8. kubernetes的Replication Controller机制

Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。当定义了RC并提交至k8s集群之后,master节点上的controller-manager组件得到消息,巡检系统中当前存活的目标pod,并确保目标pod的存活数量符合期望值。

上一篇: kubernetes 初探

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/513480.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭开AI编程语言Mojo比Pyhon快6.8万倍的5个秘密!

最近(2024年3月29日),号称比Python快6.8万倍的Mojo编程语言开源啦!6.8万倍?你敢相信这个数字是真的吗?不过,就连Mojo官网都把这个结果贴了出来(见下图),这就很…

怎样在Linux搭建NTP服务器

搭建 NTP(Network Time Protocol)服务器可以帮助你在局域网内提供时间同步服务,让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤: 安装 NTP 服务器软件: 在终端中执行以下命令安装 N…

Webpack部署本地服务器

Webpack部署本地服务器 目录 Webpack部署本地服务器目的认识模块热替换(HMR)什么是 HMRHMR 通过如下几种方式, 来提高开发的速度如何使用 HMRhost 配置 目的 完成自动编译 常用方式: webpack-dev-server webpack-dev-server 是一个用于开发环境的 Web 服…

Class类

1. Class类的理解 针对于编写好的 .java 源文件进行编译(使用 javac.exe),会生成一个或多个 .class 字节码文件。接着,我们使用 java.exe 命令对指定的 .class 文件进行解释运行。这个解释运行的过程中,我们需要将 .class 字节码文件加载到内…

本地储存、jQuery

文章目录 1. 本地储存1. window.sessionStorage2. window.localStorage案例:记住用户名 2. jQuery入门jQuery 的概念jQuery 的入口函数jQuery 的顶级对象 $jQuery 对象和 DOM 对象 3. jQuery 常用API1. jQuery 选择器1.基础选择器2.层级选择器隐式迭代(重…

C++(set和map详解,包含常用函数的分析)

set set是关联性容器 set的底层是在极端情况下都不会退化成单只的红黑树,也就是平衡树,本质是二叉搜索树. set的性质:set的key是不允许被修改的 使用set需要包含头文件 set<int> s;s.insert(1);s.insert(1);s.insert(1);s.insert(1);s.insert(2);s.insert(56);s.inser…

Vue.js---------Vue基础

能够说出Vue的概念和作用能够使用vue/cli脚手架工程化开发能够熟练Vue指令 一.vue基本概念 1.学习vue Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 渐进…

2024 ccfcsp认证打卡 2022 09 01 如此编码

2022 09 01 如此编码 题解1题解2 题解1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt(); // 天数int m sc.nextInt(); // 科目数int[] b new int[n 1]; // 存放结果的数…

笔记: JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…

Paddle实现人脸对比

人脸对比 人脸对比&#xff0c;顾名思义&#xff0c;就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS&#xff1a;作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集&#xff1a; 人脸数据_数据集-飞桨AI Studio星河社区 (b…

【React】vite + react 项目,配置项目路径别名 @

vite react 项目&#xff0c;配置项目路径别名 1 安装 types/node2 在 vite.config.ts 中添加配置&#xff1a;3 配置路径别名的提示 使用 vite 开发 react 项目时&#xff0c;可以通过一下步骤配置路径别名&#xff1a; 1 安装 types/node npm i -D types/node2 在 vite.con…

Lumos学习王佩丰Excel第一讲:认识Excel

最近发现自己在操作excel的一些特殊功能时会有些不顺手&#xff0c;所以索性找了一个比较全的教程&#xff08;王佩丰excel24讲&#xff09;拿来学习&#xff0c;刚好形成文档笔记&#xff0c;分享给有需要但没有时间看视频的朋友们。整体笔记以王老师授课的知识点去记录&#…

Spring拓展点之SmartLifecycle如何感知容器启动和关闭

Spring为我们提供了拓展点感知容器的启动与关闭&#xff0c;从而使我们可以在容器启动或者关闭之时进行定制的操作。Spring提供了Lifecycle上层接口&#xff0c;这个接口只有两个方法start和stop两个方法&#xff0c;但是这个接口并不是直接提供给开发者做拓展点&#xff0c;而…

算法基础--递推

&#x1f600;前言 递推算法在计算机科学中扮演着重要的角色。通过递推&#xff0c;我们可以根据已知的初始条件&#xff0c;通过一定的规则推导出后续的结果&#xff0c;从而解决各种实际问题。本文将介绍递推算法的基础知识&#xff0c;并通过一些入门例题来帮助读者更好地理…

力扣 392. 判断子序列

题目来源&#xff1a;https://leetcode.cn/problems/is-subsequence/description/ C题解1&#xff1a;在t中按顺序一个一个寻找s的元素。 class Solution { public:bool isSubsequence(string s, string t) {bool flg false;int m s.size(), n t.size();if(m 0) return tr…

vue项目打包优化之-productionSourceMap设置

productionSourceMap 是一个用于配置生产环境下是否生成 source map 文件的选项。在 webpack 中&#xff0c;source map 文件是一种映射关系文件&#xff0c;可以将编译后的代码映射回原始源代码&#xff0c;方便开发者在调试时定位问题。 在生产环境中&#xff0c;通常不建议暴…

线程池小项目【Linux C/C++】(踩坑分享)

目录 前提知识&#xff1a; 一&#xff0c;线程池意义 二&#xff0c;实现流程 阶段一&#xff0c;搭建基本框架 1. 利用linux第三方库&#xff0c;将pthread_creat线程接口封装 2. 实现基本主类ThreadPool基本结构 阶段二&#xff0c;完善多线程安全 1. 日志信息打印…

大模型放进推荐系统怎么玩?微软亚研全面总结

在大模型时代&#xff0c;似乎任何自然语言处理任务在大模型加持下都完成了一轮升级改造&#xff0c;展现出前所未有的高效与效果。语义理解、情感分析还是文本生成这些常规任务自然是不必说&#xff0c;但也有一些任务比如推荐&#xff0c;简单粗暴的训练LLMs的思路并非明智之…

回溯算法|78.子集

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex) {result.push_back(path); // 收集子集&#xff0c;要放在终止添加的上面&#xff0c;否则会漏掉自…

HarmonyOS 应用开发之非线性容器

非线性容器实现能快速查找的数据结构&#xff0c;其底层通过hash或者红黑树实现&#xff0c;包括HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray七种。非线性容器中的key及value的类型均满足ECMA标准。 HashMap HashMap 可用来存储具有关联…