k8s常见面试题

825 阅读4分钟

1.docker虚拟化技术和传统的虚拟化技术的不同?

docker是一个轻量级的沙盒,它不包含操作系统,只有运行时的库环境和上层应用,作用是负责运行上层应用。而传统的虚拟化技术是一个重量级的,内部包含额外的独立的操作系统。

2.容器和镜像的区别?

容器就是一个运行时的环境,启动容器就是开启一个进程,启动容器的前提是必须存在一个构建好的镜像。镜像则是提供运行时的依赖库以及上层应用,是容器运行的核心。它可以将构建好的镜像推送到镜像仓库,以便于后续的修改和使用。

3.简述kubernetes和docker的关系?

docker通过dockerfile将应用程序以及所需的依赖制作成镜像,然后放到容器中运行。而kubernetes则用于关联和编排在多个主机上运行的容器。

4.kubernetes的架构?

主要包含至少一个管理节点master和多个工作节点node。

#### 在master节点上的核心组件:

1.kubectl:是kubernetes的命令行工具,可以发送创建资源等请求。

2.apiserver:主要是k8s提供的rest请求的api,来完成具体的命令或动作。

3.controller-manager:由apiserver通知创建对应的资源模板(配置信息)。

4.scheduler:主要负责监听controller-manager创建出来的资源配置模板,将其调度到最合适的工作节点上。

5.etcd:key-value形式的分布式数据库,主要存储由apiserver传递过来的资源的配置信息以及运行状态等(可以不部署在master节点上,但必须保证master节点可以连通etcd的集群)。

#### 在node节点上的核心组件:

1.kubelet:负责管理和维护容器的生命周期,以及存储卷和网络。当接收到master节点的scheduler发送来的资源模板后,kubelet根据模板信息创建并运行容器,将执行的结果(运行时的相关信息)通过scheduler返回给master节点。

2.container-runtime:负责管理运行容器的软件。

3.pod:是k8s集群中的最小单位,可以运行一个或多个容器,一个pod内的各个容器之间的网络是相互共享的。不同的pod之间的通信可以通过namespace来完成。

4.kube-proxy:service在逻辑上相当于多个pod,kube-proxy主要负责为service提供服务发现的功能,主要作用是服务转发。

5.简述一下创建一个pod的流程?

未命名文件.png

首先通过kubectl命令行工具或者k8s提供的api向master节点的apiserver发送创建pod的请求,apiserver通知controller-manager创建pod的模板,将pod的相关配置信息返回给apiserver,apiserver将信息同步到etcd中。同时scheduler监控到有新的pod模板,通过一系列的算法调度到一个最合适的node节点上。在node节点上的kubelet组件使用当前的pod的配置信息完成容器的创建和启动,并将结果返回给scheduler,scheduler再通过apiserver将执行信息存储到etcd中,完成了pod的创建。

6.简述kubernetes的数据持久化方式?

主要包含两大类---持久化存储和非持久化存储:

#### 非持久化存储(生命周期与pod保持一致---即pod被创建,volume也被创建;pod被删除,volume也被删除):

1.emptydir:没有指定要挂载宿主机上的某个目录,直接由Pod内保部映射到宿主机上。可以当作临时存储。

2.hostpath:将宿主机内已存在的目录或文件挂载到容器内部(常用于日志采集)。

#### 持久化存储:

1.pv:持久化存储方案,由集群管理员负责创建和配置,生命周期独立于pod(pod的销毁对其没有影响)。

2.pvc:是用户对存储资源的一种请求。和pod类似,pod消耗的是节点资源,而pvc消耗的是pv资源。Pod可以请求CPU和内存,而PVC可以请求特定的存储空间和访问模式。

3.storageClass:集群管理员可以先将存储资源定义为不同类型的资源,比如快速存储、慢速存储等。当用户通过pvc对存储资源进行申请时,可以自动创建出用户所需要的pv。

7.简述dockerfile中的add和copy的区别?

1.add:支持url获取和解压缩。

2.copy:只能从宿主机中复制到镜像中。