【面试题系列】K8S常见面试题
目录
序言
问题
1. 简单说一下k8s集群内外网络如何互通的吧
2.描述一下pod的创建过程
3. 描述一下k8s pod的终止过程
4.Kubernetes 中的自动伸缩有哪些方式?
5.Kubernetes 中的故障检测有哪些方式?
6.Kubernetes 中的资源调度有哪些方式?
7.说一下Kubernetes 的控制器(Controller)如何工作的
2.投票
序言
任何一件事情,只要坚持六个月以上,你都可以看到质的飞跃。
今天学习一下K8s面试题相关内容,希望此文,能帮助读者在遇到K8S相关面试问题,能对答如流
文章标记颜色说明:
- 黄色:重要标题
- 红色:用来标记结论
- 绿色:用来标记一级论点
- 蓝色:用来标记二级论点
问题
1. 简单说一下k8s集群内外网络如何互通的吧
要在 Kubernetes(k8s)集群内外建立网络互通,可以采取以下措施:
使用service:使用Service类型为NodePort或LoadBalancer的Kubernetes服务。这可以使服务具有一个公共IP地址或端口,以便在集群内或外部访问该服务。
使用Ingress:配置Kubernetes Ingress资源。Ingress是一种路由机制,它将外部流量路由到Kubernetes集群中的特定服务。可以使用Ingress控制器来实现负载均衡和SSL终止。
创建网络策略。Kubernetes网络策略允许您定义哪些Pod可以与哪些其他Pod通信,以及在什么端口上进行通信。
使用DNS:将集群内的服务和Pod绑定到一个公共IP地址或域名。可以使用DNS记录来实现这一点,例如在Kubernetes中使用外部DNS插件。
配置网络代理 :网络代理是一种可选的解决方案,它可以帮助在Kubernetes集群内外之间建立网络互通。可以使用Ingress控制器或使用第三方代理解决方案,如NGINX或HAProxy。
以上是在Kubernetes集群内外建立网络互通的常见方法。可以根据具体需求和环境选择适合的解决方案。
2.描述一下pod的创建过程
Pod创建过程如下:
定义Pod:首先,需要定义一个Pod的配置文件,它描述了要创建的Pod的特征,例如Pod名称、容器映像、容器端口等。
发送Pod配置文件:将Pod配置文件发送到Kubernetes集群中的API服务器。可以使用kubectl命令行工具或API客户端向API服务器发送配置文件。
调度器分配节点:Kubernetes调度器将Pod分配给一个节点。调度器考虑节点资源的可用性、Pod的资源需求以及其他调度策略来做出决策。
容器创建:一旦Pod被调度到节点上,kubelet代理将创建Pod中定义的每个容器,并使用相应的容器映像来填充它们。
分配IP地址:Kubernetes分配一个IP地址给Pod,并将其添加到集群的网络中,以便其他Pod可以与其通信。
启动容器:一旦Pod中的所有容器都已创建并分配IP地址,kubelet将启动每个容器,并开始在其内部运行应用程序。
容器监控:Kubernetes会持续监控Pod中的每个容器,并在出现故障或崩溃时重新启动它们。
总的来说,Pod创建过程就是根据Pod描述文件定义的规范,通过Kubernetes API和调度器将Pod实例创建到集群中,并确保Pod在集群中稳定运行。
另一种简单的描述:
- Pod 的创建流程 kubectl向API Server发送创建请求ReplicaSet,API Server请求存储在etcd Controller Manager接受到通知
- Controller Manager通知到
- Scheduler Scheduler通知Worker节点
- API Server通知到Worker节点的kubelet
- kubelet指示当前节点上的Container Runtime运行对应的容器
- Container Runtime下载镜像并启动容器
3. 描述一下k8s pod的终止过程
在 Kubernetes 中,一个 Pod 由一个或多个容器组成,因此 Pod 的终止过程实际上涉及到容器的终止以及 Pod 对应的资源的释放等多个方面。
当 Kubernetes 接收到一个 Pod 的终止请求时,它将执行以下步骤:
从 Service 中删除 Pod:如果 Pod 正在 Service 中被使用,Kubernetes 会将其从 Service 中删除,以确保不再将流量发送到该 Pod。
关闭容器:Kubernetes 向 Pod 中的每个容器发送一个终止请求,容器将开始执行关闭的预定义步骤。这些步骤包括停止正在运行的进程、关闭网络连接、清理文件系统等等。
发送 SIGTERM 信号:当 Kubernetes 接收到终止 Pod 的请求时,它将首先向容器发送 SIGTERM 信号,让容器开始优雅地终止。这个信号的作用是告诉容器它需要开始终止了,但是需要等待一定的时间来完成正在运行的任务和释放资源。
等待容器终止:Kubernetes 将等待容器在接收到 SIGTERM 信号后完成优雅终止。在这个等待期间,Kubernetes 将不再向 Pod 中发送新的请求,但它仍会监控 Pod 的状态。
发送 SIGKILL 信号:如果容器没有在一定的时间内完成优雅终止,Kubernetes 将发送 SIGKILL 信号给容器,强制终止容器并释放其资源。
清理资源:Kubernetes 将释放 Pod 使用的所有资源,包括节点上的网络、存储、内存等。同时,Kubernetes 还将更新其状态,以便管理员和其他应用程序可以获取到最新的 Pod 信息。
总的来说,Kubernetes Pod 的终止过程包括了多个步骤,以确保容器能够安全、快速地释放资源,同时不会丢失任何数据或产生其他的副作用。
4.Kubernetes 中的自动伸缩有哪些方式?
Kubernetes 中的自动伸缩主要有以下几种方式:
- 水平自动伸缩(Horizontal Pod Autoscaler,HPA):根据 CPU 利用率、内存利用率等指标,动态地增加或减少 Pod 的数量,以满足应用的负载需求。HPA 是 Kubernetes 中最常用的自动伸缩方式之一。
- 垂直自动伸缩(Vertical Pod Autoscaler,VPA):根据容器内部资源使用情况,动态地调整容器的 CPU 和内存资源请求量。VPA 可以优化容器的资源利用率,提高应用的性能和可靠性。
- 集群自动伸缩(Cluster Autoscaler):根据集群节点的资源利用率,动态地增加或减少节点的数量,以适应不同的负载需求。集群自动伸缩可以自动扩容或缩容集群,确保应用的高可用性和可靠性。
- 自定义指标自动伸缩(Custom Metrics Autoscaler,CA):根据自定义指标,动态地增加或减少 Pod 的数量。CA 可以根据应用的特殊需求,灵活地定制自动伸缩策略,提高应用的性能和可靠性。
总的来说,Kubernetes 提供了多种自动伸缩方式,可以根据应用的特点和需求选择合适的自动伸缩方式,以提高应用的性能、可靠性和可扩展性。
无论使用哪种自动伸缩方法,Kubernetes 都会根据应用程序的需求自动调整 Pod 的数量和资源限制,以确保应用程序始终具有足够的资源,并且可以根据需要扩展或缩减。
5.Kubernetes 中的故障检测有哪些方式?
回答这个问题前,需要先说一下探针:
Kubernetes 中的探针是一种用于检查应用程序状态的机制。
探针可以检查应用程序的运行状况、存活性和就绪状态,并在需要时自动修复任何问题。
探针可以使用三种类型:
- liveness(存活性)
- readiness(就绪状态)
- startup(启动时)
Kubernetes 中的故障检测方式包括以下几种:
- Liveness Probe(存活探针):用于检测容器是否处于正常运行状态。如果存活探针检测到容器内部的应用程序出现故障,Kubernetes 将会自动重启该容器。存活探针设置方式,可以使用 HTTP 请求、TCP 连接或命令执行来设置。
- Readiness Probe(就绪探针):用于检测容器是否准备好接收流量。如果就绪探针检测到容器没有准备好,Kubernetes 将不会将流量路由到该容器。可以使用 HTTP 请求、TCP 连接或命令执行来设置就绪探针。
- Startup Probe(启动探针):用于检测容器是否已经成功启动。如果启动探针检测到容器启动失败,Kubernetes 将会尝试重新启动该容器。与存活探针和就绪探针不同,启动探针只在容器启动时运行一次,然后就不再运行了。
- Node Health Check(节点健康检查):用于检测节点的状态。如果节点出现故障,Kubernetes 将会将该节点上的所有容器转移到其他节点上。可以使用 kubeadm 自带的 kubeadm node 命令或 kubelet 的 --healthz 选项来设置节点健康检查。
- Cluster Health Check(集群健康检查):用于检测整个集群的状态。可以使用 kubeadm 自带的 kubeadm check 命令或 kubelet 的 --healthz 选项来设置集群健康检查。此外,还可以使用 Kubernetes 官方提供的 kubeadm-diagnostics 工具来进行集群诊断。
6.Kubernetes 中的资源调度有哪些方式?
Kubernetes 中的资源调度主要有以下几种方式:
- 基于 CPU 和内存资源的静态调度:在 Kubernetes 中,可以为每个 Pod 指定需要使用的 CPU 和内存资源。基于这些资源的需求,Kubernetes 会自动将 Pod 调度到具有足够资源的节点上。这种方式称为静态调度,因为资源需求是在 Pod 创建时指定的,而不会随着时间的推移而变化。
- 基于 CPU 和内存资源的动态调度:除了静态调度外,Kubernetes 还支持基于 CPU 和内存资源的动态调度。在这种方式下,Kubernetes 会根据当前节点的资源使用情况,将 Pod 动态地调度到具有可用资源的节点上,从而实现资源的最优分配。
- 基于节点标签的调度:Kubernetes 还支持基于节点标签的调度。通过为节点打上不同的标签,可以让 Kubernetes 将特定类型的 Pod 调度到具有相应标签的节点上。这种方式非常适合需要将不同类型的应用程序隔离开的场景。
- 基于节点亲和性和反亲和性的调度:在 Kubernetes 中,可以通过指定节点亲和性和反亲和性规则,来控制 Pod 被调度到哪些节点上。比如,可以指定一个 Pod 只能被调度到与指定节点具有相同标签的节点上,或者指定一个 Pod 不能被调度到与指定节点具有相同标签的节点上。
- 基于调度器插件的调度:Kubernetes 允许用户编写自己的调度器插件,并将其添加到 Kubernetes 集群中。通过使用这种方式,用户可以实现定制化的调度策略,以满足特定的需求。
7.说一下Kubernetes 的控制器(Controller)如何工作的
Kubernetes的控制器(Controller)是一种用于管理Kubernetes资源的控制器模式。
它确保系统处于期望的状态,通过周期性地监视系统状态,然后采取必要的操作使其达到期望状态。
控制器负责监控Kubernetes资源对象的状态,并确保资源对象的实际状态与期望状态匹配。
控制器的工作原理如下:
- 定义期望状态:控制器定义资源对象的期望状态,例如Pod应该运行在哪个节点上,有哪些容器以及运行的命令。
- 监控实际状态:控制器周期性地监视系统状态,通过 API Server 获取资源对象的实际状态,并与期望状态进行比较。
- 执行调谐操作:如果实际状态与期望状态不匹配,则控制器执行必要的操作来将系统状态调整为期望状态。例如,如果Pod未在期望节点上运行,则控制器会调度Pod到正确的节点上。
- 重复以上步骤:控制器持续监视系统状态,并根据需要执行调谐操作,直到实际状态与期望状态匹配为止。
Kubernetes提供了许多内置的控制器,如Deployment、ReplicaSet和StatefulSet,它们分别用于管理不同类型的应用程序和资源对象。
此外,用户还可以编写自定义控制器来管理自定义资源对象。
2.投票
相关文章:

