K8S面试题学习3

参考K8S面试题(史上最全 + 持续更新)_kubernetes常见面试题-CSDN博客做的个人总结,规划是每天看10题,thx!

1. Pod的重启策略是什么?

        Always:默认策略,只要pod终止就重启

        OnFailure:仅在pod对象出现错误时重启

2. Pod创建过程?

        1.使用kubectl run来创建pod

                首先,用户通过kubectl提交需要创建pod的基本信息到api-server;

                api-server会优先验证客户端的权限信息,验证通过开始处理创建请求生成pod对象信息,并将信息存入到etcd,然后返回信息给客户端;

                api-server开始反馈etcd中pod对象的变化,其他组件通过watch机制来跟踪apiserver上的变化;

                scheduler发现有新的pod对象要创建时,开始调用内部的算法机制为pod分配最佳主机,并将结果更新到api-server;

                node上的kubelet通过watch机制跟踪apiserver发现有pod要调度到本节点的时候,尝试调用docker并启动容器,并将结果反馈给api-server;

                api-server将收到的pod状态信息存入etcd中。

        2.使用deployment来创建pod

                首先,用户通过kubectl create命令或者kubelet apply来提交需要创建的deployment资源请求;

                api-server收到资源创建请求后,会对客户端进行身份认证,在客户端~./kube文件夹下,已经设置好了相关的用户认证信息,当api-server确定用户请求合法后,会接受本次操作,并把相关信息保存到etcd中,然后返回确认信息给客户端;

                api-server开始反馈etcd中pod对象的变化,其他组件通过watch机制来跟踪apiserver上的变化;

                controller-manager组件会监听api-server的信息,此时Deployment Controller发现有新的deployment要创建,那么它就会去创建一个ReplicaSet,一个ReplicaSet的产生,又被另一个叫做ReplicaSet Controller监听到了,紧接着它就会去分析ReplicaSet的语义,它了解到是要依照ReplicaSet的template去创建Pod, 它一看这个Pod并不存在,那么就新建此Pod,当Pod刚被创建时,它的nodeName属性值为空,代表着此Pod未被调度;

                调度器Scheduler组件开始介入工作,Scheduler也是通过watch机制跟踪apiserver上的变动,发现有未调度的Pod,则根据内部算法、节点资源情况,pod定义的亲和性反亲和性等等,调度器会综合的选出一批候选节点,在候选节点中选择一个最优的节点,然后将pod绑定该该节点,将信息反馈给api-server;

        kubelet组件布署于Node之上,它也是通过watch机制跟踪apiserver上的变动,监听到有一个Pod应该要被调度到自身所在Node上来,kubelet首先判断本地是否在此Pod,如果不存在,则会进入创建Pod流程,创建Pod有分为几种情况,第一种是容器不需要挂载外部存储,则相当于直接docker run把容器启动,但不会直接挂载docker网络,而是通过CNI调用网络插件配置容器网络,如果需要挂载外部存储,则还要调用CSI来挂载存储。kubelet创建完pod,将信息反馈给api-server,api-servier将pod信息写入etcd;
        Pod建立成功后,ReplicaSet Controller会对其持续进行关注,如果Pod因意外或被我们手动退出,ReplicaSet Controller会知道,并创建新的Pod,以保持replicas数量期望值。

3. 简述pod终止的流程?

        用户向apiserver发送删除pod对象的命令;

        apiserver中的pod对象信息会随着时间的推移而更新,在宽限期30s内,pod被视为dead;

        将pod标记为terminating状态;

        kubectl在监控到pod对象为terminating状态就会启动pod关闭过程;

        endpoint控制器监控到pod对象的关闭行为时将其从所有匹配到此endpoint的server资源endpoint列表中删除;
        如果当前pod对象定义了preStop钩子处理器,则在其被标记为terminating后会意同步的方式启动执行;
        pod对象中的容器进程收到停止信息;
        宽限期结束后,若pod中还存在运行的进程,那么pod对象会收到立即终止的信息;
        kubelet请求apiserver将此pod资源的宽限期设置为0从而完成删除操作,此时pod对用户已不可见。

4. pod的生命周期有哪几种?

        Pending:API server已经创建pod,但是pod还有一个或者多个容器的镜像没有创建,包括正在下载镜像的过程;

        Running:Pod内所有的容器已经创建,且至少有一个处于运行状态;

        Succeed:Pod内所有容器均已退出,并且不会在重启;

        Failed:Pod内所有容器均已退出,并且至少有一个容器为退出失败状态;

        Unknown:某种原因导致api-server无法获取pod状态,可能由于网络通信问题导致。

5. pod一致处于pending状态一般有哪些情况,怎么排查?

        1.调度失败

        2.pv、PVC无法创建

