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

1.K8S是什么?

        容器编排工具,主要用来管理容器化的一个应用,可以管理容器全部生命周期的应用

2.K8S的组件有哪些?有什么用?

        2个节点,7个组件

        master节点:负责管理集群,有kube-api-server、kube-controller-manager、kube-scheduler、etcd 组件

        node节点:容器真正运行的地方,有kubelet、kube-proxy、container-runtime

        下面分别介绍各个节点的作用:

        1.kube-api-server:api-server是K8S的重要核心组件之一,是K8S集群管理的统一访问入口,提供了RESTful API接口,api-server还是其他组件之间的数据交互和通信的枢纽,其他组件彼此之间并不会直接通信,其他组件对资源对象的增、删、改、查和监听操作都是交由api-server处理后,api-server再提交给etcd数据库做持久化存储,只有api-server才能直接操作etcd数据库,其他组件都不能直接操作etcd数据库,其他组件都是通过api-server间接的读取,写入数据到etcd。

        2.kube-controller-manager:KS8的控制管理器,是k8s集群内部的管理控制中心,也是k8s自动化功能的核心;controller-manager内部包含replication controller、node controller、deployment controller、endpoint controller等各种资源对象的控制器,每种控制器都负责一种特定资源的控制流程,而controller-manager正是这些controller的核心管理者。

        3.kube-scheduler:scheduler负责调度集群资源,为pod根据一系列复杂的算法找出合适的node节点,与需要创建的pod绑定

        4.etcd:是一个分布式的键值对存储数据库,主要是用于保存k8s集群状态数据,比如,pod,service等资源对象的信息;etcd可以是单个也可以有多个,多个就是etcd数据库集群,etcd通常部署奇数个实例

        5.kubelet:每个node节点上都有一个kubelet服务进程,kubelet作为连接master和各node之间的桥梁,负责维护pod和容器的生命周期,当监听到master下发到本节点的任务时,比如创建、更新、终止pod等任务,kubelet 即通过控制docker来创建、更新、销毁容器;每个kubelet进程都会在api-server上注册本节点自身的信息,用于定期向master汇报本节点资源的使用情况。

        6.kube-proxy:运行在node节点,实现Pod网络代理,维护网络规则和四层负载均衡工。kube-proxy会监听api-server中从而获取service和endpoint的变化情况,创建并维护路由规则以提供服务IP和负载均衡功能。简单理解此进程是Service的透明代理兼负载均衡器,其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。

        7container-runtime:容器运行所需要的环境

3.简述kubernetes的基本概念?

        1.master节点:K8S集群的管理节点,负责管理集群,提供资源访问入口,运行api-server、controller-manager、以及scheduler服务;

        2.node节点:运行pod的服务节点,是Pod运行的宿主机。运行docker eninge服务,守护进程kunelet及负载均衡器kube-proxy;

        3.pod:运行在node节点,一个或者多个容器的集合,用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。

        4.label:是一系列的Key/Value键值对,其中key与value可自定义。Label可以附加到各种资源对象上,如Node、Pod、Service、RC等。一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Kubernetes通过Label Selector(标签选择器)查询和筛选资源对象;

        5.Replication Controller:管理Pod的副本,保证集群中存在指定数量的Pod副本。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心;

        6.Deployment:Deployment相当于RC的一次升级,其最大的特色为可以随时获知当前Pod的部署进度;

        7.HPA(Horizontal Pod Autoscaler):Pod的横向自动扩容,也是Kubernetes的一种资源,通过追踪分析RC控制的所有Pod目标的负载变化情况,来确定是否需要针对性的调整Pod副本数量;

        8.Service:Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行;

        9.Volume:        Volume是Pod中能够被多个容器访问的共享目录,Kubernetes中的Volume是定义在Pod上,可以被一个或多个Pod中的容器挂载到某个目录下;

Namespace:

Namespace用于实现多租户的资源隔离,可将集群内部的资源对象分配到不同的Namespace中,形成逻辑上的不同项目、小组或用户组,便于不同的Namespace在共享使用整个集群的资源的同时还能被分别管理;

