《Kubernetes知识篇:常见面试题汇总》

正在不断地完善中,预计1个月的时间完成,覆盖整个Kubernetes知识面总结!


一、概述

1、简述什么是 Kubernetes?

kubernetes(常简称k8s),是一个 为容器化应用提供自动化部署、扩展和管理的开源平台。它最初由Google开发,并与2014年发布为开源项目。


2、为什么需要 Kubernetes,它能做什么?

1、 服务发现和负载均衡: K8S可以使用DNS名称或IP地址来暴露容器,如果进入容器流量比较大,K8S可以负载均衡并分配网络流量,从而使部署稳定。
2、 弹性伸缩: K8S可以根据负载和资源需求自动调整应用程序的副本数。
3、 故障自我修复: 比如有5个容器运行,其中一个突然挂掉,K8S可以实现自动恢复一个容器或者自动创建一个容器。
4、 秘钥与配置管理: 在Kubernetes中,你可以使用秘钥对象(Secret)和配置映射对象(ConfigMap)来管理敏感信息和应用程序配置。。
5、 存储编排:自动挂载所选存储系统,包括本地存储、诸如 AWS 或 GCP 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Ceph、Cinder 这类网络存储系统。。
6、 自动部署和回滚:如果Nginx更新了最新版,发现一些问题,一些相关配置消失,k8S能快速地将版本回滚。
7、 自动完成装箱计算:你可以告诉kubernetes每个容器需要多少CPU和内存。 Kubernetes可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
8、 批量执行:对于job类型任务,K8S可以做到批量的执行。


二、架构

1、简述 Kubernetes 集群相关组件?

在这里插入图片描述
1、控制平面组件(Control Plane Components)

1、kube-apiserver:kube-apiserver 是Kubernetes 控制平面中最重要的组件之一, 它是整个集群的控制中心,提供了 Kubernetes 集群的 RESTful API 服务。简单的说,任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。
2、kube-controller-manager:controller-manager 作为集群内部的管理控制中心,负责集群内Node、Pod副本、服务端Endpoint、服务账号(ServiceAccount)、命名空间(Namespace)、资源定额(Resoucequota)等的管理,当某一个节点宕机时,controller manager会及时发现故障并执行自动化修复流程,确保集群始终处于预期的工作状态。
3、kube-scheduler:kube-scheduler 是控制平面的组件, 负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行
4、cloud-controller-manager:cloud-controller-manager是 用于与底层云提供商交互的控制器。cloud-controller-manager 允许云供应商代码和 Kubernetes 核心彼此独立发展,在以前的版本中,Kubernetes 核心代码依赖于云提供商特定的功能代码。在未来的版本中,云供应商的特定代码应由云供应商自己维护,并与运行 Kubernetes 的云控制器管理器相关联.
5、etcd:一个分布式键值存储系统,用于保存集群的配置数据和状态信息。

2、Node 组件

1、kubelet:kubelet 会在集群中每个节点(node)上运行。 它 保证容器(containers)都运行在Pod中
2、kube-proxy:kube-proxy是 集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
3、容器运行时(Container Runtime):容器运行环境是 负责运行容器的软件。ubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。

3、插件(Addons)

1、DNS: 为Kubernetes服务提供DNS记录
2、Web 界面(仪表盘):Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身, 并进行故障排除。
3、容器资源监控:容器资源监控将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中, 并提供浏览这些数据的界面。
4、集群层面日志:集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中, 这种集中日志存储提供搜索和浏览接口。
5、网络插件:网络插件是实现容器网络接口(CNI)规范的软件组件。它们 负责为Pod分配IP地址,并使这些Pod能在集群内部相互通信


2、简述 Kubernetes 中各模块如何与API server通信?


3、简述 Kubernetes Scheduler 作用及实现原理?


4、简述 Kubernetes kubelet 的作用?


5、简述 Kubernetes kube-proxy的作用?


二、概念


三、容器

1、简述 Kubernetes 中 容器 的几种状态?

容器的状态有三种: Waiting(等待)、Running(运行中)和 Terminated(已终止)


2、简述 Kubernetes 中镜像的下载策略?

1、 Always:总是从指定的仓库中获取镜像。
2、 Never:禁止从仓库中下载镜像,也就是说只能使用本地镜像。
3、 IfNotPresent:如果本地有目标镜像,就不从镜像仓库下载,如果本地没有目标镜像,则从镜像仓库下载。


四、工作负载

4.1、Pod

1、简述 Kubernetes 创建一个 Pod 的主要流程?