6. DaemonSet资源对象的特性?

        DaemonSet资源会在每个k8s集群节点上运行,并且每个节点只能运行一个pod,这是他与deployment资源对象最大的也是唯一的区别,所以在yaml编写中,不支持定义replicas,一般使用的场景为:去做每个节点的日志收集,监控每个节点的运行状态。

7. 删除一个Pod会发生什么事情?

        Kube-apiserver会接受到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,

        此时Pod的状态Terminating,kubelet看到pod标记为Terminating就开始了关闭Pod的工作;

        关闭流程如下:

        1)pod从service的endpoint列表中被移除;

        2)如果该pod定义了一个停止前的钩子,其会在pod内部被调用,停止钩子一般定义了如何优雅的结束进程;

        3)进程被发送TERM信号(kill -14);

        4)当超过优雅退出的时间后,Pod中的所有进程都会被发送SIGKILL信号(kill -9);

8. pod的初始化容器是干什么的?

        init container,初始化容器用于在启动应用容器之前完成应用容器所需要的前置条件,

初始化容器本质上和应用容器是一样的,但是初始化容器是仅允许一次就结束的任务,初始化容器具有两大特征:

        1、初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么kubernetes需要重启它直到成功完成;
        2、初始化容器必须按照定义的顺序执行,当且仅当前一个初始化容器成功之后,后面的一个初始化容器才能运行;

9. pod的资源请求、限制如何定义?

        pod的资源请求、资源限制可以直接在pod中定义

        主要包括两块内容:

                limits,限制pod能使用的最大cpu和内存,

                requests,pod启动时申请的cpu和内存。

10. pod的定义中有个command和args参数,这两个参数不会和docker镜像的entrypointc冲突吗?

        不会。在pod中定义的command参数用于指定容器的启动命令列表,如果不指定,则默认使用Dockerfile打包时的启动命令,args参数用于容器的启动命令需要的参数列表;

        特别说明:

        kubernetes中的command、args其实是实现覆盖dockerfile中的ENTRYPOINT的功能的。

 

        

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

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

相关文章

后端开发面经系列 -- 滴滴C++一面面经

滴滴C一面面经 公众号:阿Q技术站 来源:https://www.nowcoder.com/feed/main/detail/38cf9704ef084e27903d2204352835ef 1、const在C和C区别,const定义的类成员变量如何初始化? 区别 C中的const: 在C中,c…

STM32单片机ADC功能详解

文章目录 1. ADC概述 2. ADC结构图 3. 引脚定义 4. 转换模式 5. 数据对齐 6. 转换时间 7. 硬件电路 8. STM32使用ADC单/多通道检测数据 1. ADC概述 功能:ADC是一个将模拟信号(如电压)转换为数字信号的设备。在微控制器中&#xff0c…

Vitis HLS 学习笔记--理解串流Stream(1)

