【kubernetes】k8s的面试宝典,等你来拿哦

目录

一、pod的生命周期

二、创建 pod 的工作流程

三、ingres 有哪些组件并且描述出组件作用 ?

四、ingress 的工作原理

五、ingress 暴露服务的方式

六、pod 的组成

七、pod的本身性质(pod的种类与说明)

八、k8s命令

8.1在k8s中如何查看命名空间nanjing中的pod的IP

8.2k8s 中pod无法启动怎么排查原因?

九、K8S 核心组件有哪些?功能是什么?

十、k8s 工作流程  (创建nginx 模版为例)


一、pod的生命周期

收到kubectl指令-->初始化容器(init container),生成文件(init可以有多个,但是不可以同时运行)-->创建容器成功-->start容器-->readnessProbe(就绪性探针:就绪检测--> liveness Probe (存活性探针):生存检测-->stop容器 

① Pause 阶段:当 Pod 中的容器被暂停时,Pod 会进入 Pause 阶段。这通常发生在节点上发生调度变化时,为了确保容器状态的一致性,Pod 会被暂停并且等待恢复。

② Init 阶段:如果 Pod 中定义了 Init 容器,那么在主容器启动之前,Init 容器会先启动并执行其初始化任务。Pod 进入 Init 阶段直到所有 Init 容器都成功完成。

③应用启动阶段:一旦所有的 Init 容器成功完成,主容器将会启动并开始执行应用程序。

④ 存活阶段:Pod 中的容器正在运行,并且没有出现致命错误,此时 Pod 处于存活状态。

⑤  就绪阶段:Pod 中的容器已经准备好接收流量。如果 Pod 中的所有容器都已经就绪,那么整个 Pod 就处于就绪状态,可以开始接收请求。

二、创建 pod 的工作流程

kubectl ->auth -> apiserver 
apiserver -> etcd 
scheduler/controller manager watch apiserver (create pod 的事件)
shceduler 发送list 给apiserver -> etcd 获取后端节点信息
以此来进行预选优选 -> 将结果返回给api-server 
controller 来一轮以上的
kubelet watch api-server 发现create Pod 创建事件,获取创建pod所需资源与策略
kubelet 与cri 接口交互,调用docker 完成容器创建,并且调用控制器资源,完成Pod 创建 
kubelet 通过metrics 监控、采集本地节点的资源状态信息 ——>周期性报告给api-server 
api-server 再将信息写入etcd中

三、ingres 有哪些组件并且描述出组件作用 ?

Ingress 包含两大组件:Ingress Controller 和 Ingress

  • Ingress Controller 会根据定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller
  •  Ingress 控制器不同于Deployment 控制器的是,Ingress控制器不直接运行为kube-controller-manager的一部分,它仅仅是Kubernetes集群的一个附件,类似于CoreDNS,需要在集群上单独部署

四、ingress 的工作原理

  • ingress-controller是接受用户请求并且转发,外界看ingress-controller是转发给pod的,   其实并不是,而是转发到service上面,他是通过读取ingress-controller通过和 kubernetes APIServer 交互, ingress配置文件会保存在etcd当中并且ingress也配置定制了哪个域名发送到哪个service当中,
  • 然后会生成一个nginx配置,并且他会写入到运行的控制器的pod当中。在pod当中会实现nginx服务以及导入到nginx配置文件中nginx.conf
  •  然后reload加载,此时此刻控制器就知道了这个域名该转发到哪个service---endpoints(里面是不是有很多端点),
  • 然后再由我们的service请求转到相应关联操作的pod上面,所以说对外界来看是ingress来转发的,实际上并不是,而是用户把请求转发给ingress-controller控制器,  根据ingress的资源配置找到所对应的service  ,然后再由service转发到pod

五、ingress 暴露服务的方式

  • 方式一:Deployment+LoadBalancer 模式的 Service

如果要把ingress部署在公有云,那用这种方式比较合适。用Deployment部署ingress-controller,创建一个 type为 LoadBalancer 的 service 关联这组 pod。大部分公有云,都会为 LoadBalancer 的 service 自动创建一个负载均衡器,通常还绑定了公网地址。 只要把域名解析指向该地址,就实现了集群服务的对外暴露

  • 方式二:DaemonSet+HostNetwork+nodeSelector

用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。这时,ingress-controller所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器。该方式整个请求链路最简单,性能相对NodePort模式更好。缺点是由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod。 比较适合大并发的生产环境使用。

  • 方式三:Deployment+NodePort模式的Service

同样用deployment模式部署ingress-controller,并创建对应的service,但是type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求。该方式一般用于宿主机是相对固定的环境ip地址不变的场景。
NodePort方式暴露ingress虽然简单方便,但是NodePort多了一层NAT,在请求量级很大时可能对性能会有一定影响。

六、pod 的组成

① Pod 中有几种容器
init 初始化 ,阻塞主容器运行,初始化后方可运行主容器
pause 基础容器: 提供network 的 namespace 和 共享存储
业务容器: 跑Pod 主应用 
(POD中跑什么:微服务、数据库、监控、日志分析、mq、业务网关-类似Nginx的功能 SDK WSGI CGI等接口或协议的支持)

② Pod内网络环境
共享形式,类似于docker-container 模式   通过localhost 通讯

七、pod的本身性质(pod的种类与说明)

① 自主式pod:没有自愈能力( Pod被删除后不会重启拉起新的pod)

② 控制器管理的pod:有自愈能力( Pod被删除后会重启拉起新的pod)

八、k8s命令

8.1在k8s中如何查看命名空间nanjing中的pod的IP

kubectl get pods -n nanjing -o wide

8.2k8s 中pod无法启动怎么排查原因?

kubectl describe pod

kubectl logs

九、K8S 核心组件有哪些?功能是什么?

  • api-server :所有请求都经过该组件,负责整个K8S 集群的协调、交互
  • scheduler  :为集群资源提供指向调度能力,分为默认调度、节点标签调度、亲和反亲和、污点容忍等调度方式
  • etcd  :记录K8S集群中所有集群资源信息
  • controller manager  :负责控制器资源管理的组件
  • kubelet  :节点的核心代理 负责与api-server 交互(watch api-server的事件)具体执行于节点,并周期统计节点资源信息,返回给api-server 
  • kube-proxy :K8S 集群中L4负载均衡、反向代理的组件

十、k8s 工作流程  (创建nginx 模版为例)

  • 首先要明确有kubernetes环境,然后启动之后,master和node都会将自身的信息存储到etcd数据库中
  • kubectl 首先创建命令 nginx服务 --> 他的安装请求会到->auth(认证)--> 然后被发送到master节点的apiServer(资源操作的唯一入口)组件
  • apiServer组件会调用scheduler组件(负责集群资源调度)来决定到底应该把这个服务安装到哪个node节点上,在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer
  • apiServer调用controller-manager(负责维护集群的状态)去调度Node节点安装nginx服务
  • kubelet(负责维护容器的生命周期)接收到指令后,会通知docker,然后由docker来启动一个nginx的pod,pod是kubernetes的最小操作单元,容器必须跑在pod中至此,
  • 一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy(负责提供集群内部的服务发现和负载均衡)来对pod产生访问的代理

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础入门学习Python第二阶04SQL详解03

MySQL 新特性 JSON类型 很多开发者在使用关系型数据库做数据持久化的时候,常常感到结构化的存储缺乏灵活性,因为必须事先设计好所有的列以及对应的数据类型。在业务发展和变化的过程中,如果需要修改表结构,这绝对是比较麻烦和难…

AppStore搜索优化方法(ASO)

在竞争激烈的 App Store 中,如何让你的应用脱颖而出,吸引更多用户下载?其实从官方文档描述中可以总结一些优化技巧,这是官方描述地址:搜索优化 – App Store – Apple Developer。通过官方描述我们可以总结到影响搜索结…

commander.js 入门指南:构建强大的命令行界面 (全网最全教程)

在Node.js的世界里,创建用户友好的命令行界面(CLI)对于许多应用程序和工具来说至关重要。Commander.js 是一个广受欢迎的 Node.js 包,它为开发者提供了一套简洁而强大的 API,用于快速创建功能完备、用户友好的命令行界…

如何用TCC方案轻松实现分布式事务一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 哈喽,大家好!我是小米,一个热爱技术的活力小青年,今天要和大家分享的是一种在分布式系统中实现事务的一种经典方案——TCC(Try Confirm Canc…

【Ubuntu】超详细安装Ubuntu系统

鉴于有些小伙伴在安装Ubuntu系统的时候遇到很多问题,因此打算编写一篇记录一下安装Ubuntu系统的整个过程~互相学习! 一、制作U盘启动 准备一个大于8G以上的U盘,这里我使用的是16G的U盘下载UltraISO工具 网站地址:UltraISO准备Ub…

C++ Primer 第五版 第15章 面向对象程序设计

面向对象程序设计基于三个基本概念:数据抽象、继承和动态绑定。 继承和动态绑定对编写程序有两方面的影响:一是我们可以更容易地定义与其他类相似但不完全相同的新类;二是在使用这些彼此相似的类编写程序时,我们可以在一定程度上…

HTML静态网页成品作业(HTML+CSS)—— 金宝贝儿童教育机构介绍网页(2个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…

Stable diffusion prompts 使用语法、参数讲解、插件安装教程

Stable diffusion prompts 使用语法、参数讲解、插件安装教程 本文基于 Stable diffusion WebUI 进行讲解(安装在 AutoDL 上,安装在本地电脑上的也同样适用本教程)。 初始界面: 文件目录结构: 上图红框中的 4 个文件…

requests模块编写漏洞检测工具

#尝试使用python登录pikachu爆破模块 #发送post数据包,包含用户名密码,对接受到的响应进行判断,如何为登录成功 #爆破密码 with open(passwor.txt,r) as f: passwordf.readlines() for i in password: data {username: admin, password: i, …

数据结构——算法和算法效率的度量

目录 一、引言 二、算法 1 算法的基本概念 2 算法的复杂度 2.1 时间复杂度 2.1.1 概念 2.1.2 大O的渐进表示 3 算法的空间复杂度 3.1 概念 3.2 实例 4 实例分析 5 结论 一、引言 大家在写代码的时候有没有发现写同样功能的代码有多种不同的写法,而不同的代…

51种企业应用架构模式详解

01 什么是企业应用 我的职业生涯专注于企业应用,因此,这里所谈及的模式也都是关于企业应用的。(企业应用还有一些其他的说法,如“信息系统”或更早期的“数据处理”。)那么,这里的“企业应用”具体指的是什…

[原型资源分享]经典产品饿了么UI模版部件库

​部件库预览链接:https://f13gm0.axshare.com 支持版本: Axrure RP 8 文件大小: 3MB 文档内容介绍 基本部件:表单样式:12款、数据样式:10款、服务样式:6款、导航:5款、业务组件:7款、 模板…

python把简体中文转换为繁体中文

Python 可以使用第三方库来将简体中文(简体中文)转换为繁体中文(繁体中文)。一个常用的库是 opencc-python-reimplemented,它是 Open Chinese Convert (OpenCC) 的 Python 实现,OpenCC 是一个开源的中文简繁…

MySQL之查询性能优化(三)

查询性能优化 重构查询的方式 在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的记过——而不是一定总是需要从MySQL获取一模一样的结果集。有时候,可以将查询转换一种写法让其返回一样的结果,但是性能更好。但也可以通过修…

Python魔法之旅-魔法方法(14)

目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…

在Debian系统上赋予普通用户ping 权限

在Debian系统上,普通用户默认情况下没有权限使用 ping 命令,因为它需要发送 ICMP 包,这通常需要 root 权限。为了允许普通用户使用 ping,可以设置 ping 命令的 setuid 位。以下是具体的步骤: 查找 ping 命令的位置&am…

2024年度自贡市社会民生重大科技计划项目申报要求、时间流程

一、申报要求 申报项目需符合以下申报要求和申报指南要求,申报资料需在“自贡市科技综合业务服务平台”中的“自贡市重点科技计划项目管理系统”上传。 (一)项目申报单位要求。 1.项目申报单位包括项目牵头单位和项目合作单位。 2.多家单…

【Python】pyinstaller打包时添加详细信息

在要被打包的py文件同级目录新建version.txt,写入以下内容 # UTF-8 # # For more details about fixed file info ffi see: # http://msdn.microsoft.com/en-us/library/aa381058.aspx # VSVersionInfo(ffiFixedFileInfo(filevers(1, 4, 0, 5),prodvers(1, 4, 0, 5…

SpringBoot使用RabbitMQ实现延迟队列

SpringBoot使用RabbitMQ实现延迟队列 需求和目标名词解释实现方式引入依赖添加配置文件配置类死信队列消费者即时队列消费者延迟消息发送结果注意 需求和目标 商城系统,用户下单后若15分钟内仍未完成支付,则自动取消订单,若已支付&#xff0c…

重组蛋白的定量定性方法,你了解吗?

重组蛋白的定量和定性分析是蛋白质工程和生物技术中至关重要的步骤,用于确保蛋白质的表达、纯度和功能性符合预期。以下是小编整理的一些常用的方法以及实验介绍,希望这些方法帮助研究人员详细了解重组蛋白的特性。 主要的定性方法 1 WB(Wes…