4.简述Kubernetes和Docker的关系?

        Docker开源的容器引擎,一种更加轻量级的虚拟化技术;

        K8s:容器管理工具,用来管理容器pod的集合,它可以实现容器集群的自动化部署、自动扩缩容、维护等功能;

5.简述Kubernetes如何实现集群管理?

        在集群管理方面,Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node。

其中,在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的;

6.简述Kubernetes的优势、适应场景及其特点?

        优势:容器编排、轻量级、开源、弹性伸缩、负载均衡;

        场景:快速部署应用、快速扩展应用、无缝对接新的应用功能、节省资源,优化硬件资源的使用;

        特点:

        可移植: 支持公有云、私有云、混合云、多重云(multi-cloud)、

        可扩展: 模块化,、插件化、可挂载、可组合、

        自动化: 自动部署、自动重启、自动复制、自动伸缩/扩展;

7.简述Kubernetes的缺点或当前的不足之处?

        安装过程和配置相对困难复杂、管理服务相对繁琐、运行和编译需要很多时间、它比其他替代品更昂贵、对于简单的应用程序来说,可能不需要涉及Kubernetes即可满足;

8.简述Kubernetes中什么是Minikube、Kubectl、Kubelet?

        Minikube 是一种可以在本地轻松运行一个单节点 Kubernetes 群集的工具;

        Kubectl 是一个命令行工具,可以使用该工具控制Kubernetes集群管理器,如检查群集资源,创建、删除和更新组件,查看应用程序;

        Kubelet 是一个代理服务,它在每个节点上运行,并使从服务器与主服务器通信;

9.kubelet的功能、作用是什么?(重点,经常会问)

        kubelet部署在每个node节点上的,它主要有4个功能

        1、节点管理。

                kubelet启动时会向api-server进行注册,然后会定时的向api-server汇报本节点信息状态,资源使用状态等,这样master就能够知道node节点的资源剩余,节点是否失联等等相关的信息了。master知道了整个集群所有节点的资源情况,这对于 pod 的调度和正常运行至关重要。
        2、pod管理。

                kubelet负责维护node节点上pod的生命周期,当kubelet监听到master的下发到自己节点的任务时,比如要创建、更新、删除一个pod,kubelet 就会通过CRI(容器运行时接口)插件来调用不同的容器运行时来创建、更新、删除容器;常见的容器运行时有docker、containerd、rkt等等这些容器运行时,我们最熟悉的就是docker了,但在新版本的k8s已经弃用docker了,k8s1.24版本中已经使用containerd作为容器运行时了。

        3、容器健康检查。

                pod中可以定义启动探针、存活探针、就绪探针等3种,我们最常用的就是存活探针、就绪探针,kubelet 会定期调用容器中的探针来检测容器是否存活,是否就绪,如果是存活探针,则会根据探测结果对检查失败的容器进行相应的重启策略;

        4、Metrics Server资源监控。

                在node节点上部署Metrics Server用于监控node节点、pod的CPU、内存、文件系统、网络使用等资源使用情况,而kubelet则通过Metrics Server获取所在节点及容器的上的数据。

10.kube-api-server的端口是多少?各个pod是如何访问kube-api-server的?

        kube-api-server的端口是8080和6443,前者是http的端口,后者是https的端口,以我本机使用kubeadm安装的k8s为例:

        在命名空间的kube-system命名空间里,有一个名称为kube-api-master的pod,

        这个pod就是运行着kube-api-server进程,它绑定了master主机的ip地址和6443端口,但是在default命名空间下,存在一个叫kubernetes的服务,该服务对外暴露端口为443,目标端口6443,

        这个服务的ip地址是clusterip地址池里面的第一个地址,同时这个服务的yaml定义里面并没有指定标签选择器,

        也就是说这个kubernetes服务所对应的endpoint是手动创建的,该endpoint也是名称叫做kubernetes,该endpoint的yaml定义里面代理到master节点的6443端口,也就是kube-api-server的IP和端口。

        这样一来,其他pod访问kube-api-server的整个流程就是:pod创建后嵌入了环境变量,pod获取到了kubernetes这个服务的ip和443端口,请求到kubernetes这个服务其实就是转发到了master节点上的6443端口的kube-api-server这个pod里面。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