【面试题系列】K8S常见面试题
目录 序言 问题 1. 简单说一下k8s集群内外网络如何互通的吧 2.描述一下pod的创建过程 3. 描述一下k8s pod的终止过程 4.Kubernetes 中的自动伸缩有哪些方式? 5.Kubernetes 中的故障检测有哪些方式? 6.Kubernetes 中的资源调度有哪些方式ÿ…...

字符函数和字符串函数(上)-C语言详解
CSDN的各位友友们你们好,今天千泽为大家带来的是C语言中字符函数和字符串函数的详解,掌握了这些内容能够让我们更加灵活的运用字符串,接下来让我们一起走进今天的内容吧!写这篇文章需要在cplusplus.com上大量截图,十分不易!如果对您有帮助的话希望能够得到您的支持和帮助,我会持…...

全连接神经网络
目录 1.全连接神经网络简介 2.MLP分类模型 2.1 数据准备与探索 2.2 搭建网络并可视化 2.3 使用未预处理的数据训练模型 2.4 使用预处理后的数据进行模型训练 3. MLP回归模型 3.1 数据准备 3.2 搭建回归预测网络 1.全连接神经网络简介 全连接神经网络(Multi-Layer Percep…...

深度学习目标检测ui界面-交通标志检测识别
深度学习目标检测ui界面-交通标志检测识别 为了将算法封装起来,博主尝试了实验pyqt5的上位机界面进行封装,其中遇到了一些坑举给大家避开。这里加载的训练模型参考之前写的博客: 自动驾驶目标检测项目实战(一)—基于深度学习框架yolov的交通…...

ubuntu不同版本的源(换源)(镜像源)(lsb_release -c命令,显示当前系统的发行版代号(Codename))
文章目录查看unbuntu版本名(lsb_release -c命令)各个版本源代号(仅供参考,具体代号用上面命令查)各版本软件源Ubuntu20.10阿里源:清华源:Ubuntu20.04阿里源:清华源:Ubunt…...

linux入门---程序翻译的过程
我们在vs编译器中写的代码按下ctrl f5就可以直接运行起来,并且会将运行的结果显示到显示器上,这里看上去只有一个步骤但实际上这里会存在很多的细节,比如说生成结果在这里插入代码片之前我们的代码会经过预处理,编译,汇…...

springboot复习(黑马)
学习目标基于SpringBoot框架的程序开发步骤熟练使用SpringBoot配置信息修改服务器配置基于SpringBoot的完成SSM整合项目开发一、SpringBoot简介1. 入门案例问题导入SpringMVC的HelloWord程序大家还记得吗?SpringBoot是由Pivotal团队提供的全新框架,其设计…...

C++指针详解
旧文更新:两三年的旧文了,一直放在电脑里,现在直接传上CSDN 一、指针的概念 1.1 指针 程序运行时每个变量都会有一块内存空间,变量的值就存放在这块空间中。程序可以通过变量名直接访问这块空间内的数据,这种访问方…...

tauri+vite+vue3开发环境下创建、启动运行和打包发布
目录 1.创建项目 2.安装依赖 3.启动项目 4.打包生成windows安装包 5.安装打包生成的安装包 1.创建项目 运行下面命令创建一个tauri项目 pnpm create tauri-app 我创建该项目时的node版本为16.15.0 兼容性注意 Vite 需要 Node.js 版本 14.18,16。然而&#x…...

安卓进阶系列-系统基础
文章目录计算机结构冯诺依曼结构哈弗结构冯诺依曼结构与哈弗结构对比安卓采用的架构安卓操作系统进程间通讯(IPC)内存共享linux内存共享安卓内存共享管道Unix Domain Socket同步常见同步机制信号量Mutex管程安卓同步机制安卓中的Mutex安卓中的ConditionB…...

10 Wifi网络的封装
概述 Wifi有多种工作模式,比如:STA模式、AccessPoint模式、Monitor模式、Ad-hoc模式、Mesh模式等。但在IPC设备上,主要使用STA和AccessPoint这两种模式。下面分别进行介绍。 STA模式:任何一种无线网卡都可以运行在此模式,这种模式也是无线网卡的默认模式。在此模式下,无线…...

手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常实用)
简介 Jetbrains家族和Pycharm版本划分: pycharm是Jetbrains家族中的一个明星产品,Jetbrains开发了许多好用的编辑器,包括Java编辑器(IntelliJ IDEA)、JavaScript编辑器(WebStorm)、PHP编辑器&…...

