DevOps 面试问题 列出必要的 DevOps 工具? 答案: Git Jenkins Selenium Puppet Chef Ansible Nagios Docker Monit ELK – Elasticsearch, Logstash, Kibana 收集/收集 Git(GitHub) 为什么混合云如此重要? 答案:云爆发: 公共云中有私有云没有的容量或特殊软件 示例:虚拟亚马逊和Dynamo 利用两个世界的优势: vCloud: 它是VMware云 它很昂贵 企业级质量 OpenStack: 它使用普通服务器和存储。 可靠性较低。 我们可以在OpenStack上运行Web服务器。 数据库建立在vCloud上。 解释如何垂直扩展Amazon实例?
DevOps 面试问题
Git
Jenkins
Selenium
Puppet
Chef
Ansible
Nagios
Docker
Monit
ELK – Elasticsearch, Logstash, Kibana
收集/收集
Git(GitHub)
为什么混合云如此重要?
答案:云爆发:
公共云中有私有云没有的容量或特殊软件
示例:虚拟亚马逊和Dynamo
利用两个世界的优势:
vCloud:
它是VMware云
它很昂贵
企业级质量
OpenStack:
它使用普通服务器和存储。
可靠性较低。
我们可以在OpenStack上运行Web服务器。
数据库建立在vCloud上。
解释如何垂直扩展Amazon实例?
答案:这是AWS和云虚拟化的一个关键功能。启动一个新开发的大实例,在那里暂停该实例并从服务器分离根EBS卷并丢弃。稍后停止您的实时实例,断开其根卷连接。记下唯一的设备ID并将相同的根卷附加到新服务器。然后再次启动它。这将导致垂直扩展的Amazon实例。
服务器组可以从世界各地提供80和443端口,但跳板组中只有22端口是至关重要的。数据库组允许来自Web服务器组的3306端口和来自跳板组的22端口。向Web服务器组添加任何机器都可以存储在数据库中。没有人可以直接SSH到你的任何盒子上。
参考架构
技术架构
部署操作架构
参考架构
技术架构
部署操作架构
代码:代码开发与审查、源代码管理工具、代码合并
构建:持续集成工具、构建状态
测试:持续测试工具,提供有关业务风险的反馈
打包:工件仓库、应用预部署阶段
发布:变更管理、发布审批、发布自动化
配置:基础设施配置与管理、基础设施即代码工具
监控:应用程序性能监控、最终用户经验
在DevOps工具链中,某些类别比其他类别更为重要;特别是持续集成(如Jenkins)和基础设施即代码(如Puppet)。
以前,客户端总是使用复杂的二进制数据序列化值,但现在使用Memcached,您可以使用二进制选项。
可以总结为:敏捷软件开发方法论侧重于软件开发,而DevOps则负责软件的开发以及以最安全和可靠的方式部署软件。这里有一篇博客可以提供更多关于DevOps演变的信息。
敏捷和DevOps的主要区别是什么?
敏捷:
敏捷关注软件开发
DevOps:
DevOps 关注软件部署和管理。
DevOps 并不取代敏捷或精益。它通过消除浪费、减少交接和简化部署来加快和实现更连续的生产部署。
DevOps工程师在开发和基础设施方面的核心角色是什么?
答案:
DevOps工程师的核心职责
应用程序开发
代码开发
代码覆盖率
单元测试
打包
基础设施上的部署
持续集成
持续测试
持续部署
资源供应
配置
编排
部署
将文件恢复到以前的状态。
将整个项目恢复到以前的状态。
比较不同时期的变化。
查看谁最后修改了可能导致问题的部分。
谁引入了问题及何时引入。
如何准备迁移?
答案:这个问题评估你处理实际项目的经验,包括所有令人尴尬和复杂的情况。在回答中包含诸如切换、彩排、回滚和滚动、DNS解决方案、功能开关、抽象分支和自动化等术语。开发无现有技术的新系统总是比处理遗留组件更容易。
在云计算中,什么是安全管理?
答案:身份管理访问提供了对应用程序服务的授权。
给用户分配访问权限,以便他们能够完全控制进入云环境的其他用户的访问权限。
认证和授权仅允许经过授权和认证的用户访问数据和应用程序。
DevOps的反模式有哪些?
答案:模式通常是常见的做法。如果其他人常用的模式不适合你的组织,并且你继续盲目遵循,实际上就是在采用反模式。关于DevOps存在一些误区。(在线Oracle Apex培训)
这些工具是如何协同工作的?
答案:
下面是通用的逻辑流程,其中一切都被自动化以实现无缝交付。然而,这个流程可能因组织的需求而有所不同。
开发人员开发代码,该源代码由Git等版本控制系统工具进行管理。
开发人员将代码发送到Git存储库,并将所做的任何代码更改提交到此存储库。
Jenkins使用Git插件从存储库拉取代码,并使用Ant或Maven等工具进行构建。
Puppet等配置管理工具部署和配置测试环境,然后Jenkins在测试环境中发布代码,使用Selenium等工具进行测试。
一旦代码通过测试,Jenkins将其部署到生产服务器(即使生产服务器也是由Puppet等工具配置和维护的)。
部署后,Nagios等工具会对其进行持续监控。
Docker容器提供测试环境以测试构建功能。
Nagios中的主动检查和被动检查有什么区别?
答案:首先指出主动检查和被动检查的基本区别。主动检查和被动检查之间的主要区别在于主动检查是由Nagios发起和执行的,而被动检查是由外部应用程序执行的。
如果面试官对上述解释不满意,您还可以提到主动和被动检查的一些关键特征。
DevOps背后的关键方面或原则是什么?
答案:DevOps背后的关键方面或原则是:
基础设施即代码
持续部署
自动化
监控
安全
您使用过哪些DevOps工具?
答案:包括Apache Subversion、Mercurial、Fossil等在内的软件配置管理和构建/发布(版本控制)工具有助于记录变更请求。开发人员可以更轻松地遵循公司的最佳实践和政策,同时进行软件变更。
持续集成(CI)工具如Rational Build Forge、Jenkins和Semaphore将所有开发者的代码合并到中央版本。这些工具对于大型团队,其中多个开发者同时在同一代码库上工作非常重要。QA专家使用代码分析器测试软件的错误、安全性和性能。如果您使用过HP的Fortify静态代码分析器,请谈谈它如何识别编码语言中的安全漏洞。还可以谈谈您使用Gramma Tech的Code Sonar来识别C/C++和Java代码中的内存泄漏、缓冲区溢出和其他缺陷。您应该对Ruby、C#、.NET、Perl、Python、Java、PHP和Windows PowerShell等主要编程语言有足够的掌握,并且熟悉Windows、Linux和Unix等相关的操作系统环境。
确保新服务准备好投入生产需要进行哪些测试?
答案:DevOps 关注整个过程中的持续测试,从开发到生产。每个人都要承担测试的责任。这确保了开发人员交付的代码没有错误并且质量高,同时也帮助每个人最有效地利用时间。(在线Oracle Apex培训)
什么是Nagios中的状态跟踪?
答案:我建议您首先简要介绍状态跟踪。它用于日志记录目的。当为特定主机或服务启用状态跟踪时,Nagios将非常仔细地监视该主机或服务,并记录其看到的任何更改。
根据您与面试官的讨论,您还可以补充说:“这在后来的日志文件分析中非常有帮助。在正常情况下,只有当主机或服务自上次检查以来状态发生变化时,其检查结果才会被记录。”
什么是持续集成?
答案:
我建议您从持续集成(CI)的小定义开始。这是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中。每次提交都会通过自动化构建进行验证,使团队能够在早期发现并解决问题。
建议您解释如何在之前的工作中实施它。您可以参考以下示例:
开发人员将代码签出到他们的私人工作空间。
完成之后,他们将更改提交到共享存储库(版本控制存储库)。
CI服务器监视存储库并在发生更改时签出更改。
CI服务器然后拉取这些更改并构建系统,还运行单元和集成测试。
CI服务器现在会通知团队成功构建。
如果构建或测试失败,CI服务器会提醒团队。
团队将尽快尝试解决该问题。
这个过程会不断重复。
为什么需要开发和测试的持续集成?
答案:对于这个问题,你应该关注持续集成的需求。我的建议是在你的回答中提到以下解释:
开发和测试的持续集成通过替代传统的开发完成后测试的做法,提高了软件的质量并减少了交付时间。它允许开发团队由于需要每天多次将代码集成到共享存储库中(更频繁),因此可以很容易地在早期检测和定位问题。每次提交都会自动进行测试。(数据科学培训)
什么是Git?
答案:我建议你通过解释下面的图中的Git架构来回答这个问题。你可以参考下面的解释:
Git是一个分布式版本控制系统(DVCS)。它可以跟踪文件的更改,并允许你回退到任何特定的更改。
其分布式架构比其他版本控制系统(如SVN)具有许多优势,其中一个主要优势是它不需要依赖中央服务器来存储项目的文件的所有版本。相反,每个开发人员“克隆”一个存储库的副本(如下图所示的“本地存储库”),并在其硬盘上拥有项目的完整历史记录,因此当服务器出现故障时,只需要一个队友的本地Git存储库即可恢复。
还有一个中央云存储库,开发人员可以在这里提交更改并与队友共享,如下图所示,所有协作者都在“远程存储库”中提交更改。
社交网络 -> 个人资料缓存
内容聚合 -> HTML/页面缓存
广告定向 -> Cookie/个人资料跟踪
关系 -> 会话缓存
电子商务 -> 会话和HTML缓存
基于位置的服务 -> 数据库查询扩展
游戏和娱乐 -> 会话缓存
Memcached有助于加速应用程序进程 它决定存储什么和不存储什么 减少对数据库的检索请求 减少输入/输出(硬盘)访问 Memcached的缺点是 它不是持久的数据存储 不是数据库 它不是应用特定的 它不能缓存大对象
什么是自动化测试?
答案:自动化测试或测试自动化是将手动过程自动化以测试应用程序/系统的过程。自动化测试涉及使用单独的测试工具,这些工具可以创建可以重复执行且不需要人工干预的测试脚本。
如何使用WebDriver启动浏览器?
答案:以下语法可用于启动浏览器:
WebDriver driver = new FirefoxDriver();
WebDriver driver = new ChromeDriver();
WebDriver driver = new InternetExplorerDriver();
配置管理过程的目标是什么?
答案:配置管理(CM)的目的是在整个生命周期中确保产品的完整性,使开发或部署过程可控和可重复,从而创造更高品质的产品或系统。CM过程允许有序地管理系统信息和系统变更,例如:
修订能力
提高性能、可靠性和可维护性
延长寿命
降低成本
降低风险和责任
纠正缺陷
什么是Chef?
答案:首先定义Chef。Chef是一个强大的自动化平台,将基础设施转换为代码。Chef是一种编写脚本来自动化流程的工具。这些流程是什么?几乎任何与IT相关的内容。接下来你可以解释Chef的架构,它包括:
Chef服务器:Chef服务器是您的基础设施配置数据的中央存储库。Chef服务器存储配置节点所需的数据,并提供搜索功能,这是一个强大的工具,可以根据数据动态驱动节点配置。
Chef节点:节点是使用Chef客户端配置的任何主机。Chef客户端在节点上运行,联系Chef服务器以获取配置节点所需的必要信息。由于节点是运行Chef客户端软件的机器,有时节点也被称为“客户端”。
Chef工作站:Chef工作站是你用来修改你的菜谱和其他配置数据的主机。
什么是持续测试?
答案:我建议你遵循以下说明:
持续测试是在软件交付管道中执行自动化测试的过程,以立即获得有关最新构建的业务风险的反馈。通过这种方式,每次构建都会被持续测试,使开发团队能够快速获得反馈,防止这些问题进展到软件交付生命周期的下一个阶段。这大大加快了开发人员的工作流程,因为无需在更改后手动重建项目并重新运行所有测试。
持续集成的成功因素是什么?
答案:在这里,你需要提到持续集成的要求。你可以在答案中包含以下几点:
保持代码存储库
自动化构建
构建自我测试
每个人都每天提交到基线
每次提交(到基线)都应该被构建
保持构建快速
在生产环境的副本中测试
让每个人都能轻松获取最新的交付物
让每个人都能看到最新的构建结果
自动部署
什么是Puppet?
答案:我建议你首先给出Puppet的简短定义。
Puppet是一个强大的自动化平台,将基础设施转换为代码。Puppet是一种工具,用于编写脚本来自动化各种IT流程。接下来你可以解释Puppet的架构,它包括:
Puppet服务器:Puppet服务器是存储基础设施配置数据的中心存储库。它存储配置节点所需的数据,并提供搜索功能,这是一个强大的工具,可以根据数据动态驱动节点配置。
Puppet节点:节点是使用Puppet客户端配置的任何主机。Puppet客户端在节点上运行,从Puppet服务器获取配置节点所需的信息。
Puppet工作站:Puppet工作站是用于修改菜谱和其他配置数据的主机。
以下是翻译后的文本,保持了markdown格式:
它是一个用于自动执行管理任务的配置管理工具。现在你应该描述其架构以及Puppet如何管理其代理。Puppet具有主从架构,在这种架构中,从节点(或Puppet代理)必须首先向主节点发送证书签名请求,主节点必须签署该证书,以便在Puppet主节点和Puppet从节点之间建立安全连接,如下面的图所示。Puppet从节点向Puppet主节点发送请求,然后Puppet主节点将配置推送到从节点。 31. 什么是Puppet清单文件? 答:这是一个非常重要的问题,所以请确保你按正确的流程回答。根据我理解,你应该首先定义清单文件。每个节点(或Puppet代理)在其Puppet主节点上都有配置详情,这些配置是用原生Puppet语言编写的。这些详情是用Puppet可以理解的语言编写的,并称为清单文件。它们由Puppet代码组成,且文件名使用.pp扩展名。现在举个例子。你可以在Puppet主节点上编写一个清单文件,创建一个文件并在所有连接到Puppet主节点的Puppet代理(从节点)上安装apache。 32. 为了确保新服务准备好投入生产,需要进行哪些测试? 答:DevOps强调在整个过程中持续测试,从开发阶段到生产阶段。每个人都分担测试责任。这确保了开发者交付没有错误并且高质量的代码,并且也有助于每个人最有效地利用时间。 33. 解释Memcached应该如何不被使用? 答:Memcached常见的误用是将其用作数据存储而不是缓存。永远不要将Memcached作为运行应用程序所需信息的唯一来源。数据也应该通过另一个来源可用。Memcached只是一个键值存储,不能对数据进行查询或迭代内容以提取信息。Memcached也不提供任何形式的安全性,无论是加密还是身份验证。 34. 请解释一下你过去在一个组织中负责软件开发和技术运营方面的理解和专长? 答:DevOps工程师几乎总是在一个24/7的关键业务在线环境中工作。我适应了值班职责,并能够承担实时、现场系统的责任。我成功地自动化了流程以支持连续的软件部署。我有公共/私有云的经验,使用过Chef或Puppet等工具,使用Python和PHP等工具进行脚本和自动化,并有敏捷方法的背景。 35. 解释是否可以将一个Memcache实例共享给多个项目? 答:是的,可以将一个Memcache实例共享给多个项目。Memcache是一个内存存储空间,你可以在一台或多台服务器上运行Memcache。你也可以配置客户端与特定的一组实例通信。因此,你可以在同一主机上运行两个不同的Memcache进程,而它们是完全独立的。除非你已经对数据进行了分区,那么就需要知道从哪个实例获取数据或放入数据。 36. 解释如何最小化Memcached服务器宕机的影响? 答:当一个实例失败时,几个实例可能会同时宕机,这将在客户端请求丢失的数据时给数据库服务器带来更大的负载。为了避免这种情况,如果你的代码已编写以最小化缓存争抢,则影响会很小。另一种方法是在一台新机器上启动一个使用故障机器IP地址的Memcached实例。代码是另一种最小化服务器宕机的方法,因为它给你提供了更改Memcached服务器列表的自由。设置超时值是某些Memcached客户端实现的一种方法,用于处理Memcached服务器宕机。当你的Memcached服务器宕机时,客户端将继续尝试发送请求直到达到超时限制。 37. 持续交付是否与DevOps运动相关?如何相关? 答:绝对相关。在任何有独立运维部门的组织中,尤其是有独立的质量保证或测试职能的组织中,我们看到大部分软件交付的痛苦是由这些团队之间的沟通不畅引起的,这种不畅加剧了潜在的文化分歧。应用程序是根据吞吐量来衡量的,而运维是根据稳定性来衡量的。测试从两方面受到批评,像发布管理一样,常常成为应用程序和运维之间权力斗争中的政治棋子。DevOps的重点在于让开发者学会如何创建高质量、生产就绪的软件,而运维需要学习敏捷技术实际上是有效的、低风险的变更管理的强大工具。最终,我们都试图通过软件创造商业价值,但我们需要更好地合作并专注于这一目标,而不是试图优化自己的领域。不幸的是,许多组织并没有以奖励这种思维方式的方式建立起来。据Forrester报道。 38. 从技术和业务角度来看,DevOps有哪些优势? 答:技术优势:软件交付是连续的。减少问题复杂性。更快解决问题。减少人力。 业务优势:快速交付功能。稳定的运行环境。获得更多时间增加价值。加快功能上市时间。 39. 解释AWS? 答:AWS代表Amazon Web服务,是一个远程计算服务的集合,也被称为云计算。这种云计算技术也被称为IaaS或基础设施即服务。 40. 关于敏捷开发,DevOps工程师的职责是什么? 答:DevOps工程师与敏捷开发团队紧密合作,确保他们有一个必要的环境来支持自动化测试、持续集成和持续交付等功能。DevOps工程师必须与开发者保持密切联系,使环境的所有部分无缝运作。 41. DevOps帮助我们实现的最重要的一件事是什么? 答:根据我的理解,DevOps帮助我们实现的最重要的一件事是在尽量减少软件质量保证和合规性风险的同时尽快将更改投入生产。这是DevOps的主要目标。然而,DevOps还有许多其他积极的副作用。例如,更清晰的沟通和更好的团队间合作关系,这意味着运维团队和开发团队共同协作交付高质量的软件,从而提高客户满意度。 42. 你熟悉哪些版本控制系统工具? 答:你可以简单提到你所使用过的版本控制系统工具,例如:“我使用过Git,与其他版本控制系统工具(如SVN)相比,它的一个主要优点是它是一个分布式版本控制系统。” 分布式版本控制系统不需要依赖中央服务器来存储项目的文件的所有版本。相反,每个开发人员“克隆”一个仓库的副本,并在自己的硬盘上有项目的完整历史记录。 43. 你熟悉哪些测试工具?这些工具的优点是什么? 答:在这里提到你使用的测试工具,并相应地构建你的答案。以下是一个例子: 我使用Selenium来确保高质量和更频繁的发布。Selenium的一些优点是:它是免费和开源的;它有一个庞大的用户群和帮助社区;它具有跨浏览器兼容性(Firefox、Chrome、Internet Explorer、Safari等);它具有良好的平台兼容性(Windows、Mac OS、Linux等);它支持多种编程语言(Java、C#、Ruby、Python、Pearl等);它有新鲜和定期的存储库开发;它支持分布式测试。 44. 为什么持续监控是必要的? 答:我会建议你按照下面的流程来回答:持续监控允许及时识别问题或弱点,并采取快速纠正措施,这有助于减少组织的费用。持续监控提供了一种解决方案,解决了三个运营学科,即:持续审计、持续控制监控、持续交易检查。 45. DevOps最重要的作用是什么? 答:DevOps最重要的作用是尽快将更改投入生产,同时尽量减少软件质量保证和合规性的风险。这是DevOps的主要目标。然而,DevOps还有许多其他积极的副作用。例如,更清晰的沟通和更好的团队间合作关系,这创造了更少压力的工作环境。 46. 描述双因素认证? 答:双因素认证是一种安全过程,在此过程中,用户提供了来自不同类别的凭据的两种身份验证方式;一种通常是物理令牌, 47. 解释如何在Jenkins中创建备份和复制文件? 答:这个问题的答案非常直接。要创建备份,你需要定期备份你的JENKINS_HOME目录。这个目录包含了你所有的构建作业配置、你的从节点配置和你的构建历史。要创建Jenkins设置的备份,只需复制这个目录。你也可以复制一个作业目录以克隆或复制一个作业,或者重命名目录。 48. 什么是云计算? 答:这是一种高级技术,实施后可以根据用户需求在全球范围内提供云服务。它提供了一种访问世界各地服务器的方法。 49. 举例说明DevOps在行业/实际生活中如何使用? 答:有许多行业正在使用DevOps,你可以提到其中任何一个用例。你也可以参考下面的例子:Etsy是一个点对点电子商务网站,专注于手工艺品、古董商品及供应品,以及独特的工厂制造的商品。Etsy曾经历过缓慢且痛苦的站点更新,这些更新经常导致站点停机。这对通过在线市场销售商品的数百万Etsy用户造成了影响,并可能促使他们转向竞争对手。在新的技术管理团队的帮助下,Etsy从瀑布模型过渡到了更加敏捷的方法。今天,它拥有一个全自动化的部署管道,并且据报道,其持续交付实践每天可实现超过50次的部署,且中断更少。 50. 解释你会如何处理修订(版本)控制? 答:我处理修订控制的方法是将代码发布到SourceForge或GitHub,这样每个人都可以查看它。
此外,我将发布上一次修订的检查清单,以确保任何未解决的问题得到解决。51. 如何使软件可部署?回答:能够为软件系统的安装和重新配置编写脚本对于受控和自动化的更改至关重要。尽管新软件有越来越多的趋势支持这一点,但较旧的系统和产品由于假设更改将是不频繁且微小的,因此使得自动化更改变得困难。作为一名理解需要以可被自动化访问的方式暴露配置和设置的专业人士,我将使用如控制反转(IoC)和依赖注入、脚本化安装、测试工具、关注点分离、命令行工具和基础架构即代码等概念。
此外,我将发布上一次修订的检查清单,以确保任何未解决的问题得到解决。51. 如何使软件可部署?回答:能够为软件系统的安装和重新配置编写脚本对于受控和自动化的更改至关重要。尽管新软件有越来越多的趋势支持这一点,但较旧的系统和产品由于假设更改将是不频繁且微小的,因此使得自动化更改变得困难。作为一名理解需要以可被自动化访问的方式暴露配置和设置的专业人士,我将使用如控制反转(IoC)和依赖注入、脚本化安装、测试工具、关注点分离、命令行工具和基础架构即代码等概念。
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。