IT干货网

testops基础面试题汇总

lxf 2022年03月04日 DevOps 161 0

docker+k8s+jenkins相关面试

答案是根据所在公司项目结合自己的理解给出的答案 不一定完全准确但在面试中要做到有理有据突出自己的思路即可。

4 docker

问题和答案 如下

4.1 什么是docker?

通常问这个问题主要在于考察候选人是否真正了解过docker,很多人项目中都有用到docker,真正去了解过概念,架构的不多。从而来辨别简历上的熟悉/了解docker的水分。

如果这个都无法回答,那么接下来的docker考察也就毫无意义了,此问题通常也会结合以下问题来进行考察。

  1. docker和传统linux的差异?
  2. docker都有哪些核心组件?
  3. 可以简单说下docker的架构吗?
  4. 容器和镜像的区别?

docker是什么: Docker是一个可以把开发的应用程序自动部署到容器的开源引擎。

docker和VM差异: docker是一个应用层的抽象,容器之间通过网络命名空间进行隔离,多个容器共享同一个操作系统内核。VM是对物理硬件层的抽象,每个VM都包含独立的操作系统,重且启动缓慢。VM主要为了提供系统环境,容器主要是为了提供应用环境。

docker组件: docker引擎【包含Docker客户端&服务端】,docker镜像,docker容器,Registry【镜像仓库】

docker的架构: C/s架构

容器和镜像的区别: 镜像是一个只读模板,包括运行容器所需的数据,其内容在构建之后就不会被改变,可以用来创建新的容器。 镜像由多个只读层组成,容器在只读层的基础上多了一个读写层。

4.2 docker 网络模型是什么?有何局限

这里也经常会结合K8s网络原理进行考察,以及如下几个考点

  1. docker的网络基础是什么?
  2. docker的网络模型是?有什么局限?
  3. docker如何实现容器间通信的?

Docker网络基础: Docker是在操作系统层上对应用的抽象,使用网络命名空间来对不同容器之间进行网络隔离,用Veth设备对来进行容器之间的通讯。

docker的网络模型: 有4种网络模型 分别是Bridge Container host none 默认使用bridge网络模型,容器的初次启动会虚拟化出来一个新的网卡名为docker0,在多机器部署下docker0地址可能会冲突。所以docker对多机部署支持的不够友好。

4.3 docker 基础命令

出现频率较高的为以下几条命令的考察

  1. cmd和entry差异?
  2. copy和add的差异?
  3. docker-compose & docker swarm?

CMD & ENTRYPONIT

都是容器操作指令:
CMD 用于指定容器启动时候默认执行的命令。可以被docker run指定的启动命令覆盖。ENTRYPONIT 指令可让容器以应用程序或者服务的形式运行。一般不会被docker run指定的启动命令覆盖。dockerfile中的多个CMD & ENTRYPONIT只有最后一个会生效。

注意区别docker run 和RUN 一个是容器启动命令,一个是镜像构建时候所用。

copy & add

ADD & COPY 选取目标文件复制到镜像当中。是针对镜像的指令,唯一差别在于add源文件可以支持url且可以对压缩文件进行解压操作。而copy针对的是当前构建环境。

docker-compose & docker swarm
使用Docker compose可以用YAML文件来定义一组需要启动的容器,以及容器运行时的属性。docker-compose用来对这一组容器进行操作。
docker swarm 原生的Docker集群管理工具,依赖docker本身,很多重要功能依赖团队二次开发。且社区不够活跃,一般公司生产环境会选择k8s,个人项目或者容器数量较少可选swarm,只需要docker即可完成,相对较轻。

5 kubernetes

5.1 什么是k8s?

对k8s的考察一般逃不过这样入门级的问题,针对入门级的问题,面试官可能也会针对如下几个点进行考察,在候选人答出来的基础上,选择其中一个进行深入。

  1. 为什么用k8s 解决了什么问题?
  2. k8s有哪些组件,有什么作用?
  3. 可以简单说下Node Pod container 之间的关系吗? 【进一步可对Pod SVC细节进行考察】
  4. 什么是SVC可以简单描述下吗?【可引对SVC的考察】
  5. 可以简单讲下k8s的网络模型吗?【可以和docker网络模型结合考察】
  6. Pod SVC Node Container 之间如何相互访问【衍生 外部环境如何访问k8s】
  7. swarm和k8s如何选择?

