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

news2024/12/26 12:08:02

正在不断地完善中,预计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.coloradmin.cn/o/868578.html

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

相关文章

Scractch3.0_Arduino_ESP32_学习随记_蓝牙键盘(三)

C02蓝牙键盘 目的器材程序联系我们 目的 通过C02实现蓝牙键盘 器材 硬件: 齐护机器人C02 购买地址 软件: scratch3.0 下载地址:官网下载 程序 在P5口连接按钮模块。 蓝牙键盘组合按键动作的实现。 当对应按键按下时模拟键盘动作,先按下ctrl然后按下对应组合键…

Scractch3.0_Arduino_ESP32_学习随记_IO中断(六)

IO中断 目的器材程序联系我们 目的 ESP32 IO中断的使用。 中断: 当IO中断事件发生时,MCU将优先执行中断的程序。 打个比方: 你正在读一本书,突然手机收到一条紧急消息。你不想错过这个重要的消息,所以你立即停下手中的…

【总结】Javaweb和Java项目的比较

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理Javaweb中的关键点和需要注意的地方🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下&#x1f…

计算机网络核心-数据交换

1 概述 计算机网络的核心即数据交换。通过数据交换将数据从源主机发送到目的主机。 2 为什么需要数据交换 如果不是数据交换的方式,而是每两台主机直接连接,则会产生N^2链路问题。 即,假设有N台主机,两两间建立连接&#xff0c…

STM32F429IGT6使用CubeMX配置外部中断按键

1、硬件电路 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、NVIC配置 PC13相同 5、生成工程配置 6、部分代码 中断回调函数 /* USER CODE BEGIN 0 */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if(GPIO_Pin GPIO_PIN_0){HAL_GPIO…

自动测试框架airtest应用二:咪咕爱看能量兑换

一、背景介绍 咪咕爱看是中国移动旗下的一款视频播放软件,可以观看众多电影、电视剧、综艺视频,并且移动环境下观看视频还能获得能量,能量可以兑换流量和消费券。它曾经是一款良心APP,不过经过多年调整,现在大部分电影…

android,Compose,消息列表和动画(点击item的时候,就会删除)

Compose,消息列表和动画(点击item的时候,就会删除) package com.example.mycompose08import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundat…

基于机器学习进行降雨预测 -- 机器学习项目基础篇(13)

在本文中,我们将学习如何构建一个机器学习模型,该模型可以根据一些大气因素预测今天是否会有降雨。这个问题与使用机器学习的降雨预测有关,因为机器学习模型往往在以前已知的任务上表现得更好,而这些任务需要高技能的个人来完成。…

面试八股文Mysql:(2)数据库调优

1. SQL优化很有必要 数据库优化在提升系统性能是很重要的一个方面,不管是MySQL还是MongoDB还是其它的数据库。 SQL优化在提升系统性能中是成本最低 && 优化效果最明显的途径,可以让吞吐量更大,响应速度更快。如果你的团队在SQL优化这…

阿里云服务器部署RabbitMQ流程

阿里云百科分享使用阿里云服务器部署RabbitMQ流程,RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,用于在分布式系统中存储转发消息,有良好的易用性、扩展性和高可用性。本文介绍如何通过ECS实例部署Rabbi…

九、多态(1)

本章概要 向上转型回顾 忘掉对象类型 转机 方法调用绑定产生正确的行为可扩展性陷阱:“重写”私有方法陷阱:属性与静态方法 多态是面向对象编程语言中,继数据抽象和继承之外的第三个重要特性。 多态提供了另一个维度的接口与实现分离&…

Qt5开发视频播放器

一、播放器界面UI设计 控件对象名位置(坐标点)对象名称组件名称备注Widget(0, 0, 809, 572)WidgetQWidgetlabellabelQLabel播放窗口label_2label_2QLabelvoice_controlvoice_controlQSlider音量滑动条btn_openbtn_openQPushButton打开文件按钮label_4la…

在阿里云服务器上安装Microsoft SharePoint 2016流程

本教程阿里云百科分享如何在阿里云ECS上搭建Microsoft SharePoint 2016。Microsoft SharePoint是Microsoft SharePoint Portal Server的简称。SharePoint Portal Server是一个门户站点,使得企业能够开发出智能的门户站点。 目录 背景信息 步骤一:添加…

Spring循环依赖-实践三级缓存的再次理解

目录 Spring循环依赖流程图场景:**A 依赖B**; **B依赖A、C**; **C依赖A**A,B, C三个类的定义容器类测试输入如下 总结 Spring循环依赖流程图 很早之前阅读源码写过总结: https://github.com/doctording/spring-framework-5.1.3.RELEASE/blob…

8/12 题解

解题思路 贪心&#xff0c;小的搭配大的&#xff0c;和会最小 AC代码 #include <iostream> using namespace std;int main() {int n;cin >> n;int l 1;int r n;while(l < r){ cout << l << ;l;cout << r << ;--r;if(l r){cout …

java 9的新特性解读(3)

目录 语法改进&#xff1a;try语句 String存储结构变更 Motivation Description 那StringBuffer 和 StringBuilder 是否仍无动于衷呢&#xff1f; 集合工厂方法&#xff1a;快速创建只读集合 语法改进&#xff1a;try语句 Java 8 中&#xff0c;可以实现资源的自动…

JavaScript【瀑布流-页面布局、动态设置内容居中、动态设置图片位置、页面触底、上拉加载、页面布局、动态切换、页面布局】(十五)

目录 DOM实操-瀑布流-页面布局 瀑布流特点 DOM实操-瀑布流-动态设置内容居中 DOM实操-瀑布流-动态设置图片位置 DOM实操-瀑布流-页面触底 DOM实操-瀑布流-上拉加载 DOM实操-轮播图-页面布局 轮播图 轮播图特点 DOM实操-轮播图-动态切换 DOM实操-放大镜-页面布局 放大…

Leetcode-每日一题【剑指 Offer 25. 合并两个排序的链表】

题目 输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1&#xff1a; 输入&#xff1a;1->2->4, 1->3->4输出&#xff1a;1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 解题思路 1…

Java对象内存结构、对象在内存是什么样的

我们知道Java对象分配在堆内存中&#xff0c;一个对象在堆内存中的存储布局可以分为三部分&#xff1a; 对象头Header实例数据对齐填充 1. 对象头Header 对象头部分又包含两部分&#xff1a; 第一部分是用于存储对象自身运行时数据&#xff0c;例如哈希码、GC分代年龄等第二…

时序预测 | MATLAB基于扩散因子搜索的GRNN广义回归神经网络时间序列预测(多指标,多图)

时序预测 | MATLAB基于扩散因子搜索的GRNN广义回归神经网络时间序列预测(多指标,多图) 目录 时序预测 | MATLAB基于扩散因子搜索的GRNN广义回归神经网络时间序列预测(多指标,多图)效果一览基本介绍程序设计学习小结参考资料效果一览