1、 用户通过控制台或yaml文件创建pod
2、API Server将yaml文件中的信息写入etcd,写入完成后, API Server触发watch机制,将准备创建的pod信息转发给scheduer调度器,调度器使用调度算法将pod调度到合适的节点上,API Server再把绑定好的node重新写入etcd
3、此时 kubelet介入,获取到pod信息后出发docker run创建一个容器,再向API Server上报Pod的一些状态信息,API server再把这些信息写入etcd总,完成了整个流程。

如下图所示:
在这里插入图片描述


2、简述 Kubernetes 中 Pod的生命周期包括以下几个阶段?

取值描述
Pending等待被调度或者正在通过网络下载镜像,这可能需要点时间
Runningpod已经被调度到其中一个节点上,pod中所有容器已经创建,至少有一个容器仍在运行,或者正处于启动或重启状态
SuccessedPod中所有容器都已成功终止,并且不会重启
FailedPod中所有容器已终止,并且至少有一个容器因为失败终止
Unknown因为某些原因无法取得pod的状态,这种情况通常是因为与pod所有所在主机通信失败

3、简述 Kubernetes 中 Pod 的重启策略?

Pod 的spec中包含一个restartPolicy字段,其可能取值包括 Always、OnFailure 和 Never。 默认值是 Always。Always:在任何情况下,只要容器不在运行状态,就自动重启容器;OnFailure: 只在容器异常时才自动重启容器;Never: 从来不重启容器。


4、简述 Kubernetes中可以使用几种方式对Pod进行健康检查?

1、 livenessProbe(存活探针) 用于检查pod中的容器是否依然存活。如果存活探测失败,则kubelet会杀死容器,并且会根据容器重启策略进行重启,如果容器不提供存活探针,则默认状态为Success
2、 readinessProbe(就绪探针) 用于检查容器是否准备好接收流量。如果就绪探针失败,则不会将流量路由到该pod
3、 startupProbe(启动探针) 用于检查容器中的应用是否已经启动。如果提供了启动探针,则其它探针都会被禁用,直到此探针成功为止。如果启动探针失败,kubelet会杀死容器,而容器会根据重启策略进行重启,如果容器没有启动探测,则默认状态为Success


5、简述 Kubernetes中使用探针来检查容器有哪些不同的方法?

1、 HTTP 探针:发送HTTP GET请求到容器的指定路径,若返回状态码在200-399之间则认为存活。
2、 TCP 探针:通过TCP连接到容器的指定端口,若连接成功则认为存活。
3、 Exec 探针:执行容器内部的命令,若命令执行成功则认为存活。


4.2、工作负载资源

在Kubernetes中,工作负载是指要 在集群中运行的应用程序或服务。为了减轻用户的使用负担,通常不需要用户直接管理每个pod,而是 使用负载资源来替用户管理一组pod,这些负载资源通过配置控制器来确保pod的数量和状态与用户期望的保持一致。

Kubernetes 提供若干种内置的工作负载资源

1、 ReplicaSet:ReplicaSet用于 定义一组Pod的期望副本数量。它确保指定的Pod副本数始终处于运行状态,如果有Pod在集群中意外终止,ReplicaSet将自动启动新的Pod以替代它。 ReplicaSet是在K8s早期版本中使用的资源类型
2、 Deployment:Deployment 适合在集群上管理无状态应用工作负载,是ReplicaSet的一个高级抽象,在ReplicaSet的基础上提供了更强大和灵活的功能。Deployment允许定义更新策略,实现应用程序的滚动更新和回滚操作,它还提供了扩展和收缩应用程序副本数量的能力。
3、 StatefulSet:statefulSet是 用于运行有状态应用程序的资源对象。它为每个Pod分配唯一的标识符,并在Pod重启时确保它们保持稳定,有序和持久化。
4、 DaemonSet:DaemonSet用于 在集群中的每个节点上运行一个副本的Pod。它常用于部署一些与节点紧密关联的后台任务,如日志收集和监控代理。
5、 Job:job用于 在集群中运行一次性任务,例如批处理任务或定期清理任务。它确保任务成功完成后终止,并可根据需要并行运行多个任务。
6、 CronJob:CronJob是一个 基于时间调度的作业。它可以指定一个时间表来定期运行任务,例如定时备份或定时数据处理。


五、服务、负载均衡和联网


六、存储


七、配置


八、安全

1、简述 Kubernetes 如何保证集群的安全性?


九、策略


十、调度、抢占和驱逐

1、简述 Kubernetes 中 Pod 的常见调度方式?

1、 自动调度:运行在哪个节点上完全由kube-scheduler经过算法计算得出。
2、 定向调度:nodeName、nodeSelector。
3、 亲和性调度:NodeAffinity、PodAffintty、PodAntiAffinity。
4、 污点(容忍)调度:Taints、Toleration


2、简述 Kubernetes中污点、容忍度、排斥等级?