1 什么是k8s 为什么用k8s:
一个开源的容器集群管理平台【容器编排工具】,可提供容器集群的自动部署,扩缩容,维护等功能。分为管理节点Master和工作节点Node。在我们的项目中主要解决了环境一致性的问题,通过CI/CD使得运维部署变得简单起来,以及自动部署,故障监控,自动扩缩容。可以提升开发效率。

2 k8s有那些组件:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

3 Node&Pod&container之间的关系:Node一般指工作节点包含多个Pod Pod中包含多个Container,Pod中的container共享同一个网络命名空间。

4 什么是SVC: SVC是对一组功能相似的Pod资源的抽象,相当于一组服务的负载均衡。

5 k8s的网络模型:IP-Per-Pod 每个Pod有独立的Ip地址,无论是否处于同一个Node节点,Pod可以通过IP相互访问,且Pod和容器的地址和外部看到的地址是同一个地址。

6 Pod SVC Node Container 之间如何相互访问:

  • 同Pod内的容器:同一个Pod的容器共享同一个网络命名空间可以直接进行通讯
  • 同Node内不同Pod的容器:多个Pod都关联在同一个Docker0网桥上,通过docker0网桥完成相互通讯。
  • 不同Node内Pod的容器:不同Node上的docker0可能会相同,PodIP和docker0是同网段的,所以需要将PodIP和NodeIP进行关联且保障唯一,不同Pod之间的数据通过物理机的端口进行转发即可完成通讯。

7:k8s 和docker swarm如何选择: :

5.2 对SVC的考察

SVC是k8s中的核心概念 这里涉及知识点众多 常见的面试考点如下

  1. 什么是SVC? 如何创建SVC?
  2. 使用SVC创建多个副本和使用RC创建多个副本有什么差异?
  3. SVC有哪几种类型?
  4. SVC 负载分发策略有那些?
  5. 集群外如何访问SVC?

SVC:是对一组功能相似的Pod资源的抽象,相当于一组服务的负载均衡。可以使用配置文件的方式创建也可以使用命令创建kubectl expose
SVC和RC提供服务的差距: RC创建的服务PodIP可能会变。SVC提供的clusterIP不会。通过Iptables的NAT转换重定向到本地端口,在均衡到后端Pod。
svc的几种类型: ClusterIp/NodePort/LoadBalancer/ExternalName

  • ClusterIp 默认类型 分配的一个虚拟地址,内部可以相互访问,外部不行
  • NodePort 将SVC端口号映射到物理机
  • LoadBalancer 基于NodePort,云服务商在外部创建了一个负载均衡到Pod
  • ExternalName 将外部地址经过集群内部的再一次封装(实际上就是集群DNS服务器将CNAME解析到了外部地址上),实现了集群内部访问即可。

svc负载分发策略: RoundRobin/SessionAffinity/自定义实现【基于标签选择器】

集群外部访问: 端口映射到物理机即可

5.2 Pod考察

  1. Pod和静态Pod的区别
  2. 生命周期和重启策略 【这里可扩展 不同控制器对Pod的重启策略要求】
  3. Pod如何健康检查?
  4. Pod的调度方式?【扩展调度算法】
  5. Pod如何扩缩容?【扩展 RC和RS的差异】
答案

待补充 --详见《k8s权威指南》读书笔记

5.3 基础原理类考察

主要考察对基本组件的理解 和原理分析

  1. API Server
  2. Controller Manager【Replication Controller/Node Controller/ResourceQuota Controller/Namespace Controller/SVC Controller& Endpoint Controller】
  3. Scheduler
  4. Kubelet 【Pod健康检查 资源监控】
  5. Kube-Proxy
  6. k8s-DNS & Iptables差异
  7. k8s中Ingress是什么
  8. 简述k8s中的如下属性及其作用resources tolerations affinity
  9. k8s中pod、rs、deployment、hpa的基本概念,以及他们之间的关系
答案

待补充 --详见《k8s权威指南》读书笔记