开发板与ubantu文件传送
接下来的所以实验都通过下面这种方式发送APP文件到开发板运行 目录 1、在ubantu配置 ①在虚拟机上添加一个桥接模式的虚拟网卡 ②设定网卡 ③在网卡上配置静态地址 2、开发板设置 ①查看网卡 ②配置网卡静态ip 3、 测试 ①ping ②文件传送 传送报错情况 配置环境&#…...

如何成为一名优秀的网络安全工程师?
前言 这是我的建议如何成为网络安全工程师,你应该按照下面顺序学习。 简要说明 第一件事你应该学习如何编程,我建议首先学python,然后是java。 (非必须)接下来学习一些算法和数据结构是很有帮助的,它将…...

面试问题之高并发内存池项目
项目部分 1.这个项目是什么? 高并发内存池的原型是谷歌一个开源项目,tcmalloc,而这个项目,就是tcmalloc中最核心的框架和部分拿出来进行模拟。他的作用就是在去代替原型的内存分配函数malloc和free。这个项目涉及的技术有,c&…...
如果阿里巴巴给蒋凡“百亿补贴”
出品 | 何玺 排版 | 叶媛 2021底,阿里内部进行组织架构大调整,任命蒋凡为阿里海外商业负责人,分管全球速卖通和国际贸易(ICBU)两个海外业务,以及Lazada等面向海外市场的多家子公司。 一年时间过去&#x…...
Linux版本现状
Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Red Hat(RHEL红帽)为代表,后者以Debian为代表。Red HatRedhat,应该称为Redhat系列&…...
Winform中实现保存配置到文件/项目启动时从文件中读取配置(序列化与反序列化对象)
场景 Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象: Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象_winform xml序列化_霸道流氓气质的博客-CSDN博客 上面讲的序…...

基于python的超市历年数据可视化分析
人生苦短 我用python Python其他实用资料:点击此处跳转文末名片获取 数据可视化分析目录人生苦短 我用python一、数据描述1、数据概览二、数据预处理0、导入包和数据1、列名重命名2、提取数据中时间,方便后续分析绘图三、数据可视化1、美国各个地区销售额的分布&…...

GPT-4技术报告
摘要 链接:https://cdn.openai.com/papers/gpt-4.pdf 我们汇报了GPT-4的发展,这是一个大规模的多模态模型,可以接受图像和文本输入并产生文本输出。虽然在许多现实场景中,GPT-4的能力不如人类,但它在各种专业和学术基…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...