主题 学习 主题 !学习 - DevOps 面试问题 编程: 操作系统-Linux: 网络: 安全: Docker kubernetes 架构: 基础架构即代码: 设置 测试 DevOps 面试问题 Q1) 您能告诉我们 DevOps 和敏捷之间的基本区别吗? A: 虽然 DevOps 与其中一种最流行的软件开发生命周期(SDLC)方法论——敏捷方法有一些相似之处,但两者都是对软件开发的基本不同方法。以下是两者之间的各种基本区别: 敏捷方法 - 敏捷方法仅适用于敏捷中的开发,而 DevOps 方法则同时适用于 DevOps 中的开发和运维。
Git是一个流行的DevOps工具。请告诉我们如何回滚一个已经推送并公开的提交。- A: 有两种方法可以做到这一点:- 通过创建一个新的提交来撤销已经推送并公开的提交所做的所有更改。使用以下命令来实现这一点:- `git revert`- 通过在新的提交中修复或删除错误文件,然后将其推送到远程仓库。在对文件进行必要的更改后,使用以下命令将其提交到远程仓库:- `git commit -m "提交信息"` Q17) 什么是事后分析会议? A: 很多时候,在DevOps过程中需要讨论哪里出了问题。为此,会安排事后分析会议。这些会议会产生一些步骤,应该采取这些步骤以避免将来再次发生同样的失败或一系列失败。 Q18) 比较资产管理与配置管理。 A: 监控和维护对实体或群体有价值的物品的过程称为资产管理。配置管理是指控制、识别、计划和支持服务内配置项的过程,以支持变更管理。 Q19) 能否列出并解释持续测试的各种关键要素? A: 持续测试的各种关键要素包括:- 高级分析 - 用于预测未知的未来事件- 政策分析 - 旨在改进测试过程- 需求跟踪 - 指的是描述并追踪需求从起源到部署的生命过程的能力- 风险评估 - 识别可能导致潜在损害的风险因素的方法或过程- 服务虚拟化 - 允许使用虚拟服务而不是生产服务。模拟软件组件以便简单测试- 测试优化 - 改进整体测试过程 Q20) 请解释开发和基础设施方面的DevOps核心操作。 A: 开发和基础设施方面的DevOps核心操作包括:- 应用程序开发 - 开发能够满足所有客户需求且提供卓越质量的产品- 代码覆盖率 - 自动化测试运行期间执行的代码块或行或弧的数量的测量- 代码开发 - 准备产品开发所需的代码库- 配置 - 允许产品以最佳方式使用- 部署 - 安装供最终用户使用的软件- 编排 - 排列多个自动化任务- 打包 - 当发布准备部署时涉及的活动- 预置 - 确保基础设施变化与需要它的确切代码同时到达- 单元测试 - 用于测试单独的单元或组件 Q21) 你对DevOps了解多少? 你的回答必须简单明了。首先解释DevOps在IT行业中的重要性。讨论这种方法如何旨在协调开发和运营团队的努力,以加速软件产品的交付,同时保持最低的故障率。还包括DevOps是一种增值实践,其中开发和运维工程师在整个产品或服务生命周期中携手合作,从设计阶段到部署点。 Q22) 过去几年为什么DevOps越来越受欢迎? 在讨论DevOps日益增长的受欢迎程度之前,先讨论当前的行业状况。首先举一些例子,比如Netflix和Facebook等大公司如何投资于DevOps以自动化和加速应用程序部署,并帮助其业务增长。以Facebook为例,你可以指出Facebook的持续部署和代码所有权模型如何帮助其扩展但同时确保体验的质量。数百行代码的实施不会影响质量、稳定性和安全性。 接下来的例子应该是Netflix。这家流媒体和点播视频公司也遵循类似的实践,具有完全自动化的流程和系统。提及这两家公司的用户群:Facebook有20亿用户,而Netflix向全球超过1亿用户在线播放内容。 这些都是DevOps如何帮助组织确保发布更高的成功率,减少错误修复之间的前置时间,通过自动化实现流程的简化和连续交付,并总体上降低人力成本的好例子。 Q23) 哪些是流行的DevOps工具?你是否有使用过这些工具的经验? 更流行的DevOps工具有:- Selenium- Puppet- Chef- Git- Jenkins- Ansible- Docker Q24) 你想掌握所有这些DevOps工具吗? 彻底描述任何你自信的工具,它的能力以及你为什么喜欢使用它。例如,如果你精通Git,你会告诉面试官Git是一个分布式版本控制系统(VCS)工具,允许用户跟踪文件更改并在需要时恢复到特定更改。讨论Git的分布式架构如何使其具有优势,即开发人员可以在本地进行更改并拥有整个项目历史记录在他们的本地Git存储库中,之后可以与团队其他成员共享。 Q25) 什么是版本控制?为什么要使用VCS? 定义版本控制并谈论这个系统是如何记录一个或多个文件所做的任何更改并将它们保存在一个中央存储库中的。VCS工具将帮助你回忆起以前的版本并执行以下操作:- 查看一段时间内的更改并检查什么有效,什么无效。- 将特定文件或特定项目恢复到旧版本。- 检查由于特定更改而导致的问题或错误- 使用VCS使开发人员能够在同一文件上同时工作,并且所有修改都可以在后期逻辑地合并。 Q26) 敏捷和DevOps之间有区别吗?如果有,请解释。 作为一名DevOps工程师,这种类型的问题是非常常见的。首先描述DevOps和敏捷之间的明显重叠。虽然DevOps的实施总是与敏捷方法同步,但两者之间有明显的区别。敏捷的原则与无缝的软件生产和开发有关。另一方面,DevOps处理软件的开发和随后的部署,确保更快的周转时间、最少的错误和可靠性。 Q27) 为什么配置管理过程和工具很重要? 讨论每个正在开发的软件或测试软件的多次软件构建、发行版、修订版和版本。继续解释存储和维护数据的需求,跟踪开发构建和简化的故障排除。不要忘记提到可以实现这些目标的关键CM工具。讨论像Puppet、Ansible和Chef这样的工具如何帮助自动化多个服务器上的软件部署和配置。 Q28) Chef如何作为CM工具使用? Chef被认为是首选的行业CM工具之一。例如,Facebook将其基础设施和后端IT迁移到Chef平台。解释Chef如何通过自动化流程来避免延迟。脚本用Ruby编写。它可以集成到基于云的平台上并配置新系统。它提供了许多基础设施开发库,这些库可以在软件内部署。多亏了它的集中管理系统,一个Chef服务器足以作为部署各种策略的中心。 Q29) 你如何解释“基础设施即代码”(IaC)的概念? 这是一个好主意,将IaC作为一个概念来讨论,有时被称为可编程基础设施,其中基础设施被视为与其他代码相同。描述传统的基础设施管理方法如何让位,以及手动配置、过时的工具和自定义脚本如何变得不那么可靠。接下来强调IaC的好处,以及如何使用IaC以更快、更安全、更容易的方式实施对IT基础设施的更改。包括IaC的其他好处,如定期对基础设施配置进行单元测试和集成测试,以及维护最新的基础设施文档。 如果你完成了Amazon Web Services (AWS) 的认证,并且正在面试AWS认证的DevOps工程师这样的专业角色,这里有一些你必须准备的AWS DevOps面试问题: Q30) AWS在DevOps中的作用是什么? 当被问及这个问题时,直截了当地解释说AWS是由亚马逊提供的基于云的服务,通过无限的计算能力和存储来确保可扩展性。AWS赋予IT企业开发和交付复杂产品并在云端部署应用程序的能力。其一些关键服务包括Amazon CloudFront、Amazon SimpleDB、Amazon关系数据库服务和Amazon弹性计算云。讨论各种云平台,并强调过去使用云基础架构处理过的任何大数据项目。 Q31) 如何使用AWS实施IaC? 从讨论古老的机制开始,即将命令写入脚本文件并在部署前在单独的环境中进行测试,然后如何被IaC取代。类似于为其他服务编写的代码,借助AWS,IaC允许开发人员以描述性的方式编写、测试和维护基础设施实体,使用JSON或YAML等格式。这使得基础设施变更的开发更容易和部署更快。 Q32) 持续集成的成功因素有哪些? 示例答案:- 维护代码存储库- 自动化构建- 使构建自我测试- 每个人每天提交到基线- 每个提交(到基线)都应构建- 保持构建快速- 在生产环境的克隆中测试- 使获取最新交付品变得容易- 每个人都能看到最新构建的结果- 自动化部署 Q33) 你将如何实现CI(持续交付)- 包括源控制、分支、工具等在内的端到端? Q34) 什么是持续交付?持续部署? Q35) 持续集成、持续交付和持续部署之间有什么区别? Q36) Git和GitHub之间有什么区别?Git和SVN呢?- 请从左到右写出输出。
请告知是否需要进一步的帮助或具体的答案。
Q37) 什么是 git rebase?
Q38) 在 Git 中,如何撤销一个已经推送并公开的提交?
Q39) Puppet/Chef/Ansible 用于什么?与 Shell 脚本相比有哪些优势?
Q40) 你如何理解“基础设施即代码”?它如何适应 DevOps 方法论?它实现了什么目的?
Q41) 你如何让你的开发人员访问生产日志?
Q42) 谈谈你参与过的最糟糕或最好的中断事件。是什么让它变得糟糕或良好?
Q43) 你如何监控你的应用程序?你如何确保它在正常运行?当它停止工作时,你如何得到警报?
Q44) 键值存储的可用性和性能指标是什么?对于 MySQL 复制呢?
Q45) 你将如何向 5000 台系统部署软件?
Q46) 什么是缓存?大规模应用应该在哪里缓存,以及缓存哪些数据?
ps aux | grep httpd 第一个命令显示所有运行中的进程,然后将 stdout 传递给第二个命令,其查找包含 'httpd' 的字符串docker ps -adocker rmi -fdocker image prune -f-Q4) 你对Kubernetes中的集群了解多少?- A: Kubernetes的核心在于我们可以强制执行期望状态管理,这意味着我们可以向集群提供特定配置的服务,并由集群服务去执行这个配置到基础设施中。如上图所示,部署文件将包含所有需要被输入到集群服务中的配置。现在,部署文件会被发送到API,然后由集群服务来决定如何在环境中调度这些Pod,并确保正确数量的Pod正在运行。因此,位于服务、工作节点和节点运行的Kubelet进程前面的API,共同构成了Kubernetes集群。
-Q5) 如何在K8s节点上进行维护活动?- A: 每当有安全补丁可用时,Kubernetes管理员必须执行维护任务,以将安全补丁应用到正在运行的容器中,从而防止其受到漏洞的影响,这通常是管理工作中不可避免的一部分。以下两个命令有助于安全地排空K8s节点。
kubectl cordon <node-name> kubectl drain <node-name>
第一个命令将节点置于维护模式或使节点不可用,然后kubectl drain命令最终会从节点中删除Pod。在drain命令成功后,您可以进行维护。注意:如果您希望对单个Pod执行维护,请按以下顺序发出以下两个命令:
kubectl get nodes kubectl drain <node-name>
列出所有节点 排空特定节点
-Q6) 在Kubernetes中负载均衡的作用是什么?- A: 负载均衡是一种将传入流量分配到多个后端服务器的方式,这对于确保应用程序对用户可用很有用。在Kubernetes中,如上图所示,所有传入流量都进入负载均衡器上的单个IP地址,这是一种将您的服务暴露给互联网外的方式,通过称为轮询算法的方式将传入流量路由到特定的Pod(通过服务)。即使某个Pod宕机,负载均衡器也会收到通知,因此不会将流量路由到该特定不可用的节点。因此,Kubernetes中的负载均衡器负责将一组任务(传入流量)分配给Pod。
-Q7) 如何监控Kubernetes集群?- A: Prometheus用于Kubernetes监控。Prometheus生态系统包括多个组件。主要是Prometheus服务器,它抓取并存储时间序列数据。用于应用程序代码的客户端库。Push Gateway用于支持短暂的工作。特殊用途导出器用于StatsD、HAProxy、Graphite等服务。警报管理器用于处理各种支持工具上的警报。
-Q8) 你能解释一下Docker Swarm和Kubernetes之间的区别吗?- A: 以下是Kubernetes和Docker之间的主要区别:K8s的安装程序非常复杂,但一旦安装完成,集群就非常健壮。另一方面,Docker Swarm的安装过程非常简单,但集群完全不健壮。Kubernetes可以处理自动扩展,而Docker Swarm不能基于传入负载处理Pod的自动扩展。Kubernetes是一个完整的框架。由于它更一致地维护集群状态,因此自动扩展不如Docker Swarm快。
-Q9) 容器如何在Pod内相互通信?- A: Pod内的容器共享网络空间,可以通过localhost互相到达。例如,如果你在一个Pod中有两个容器,一个MySQL容器运行在3306端口,一个PHP容器运行在80端口,那么PHP容器可以通过localhost:3306访问MySQL容器。
-Q10) 解释什么是主节点及其组成部分?- A: 主节点是负责Kubernetes架构的最核心组件。它是Kubernetes的中央控制单元,管理和协调集群中的工作负载与通信。主节点具有多种组件,每个组件都有自己的进程。它们是:-ETCD -控制器管理器 -调度器 -API服务器 -ETCD(集群存储):此组件存储配置细节和关键值 -它与其他所有组件通信以接收命令和工作,以便执行操作 -它还管理网络规则和转发活动 -控制器管理器:它负责大部分控制器并执行任务 -它是一个在连续循环中运行的守护进程,负责收集并向API服务器发送信息 -关键控制器处理节点、端点等 -调度器:它是主节点的关键组件之一,与工作负载分配相关 -调度器负责工作负载的利用率并将Pod分配到新节点 -调度器应该知道每个节点上可用资源的总数以及分配给现有工作负载的资源
-1. 问题:解释Kubernetes架构的组件及其角色。解决方案:Kubernetes架构包括几个关键组件:主节点:管理集群及其组件。API服务器:公开Kubernetes API。控制器管理器:确保集群的期望状态。调度器:将节点分配给新创建的Pod。etcd:作为Kubernetes后端使用的键值存储,保持一致性和高可用性。节点(奴隶节点):启动容器的地方。kubelet:确保Pod中的容器正在运行。kube代理:维护Pod通信的网络规则。容器运行时:负责运行容器的软件。
-2. 问题:什么是Kubernetes Pod,它在集群中如何工作?解决方案:Pod是Kubernetes中最小的可部署单元,代表集群中运行的一个进程实例。Pod可以包含多个容器,这些容器共享相同的网络命名空间,允许它们使用localhost相互通信。Pod被安排在节点上,并且可以通过像Deployments这样的控制器创建多个副本来进行水平扩展。
-3. 问题:Kubernetes如何确保高可用性和容错性?解决方案:Kubernetes通过以下方式实现高可用性:复制:跨多个节点复制应用程序。自我修复:自动替换失败的容器或重新安排Pod。负载均衡:跨多个Pod分配网络流量。此外,Kubernetes通过节点监控、自动缩放和滚动更新等功能确保容错能力,使得应用程序可以在不停机的情况下进行更新。
-4. 问题:解释Kubernetes服务的概念及其类型。解决方案:Kubernetes服务为Pod提供稳定的端点。有几种类型的服务:ClusterIP:在集群内部IP上暴露服务。NodePort:在每个节点的IP上以静态端口暴露服务。LoadBalancer:使用云提供商的负载均衡器将服务外部暴露。ExternalName:将服务映射到externalName字段的内容(例如DNS名称)。
-5. 问题:什么是Kubernetes部署,它们如何管理应用程序更新?解决方案:Kubernetes中的部署描述了应用程序的生命周期,启用Pod和ReplicaSets的声明式更新。它们提供了一种描述应用程序期望状态的方法。当部署的Pod模板(例如容器镜像版本)被更新时,它会触发滚动更新,确保零停机时间更新。旧的Pod将逐渐被新的Pod替换,以最小化中断。
请从左到右写输出。
Orchestration? - A: 考虑一个场景,你为一个应用程序使用了5-6个微服务。现在,这些微服务被放入单独的容器中,但如果没有容器编排,它们将无法通信。因此,就像编排在音乐中意味着所有乐器和谐地演奏一样,容器编排意味着将所有在单独容器中的服务组合起来以满足单个服务器的需求。- Q4) 你对Kubernetes中的集群了解多少?- A: Kubernetes的核心在于我们可以强制执行期望状态管理,这意味着我们可以向集群提供特定配置的服务,并由集群服务去执行这个配置到基础设施中。如上图所示,部署文件将包含所有需要被输入到集群服务中的配置。现在,部署文件会被发送到API,然后由集群服务来决定如何在环境中调度这些Pod,并确保正确数量的Pod正在运行。因此,位于服务、工作节点和节点运行的Kubelet进程前面的API,共同构成了Kubernetes集群。- Q5) 如何在K8s节点上进行维护活动?- A: 每当有安全补丁可用时,Kubernetes管理员必须执行维护任务,以将安全补丁应用到正在运行的容器中,从而防止其受到漏洞的影响,这通常是管理工作中不可避免的一部分。以下两个命令有助于安全地排空K8s节点。
kubectl cordon <node-name> kubectl drain <node-name>
第一个命令将节点置于维护模式或使节点不可用,然后kubectl drain命令最终会从节点中删除Pod。在drain命令成功后,您可以进行维护。注意:如果您希望对单个Pod执行维护,请按以下顺序发出以下两个命令:
kubectl get nodes kubectl drain <node-name>
列出所有节点 排空特定节点- Q6) 在Kubernetes中负载均衡的作用是什么?- A: 负载均衡是一种将传入流量分配到多个后端服务器的方式,这对于确保应用程序对用户可用很有用。在Kubernetes中,如上图所示,所有传入流量都进入负载均衡器上的单个IP地址,这是一种将您的服务暴露给互联网外的方式,通过称为轮询算法的方式将传入流量路由到特定的Pod(通过服务)。即使某个Pod宕机,负载均衡器也会收到通知,因此不会将流量路由到该特定不可用的节点。因此,Kubernetes中的负载均衡器负责将一组任务(传入流量)分配给Pod。- Q7) 如何监控Kubernetes集群?- A: Prometheus用于Kubernetes监控。Prometheus生态系统包括多个组件。主要是Prometheus服务器,它抓取并存储时间序列数据。用于应用程序代码的客户端库。Push Gateway用于支持短暂的工作。特殊用途导出器用于StatsD、HAProxy、Graphite等服务。警报管理器用于处理各种支持工具上的警报。- Q8) 你能解释一下Docker Swarm和Kubernetes之间的区别吗?- A: 以下是Kubernetes和Docker之间的主要区别:K8s的安装程序非常复杂,但一旦安装完成,集群就非常健壮。另一方面,Docker Swarm的安装过程非常简单,但集群完全不健壮。Kubernetes可以处理自动扩展,而Docker Swarm不能基于传入负载处理Pod的自动扩展。Kubernetes是一个完整的框架。由于它更一致地维护集群状态,因此自动扩展不如Docker Swarm快。- Q9) 容器如何在Pod内相互通信?- A: Pod内的容器共享网络空间,可以通过localhost互相到达。例如,如果你在一个Pod中有两个容器,一个MySQL容器运行在3306端口,一个PHP容器运行在80端口,那么PHP容器可以通过localhost:3306访问MySQL容器。- Q10) 解释什么是主节点及其组成部分?- A: 主节点是负责Kubernetes架构的最核心组件。它是Kubernetes的中央控制单元,管理和协调集群中的工作负载与通信。主节点具有多种组件,每个组件都有自己的进程。它们是:-ETCD -控制器管理器 -调度器 -API服务器 -ETCD(集群存储):此组件存储配置细节和关键值 -它与其他所有组件通信以接收命令和工作,以便执行操作 -它还管理网络规则和转发活动 -控制器管理器:它负责大部分控制器并执行任务 -它是一个在连续循环中运行的守护进程,负责收集并向API服务器发送信息 -关键控制器处理节点、端点等 -调度器:它是主节点的关键组件之一,与工作负载分配相关 -调度器负责工作负载的利用率并将Pod分配到新节点 -调度器应该知道每个节点上可用资源的总数以及分配给现有工作负载的资源
-1. 问题:解释Kubernetes架构的组件及其角色。解决方案:Kubernetes架构包括几个关键组件:主节点:管理集群及其组件。API服务器:公开Kubernetes API。控制器管理器:确保集群的期望状态。调度器:将节点分配给新创建的Pod。etcd:作为Kubernetes后端使用的键值存储,保持一致性和高可用性。节点(奴隶节点):启动容器的地方。kubelet:确保Pod中的容器正在运行。kube代理:维护Pod通信的网络规则。容器运行时:负责运行容器的软件。
-2. 问题:什么是Kubernetes Pod,它在集群中如何工作?解决方案:Pod是Kubernetes中最小的可部署单元,代表集群中运行的一个进程实例。Pod可以包含多个容器,这些容器共享相同的网络命名空间,允许它们使用localhost相互通信。Pod被安排在节点上,并且可以通过像Deployments这样的控制器创建多个副本来进行水平扩展。
-3. 问题:Kubernetes如何确保高可用性和容错性?解决方案:Kubernetes通过以下方式实现高可用性:复制:跨多个节点复制应用程序。自我修复:自动替换失败的容器或重新安排Pod。负载均衡:跨多个Pod分配网络流量。此外,Kubernetes通过节点监控、自动缩放和滚动更新等功能确保容错能力,使得应用程序可以在不停机的情况下进行更新。
-4. 问题:解释Kubernetes服务的概念及其类型。解决方案:Kubernetes服务为Pod提供稳定的端点。有几种类型的服务:ClusterIP:在集群内部IP上暴露服务。NodePort:在每个节点的IP上以静态端口暴露服务。LoadBalancer:使用云提供商的负载均衡器将服务外部暴露。ExternalName:将服务映射到externalName字段的内容(例如DNS名称)。
-5. 问题:什么是Kubernetes部署,它们如何管理应用程序更新?解决方案:Kubernetes中的部署描述了应用程序的生命周期,启用Pod和ReplicaSets的声明式更新。它们提供了一种描述应用程序期望状态的方法。当部署的Pod模板(例如容器镜像版本)被更新时,它会触发滚动更新,确保零停机时间更新。旧的Pod将逐渐被新的Pod替换,以最小化中断。
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。