5.4 网络原理类考察

主要考察对基本组件的理解 和原理分析

  1. k8s的网络模型是什么?
  2. Docker的网络基础是什么?
  3. Docker的网络模型和局限?
  4. k8s的网络组件之间是如何通讯的?
  5. 外部如何访问k8s集群?
  6. 有那些开源组件支持k8s网络模型?
答案

待补充 --详见《k8s权威指南》读书笔记

jenkins 面试题

1.jenkins是什么

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

2.为什么使用jenkins

Jenkins是一种使用Java编程语言编写的开源持续集成软件工具,用于实时测试和报告较大代码库中的孤立更改。 Jenkins软件使开发人员能够快速找到并解决代码库中的缺陷,并自动进行构建测试。

3.CI/CD是什么

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。

4.集中常见的CI工具
以下是前8种持续集成工具的列表:

Jenkins
TeamCity
Travis
CIGo
CDBamboo
GitLabCI
CircleCI
Codeship

5.什么是Jenkins pipeline

Pipeline,简而言之,就是一台运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
Jenkins Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。

6.为什么在jenkins中使用管道

Pipeline在Jenkins上添加了一套强大的自动化工具,支持从简单的持续集成到全面的持续交付管道的用例。 通过对一系列相关任务进行建模,用户可以利用Pipeline的许多功能: 代码:流水线是用代码实现的,通常会检查到源代码管理中,从而使团队能够编辑,查看和迭代其交付流水线。耐用:管道可以在Jenkins主服务器的计划内和计划外重启中生存。可暂停:管道可以选择停止并等待人工输入或批准,然后再继续管道运行。多功能:管道支持复杂的现实世界中的连续交付需求,包括加入,循环和并行执行工作的能力。

7.什么是jenkinsfile?为什么使用jenkinsfile

Jenkinsfile是一个文本文件,其中包含Jenkins Pipeline的定义,并已签入源代码管理
虽然用于定义管道的脚本语法和jenkinsfile类似,但通常认为在项目中定义管道Jenkinsfile并检查源代码管理是最佳实践。

为所有分支和请求自动创建一个管道构建过程。
管道上的代码审查/迭代。
审核追踪管道

8.什么是Blue Ocean

Blue Ocean是pipeline的可视化UI。同时他兼容经典的自由模式的job。Jenkins Pipeline从头开始设计,但仍与自由式作业兼容,Blue Ocean减少了经典模式下的混乱并为团队中的每个成员增加了清晰度。Blue Ocean的主要特点包括:

连续交付(CD)管道的复杂可视化,可以让您快速直观地理解管道状态。
管道编辑器 - 通过引导用户通过直观和可视化的过程来创建管道,从而使管道的创建变得平易近人。
个性化以适应团队中每个成员的基于角色的需求。
在需要干预和/或出现问题时确定精确度。Blue Ocean显示的标注了关键步骤,促进异常处理和提高生产力。

9.如何在jenkins中备份和复制文件

创建备份,需要做的就是定期备份JENKINS_HOME目录。 这包含所有构建作业配置,从属节点配置以及构建历史记录。 要创建Jenkins设置的备份,只需复制此目录。

10.jenkins的优势是什么

Jenkins的优势包括:

在开发环境的早期阶段, 错误跟踪很容易。
提供大量的插件支持。
对代码的迭代改进。
构建失败会在集成阶段进行缓存。
对于每个代码提交更改, 都会生成一个自动生成报告通知。
为了将构建报告的成功或失败通知开发人员, 它与LDAP邮件服务器集成在一起。
实现持续集成的敏捷开发和测试驱动的开发。
通过简单的步骤, 即可自动完成maven发布项目。

11.Jenkins主要整合了两个组成部分?

Jenkins与以下两个组件集成在一起:

GIT, SVN等版本控制系统
并构建诸如Apache Maven之类的工具。

12.Jenkins中一些由用的插件

下面我将提到一些重要插件:

Maven 2 project
Amazon EC2
HTML publisher
Copy artifact
Join
Green Balls
————————————————
https://blog.csdn.net/gaoping2736411763/article/details/106331998/


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

图解电商支付架构设计