目录 1. 介绍 2. 示例 2.1 代码解析 2.2 串流数据类型 2.3 综合报告 3. 总结 1. 介绍 在Vitis HLS中,hls::stream是一个用于在C/C中进行高级合成的关键数据结构。它类似于C标准库中的std::stream,但是专门设计用于硬件描述语言(如Veri…

六级段落匹配

一个段落最多匹配2个句子 一个段落对应:0-2 适当放题 找到三个对应点就可以选 每看三个句子划关键词之后再自己回忆一遍关键词,看了36 37 38 就复述一遍关键词看了39 40 41就又从36开始复述关键词(334)看到最后一句话就又从头…

Linux实操之常用指令详解

文章目录 vi 和 vimvi 和 vim 基本使用 开机、重启和用户登录注销关机&重启命令用户登录和注销 用户管理基本介绍基本语法细节说明修改密码删除用户查询用户信息指令切换用户查看当前用户/登录用户用户组 实用指令指定运行级别帮助指令文件目录类时间和日期类搜索查找类压缩…

Python | Leetcode Python题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:row,col len(matrix),len(matrix[0])row_l,row_r 0,row-1while row_l < row_r:m (row_lrow_r)//2if target < matrix[m][0]:row_r m-1…

ICode国际青少年编程竞赛- Python-1级训练场-变量练习

ICode国际青少年编程竞赛- Python-1级训练场-变量练习 1、 a 8 for i in range(8):Dev.step(a)Dev.turnRight()a - 12、 a 3 for i in range(4):Dev.step(a)Dev.turnRight()a a 1 Dev.step(5)3、 a 4 for i in range(4):Dev.step(2)Dev.step(-5)Dev.step(3)Spaceship.…

JVM学习笔记【基础篇:垃圾回收】

自动垃圾回收 C/C的内存管理 ⚫ 在C/C这类没有自动垃圾回收机制的语言中&#xff0c;一个对象如果不再使用&#xff0c;需要手动释放&#xff0c;否则就会出现 内存泄漏。我们称这种释放对象的过程为垃圾回收&#xff0c;而需要程序员编写代码进行回收的方式为手动回收。 ⚫ …

ue引擎游戏开发笔记(34)——建立射击映射,并添加特效

1.需求分析&#xff1a; 准备处理射击系统&#xff0c;首先角色需要能射击&#xff0c;有反馈&#xff0c;先建立角色与控制器之间的映射&#xff0c;并添加简单特效&#xff0c;证明映射已经建立。 2.操作实现&#xff1a; 1.首先常规建立映射流程&#xff0c;具体可参考笔记…

线性表--数据结构设计与操作

单链表 1.单链表的定义&#xff1a; typedef struct LNode{Elemtype data;struct Lnode *next; }LNode ,*LinkList;//单链表的数据结构&#xff08;手写&#xff09; #include<iostream> #include<vector> #include<algorithm>typedef int TypeElem; //单链表…

如何解决3D模型变黑或贴图不显示的问题---模大狮模型网

在进行3D建模和视觉渲染时&#xff0c;经常会遇到模型表面变黑或贴图不显示的问题&#xff0c;这可能严重影响最终视觉效果的质量。这些问题通常与材质设置、光照配置或文件路径错误有关。本文将探讨几种常见原因及其解决方法&#xff0c;帮助3D艺术家和开发者更有效地处理这些…

☺☺☺☺☺☺☺栈的应用习题:有效的括号☺☺☺☺☺☺☺

目录 一解题思路&#xff1a; 二对解答代码分析&#xff1a; 三解答代码展示&#xff1a; 即浅学栈的创建后&#xff0c;可以简单利用其性质&#xff08;先进后出&#xff0c;后进先出&#xff09;来完成对一些题目的解答 如&#xff1a; 一解题思路&#xff1a; 这里我们可…

[法规规划|数据概念]金融行业数据资产和安全管理系列文件解析

“ 金融行业在自身数据治理和资产化建设方面一直走在前列。” 一直以来&#xff0c;金融行业由于其自身需要&#xff0c;都是国内开展信息化建设最早&#xff0c;信息化程度最高的行业。 同时&#xff0c;金融行业的数据治理、数据资产化以及过程中的管理要求和安全要求与其他…

Hive Partitioned Tables 分区表

Hive Partitioned Tables 分区表 1.分区表概念 Hive分区表&#xff08;Partitioned Tables&#xff09;是一种用于管理大量数据的机制&#xff0c;它可以将数据分散到不同的目录或分区中&#xff0c;以提高查询性能、优化数据存储和管理。 这种表结构可以根据某个列的值进行分…

【Ansible】ansible-playbook剧本

playbook 是ansible的脚本 playbook的组成 1&#xff09;Tasks&#xff1a;任务&#xff1b;通过tasks 调用ansible 的模板将多个操作组织在一个playbook中运行 2&#xff09;Variables&#xff1a;变量 3&#xff09;Templates&#xff1a;模板 4&#xff09;Handles&#xf…

基于C++从0到1手写Linux高性能网络编程框架(超清)

基于C从0到1手写Linux高性能网络编程框架(超清) TIME_WAIT状态存在原因有两点&#xff1a; 其一是可靠的中止tcp连接&#xff1b; 其二是保证让延迟的tcp报文有足够的时间被识别&#xff1b; 客户端在关闭连接阶段需要处理收到重复的结束报文&#xff0c;然后回复最后的ACK…

网络网络层之(4)IPv4协议

网络网络层之(1)IPv4协议 Author: Once Day Date: 2024年4月4日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

IDEA远程连接docker服务,windows版docker desktop

1.windows上安装docker desktop docker desktop下载地址&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 有的windows系统不支持安装docker desktop 安装完之后我们可以直接打开&#xff0c;可以选择不登录使用 我们用IDEA连接到docker …

什么是 AI Agent ?

&#xff08;注&#xff1a;本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 讲解的同时&#xff0c;也给你推荐一些实用的学习资源。 AI agent &#xff08;智能体 / 代理&#xff09;这个词儿最近非常流行&#xff0c;似乎「大语…

使用Three.js开发一个3D案例Demo

使用Three.js开发一个3D案例 最近在找工作&#xff0c;发现好多招聘要求都需要会Three.js&#xff0c;以前接触比较多的是2D开发&#xff0c;也就是平面开发&#xff0c;用到的做多的技术就是d3.js&#xff0c;现在3D开发已经成为了大势所趋&#xff0c;所以就学习下Three.js。…