1、 污点(taints):污点(taints)是 一种在节点(node)上设置的标记,用于阻止pod调度到该节点上,除非该pod具有与该节点匹配的容忍度。
2、 容忍度(tolerations):容忍度(tolerations)是 一种在pod中设置的属性,用于声明pod对节点上的污点的容忍程度。
3、 排斥等级(effect):用于定义对pod对象的排斥等级,它主要包括三种类型:NoSchedule、PreferNoSchedule、NoExecute。

取值描述
NoSchedule不会将pod调度到具有污点的节点上
PreferNoSchedule尽量避免将pod调度到具有污点的节点上
NoExecute不会将pod调度到具有污点的节点上,同时驱逐Node节点上已经存在的pod


十一、集群管理


十二、扩展Kubernetes


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

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

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

相关文章

cs231n assignment2 q5 PyTorch on CIFAR-10

文章目录 嫌啰嗦直接看源码Q5 :PyTorch on CIFAR-10three_layer_convnet题面解析代码输出 Training a ConvNet题面解析代码输出 ThreeLayerConvNet题面解析代码输出 Train a Three-Layer ConvNet题面解析代码输出 Sequential API: Three-Layer ConvNet题面解析代码输出 CIFAR-1…

React Native 图片组件基础知识

在 React Native 中使用图片其实跟 HTML 中使用图片一样简单,在 React Native 中我们使用Image组件来呈现图片的内容,其中主要的属性有:source。这个属性主要是设置图片的内容,它可以是网络图像地址、静态资源、临时本地图像以及本…

nginx基于主机和用户访问控制以及缓存简单例子

一.基于主机访问控制 1.修改nginx.conf文件 2.到其他主机上测试 (1)191主机 (2)180主机 二.基于用户访问控制 1.修改nginx.conf文件 2.使用hpasswd为用户创建密码文件,并指定到刚才指定的密码文件webck 3.测试…

SQL注入之Oracle注入

SQL注入之Oracle注入 7.1 SQL注入之Oracle环境搭建 前言 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统…

如何将安卓 Gradle 模块打包发布到本地 Maven 仓库

文章目录 具体流程 笔者的运行环境: Android Studio Flamingo | 2022.2.1 Android SDK 33 Gradle 8.0.1 JDK 17 Android 的 Gradle 项目与一般的 Gradle 项目是不同的,因此对将 Gradle 模块打包发布到本地 Maven 仓库来说,对普通 Gradle …

【CTF-MISC】1和0的故事(二维码定位点补全)

题目链接:https://ctf.bugku.com/challenges/detail/id/216.html 文件中得到一个01方阵,可以在010 Editor中高亮设置将1涂为黑色、0涂为白色,如下图所示。 截图以后调整大小再加入三个定位点即可得到二维码。 扫描即可得到答案。 要注意的是…

轧钢传动控制系统液压比例阀控制器

轧钢传动控制系统是用于控制轧钢机械的电气系统,包括调速和控制系统两部分。 调速系统主要用来平滑调节转速,其核心部件是直流电动机调速单元。控制系统主要用于调节和稳定轧机的工作状态,使轧制过程始终处于最佳工作状态,其核心…

Java-类型和变量(基于C语言的补充)

一个简单的Java程序 args){ System.out.println("Hello,world"); } }通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成: 1.源文件(扩展名为*.java):源文件带有类的定义…

43 | 抖音大V人民日报粉丝数分析

背景介绍 抖音是一个面向全年龄的音乐短视频社区平台,如今已成为最火的短视频软件,无数短视频创作者通过抖音分享生活,分享技能,分享美好。其中有点赞、评论、转发、关注等功能。 我们试图分析“大 V”即粉丝数量相对较多的博主的涨粉数量和点赞、评论、转发之间的关系,…

利用C++nlohmann库解析json文件

json文件示例&#xff1a; 代码运行环境VS2019 一、git下载nlohmann库文件源代码 源代码文件目录 二、利用VS2019新建工程&#xff0c;并配置项目属性 配置VC目录---包含目录 三、项目源代码 #include <iostream> #include <fstream> #include <nlohmann/jso…

Kubernetes pod调度约束[亲和性 污点] 生命阶段 排障手段

调度约束 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面建立 Pod 和 Container。 APIServer…

伙伴云CEO戴志康:让数据和业务更好的互通展现,数字化与可视化同步进行

近日&#xff0c;零代码平台伙伴云产品「页面」功能正式上线&#xff0c;在【小伙开麦】直播间&#xff0c;CEO戴志康和产品经理共同为在线观众展示「页面」的功能与使用技巧&#xff0c;让小伙伴们大呼过瘾&#xff01;好玩、好用、好看的「页面」&#xff0c;到底有哪些亮点&…