如果您正在寻找 devOps 工作,那么您正在做出良好的职业决策,因为它现在是高薪且需求量很大的工作。在本文中,我们将介绍您可能期望面试官提出的 DevOps 面试问题。问题很多,我们不可能一一列出,但是阅读本文后,您应该对等待您的问题以及您应该准备的内容有更好的了解。
基本问题
1) 开发运维!你怎么能用你的话来定义它?
它在软件开发人员和 IT 运营/网络运营工程师之间进行高效的日常协作,以生成工作系统或发布软件。
devOps 实施通常与敏捷方法保持一致,其中将工作软件部署到生产通常是最高优先级。在敏捷实施中,重点是人而不是流程,因此 DevOps 工程师必须愿意与敏捷开发团队密切合作,以确保他们拥有支持自动化测试、持续集成和持续交付等功能所需的环境。在没有 DevOps 的传统实施中,运营团队通常与开发人员隔离,通常在系统运营团队将开发人员视为客户的一般服务水平协议下的帮助台模型下工作。这是一个经过验证的模型,显然可以很好地工作,但在 DevOps 环境中,
2) 为什么我们需要 DevOps ?
公司现在面临着交付更多、更快和更好的应用程序的需求,以满足有意识的用户日益紧迫的需求,以缩短“上市时间”。Devops 通常有助于快速部署。
3) 什么是敏捷开发和 Scrum?
敏捷开发用作瀑布式开发实践的替代方案。在敏捷中,开发过程更加迭代和增量,在开发的每个阶段都有更多的测试和反馈,而不是瀑布的最后一个阶段。
Scrum 用于使用迭代和增量实践来管理复杂的软件和产品开发。Scrum 具有三个角色,即产品负责人、Scrum Master 和团队。
4) 我们可以将 DevOps 视为一种敏捷方法吗?
当然!DevOps 是一种通过一系列良好实践协调和同步开发和生产开始的运动。它的出现是由业务需求的深刻变化推动的,他们希望加快变化以更贴近业务和客户的需求。
5) DevOps 工程师在敏捷开发方面的职责是什么?
DevOps 工程师与敏捷开发团队密切合作,以确保他们拥有支持自动化测试、持续集成和持续交付等功能所需的环境。DevOps 工程师必须与开发人员保持持续联系,并使环境的所有必需部分无缝工作。
技术问题
6) 什么是容器?
容器是轻量级虚拟化的一种形式,比 chroot 重,但比虚拟机管理程序轻。它们在使用与主机相同的内核时提供进程之间的隔离,并在内核中提供 cgroups 功能。但容器格式之间存在差异,有些格式提供更多类似 VM 的体验,而另一些则仅将应用程序容器化。
LXC 容器最像虚拟机,重量最重,而 Docker 过去重量更轻,最初是为单个应用程序容器设计的。但在最近的版本中,Docker 引入了整机容器化功能,因此现在 Docker 可以双向使用。还有来自 CoreOS 的 rkt 和来自 Canonical 的 LXD,它建立在 LXC 之上。
7) 什么是 Kubernetes?解释
它是由 Google 制造的用于管理容器的大规模可扩展工具。它在内部用于大型部署,因此它可能是容器生产使用的最佳选择。它通过重述非响应式容器来支持自我修复,它以占用更少资源的方式打包容器并具有许多其他出色的功能。
8) CI(持续集成)服务器的功能是什么?
CI 服务器功能是持续集成不同开发人员所做的所有更改并提交到存储库并检查编译错误。它需要每天多次构建代码,最好是在每次提交之后,这样它就可以检测到哪个提交造成了破坏,如果发生破坏。
注意:其他可用和流行的 CI 工具是 Jenkins、TeamCity、CircleCI、Hudson、Buildbot 等
9) 什么是持续交付?
它是在 CI(持续集成)服务器构建后立即交付用于测试的软件的做法吗?它需要大量使用版本控制系统,以便开发人员和测试人员始终可以使用。
10)什么是 Vagrant,它的用途是什么?
Vagrant 是一种可以创建和管理用于测试和开发软件的虚拟化(或容器化)环境的工具。起初,Vagrant 使用 virtualbox 作为虚拟环境的管理程序,但现在它也支持 KVM。
11) 你曾经使用过任何脚本语言吗?
就脚本语言而言,越简单越好。事实上,语言本身并不像理解设计模式和开发范例(如过程式、面向对象或函数式编程)那么重要。
目前,有几种脚本语言可用,因此出现了一个问题:最适合 DevOps 方法的语言是什么?简单来说,这取决于项目的上下文和所使用的工具,例如 Ansible 是否使用了其在 Python 方面的良好知识,以及它是否适用于 Chef 是否使用 Ruby。
12) 配置管理工具在 devops 中的作用是什么?
自动化在服务器配置管理中起着至关重要的作用。为此,我们使用 CM 工具,它们存储有关软件和测试件的版本和构建的信息,并提供软件和测试件之间的可追溯性。
13) CM 工具的用途是什么?您使用的是哪一种?
配置管理工具的目的是在大量服务器上自动部署和配置软件。大多数 CM 工具通常使用代理架构,这意味着每台被管理的机器都需要安装代理。我最喜欢的工具是使用无代理架构的工具——Ansible。它只需要 SSH 和 Python。如果使用原始模块,甚至不需要 Python,因为它可以运行原始 bash 命令。其他可用和流行的 CM 工具是 Puppet、Chef、SaltStack。
14) 什么是 OpenStack?
OpenStack 通常被称为云操作系统,这与事实相差不远。它是部署 IaaS 的完整环境,让您可以创建类似于 AWS 的自己的云。它是高度模块化的,由许多子项目组成,因此您可以选择所需的功能。OpenStack 发行版可从 Red Hat、Mirantis、HPE、Oracle、Canonical 和许多其他公司获得。它是完全开源的项目,但一些供应商制作了专有发行版。
15) 对云平台进行分类?
云计算软件可分为软件即服务或 SaaS、基础设施即服务或 IaaS 和平台即服务或 PaaS。
SaaS 是在远程服务器上通过网络运行的软件,只有用户界面暴露给用户,通常在 Web 浏览器中。例如 salesforce.com。
基础设施即服务是一种云环境,它将 VM 公开给用户以用作整个操作系统或容器,您可以在其中安装任何您想在服务器上安装的东西。例如 OpenStack、AWS、Eucalyptus。
PaaS 允许用户在预安装的平台上部署自己的应用程序,通常是应用程序服务器框架和开发人员工具套件。这方面的例子是 OpenShHeroku。
16) 构建小型云的最简单方法是什么?
VMfest 是立即从 VirtualBox 虚拟机创建 IaaS 云的选项之一。如果你想要一个轻量级的 PaaS,可以使用 Dokku,它基本上是一个 bash 脚本,它使 PaaS 脱离了 Dokku 容器。
17) 什么是 AWS(亚马逊网络服务)?有机会在亚马逊工具上工作吗?
AWS 提供了一套灵活的服务,旨在使公司能够使用 AWS 和 DevOps 实践以更快的速度和可靠性创建和交付产品。这些服务简化了调试和基础设施管理、应用程序代码部署、自动化软件发布过程以及应用程序和基础设施性能的监控。Amazon 使用了 AWS CodeCommit、AWS CodeDeploy、AWS CodePipeline 等工具,这些工具有助于简化开发运营。
18) 什么是 EC2?
Amazon EC2 Container Service (ECS) 是一种高度可扩展的容器管理服务和高性能,它支持 Docker 容器并允许您在由 Amazon EC2 实例管理的集群上轻松运行应用程序。
EC2服务离不开Amazon Machine Image-AMI的概念。May 确实是一个将被执行的虚拟机的形象。EC2 基于 XEN 虚拟化,这就是为什么将 XEN 服务器迁移到 EC2 非常容易的原因。
19) 你发现使用 NoSQL 数据库优于 RDBMS 有什么优势吗?
典型的 Web 应用程序是使用三层架构构建的。为了承载负载,只需在负载平衡器后面添加更多 Web 服务器以支持更多用户。横向扩展的能力是云计算领域的一个关键原则,在其中可以轻松添加或删除 VM 实例以满足需求变得越来越重要。
但是,在数据层方面,关系数据库(RDBMS)不允许通向简单的规模,也没有提供灵活的数据模型。管理更多用户意味着添加更多服务器,大型服务器非常复杂,拥有者和成本高得不成比例,这与低成本硬件、“商品硬件”、云中的架构形成鲜明对比。组织开始发现现有或新应用程序的关系数据库存在性能问题。尤其是随着用户数量的增加,他们意识到需要更快、更灵活的基础。现在是开始评估和采用 NoSQL 数据库的时候了,就像在他们的 Web 应用程序中一样。
20) NoSQL 的主要 SQL 迁移困难是什么?
根据模式在关系数据库中的每条记录 - 具有固定数量的字段(列),每个字段(列)具有指定的对象和数据类型。每条记录都是一样的。数据在几个表中进行了非规范化。优点是数据库中的重复数据较少。缺点是模式中的更改意味着执行多个“更改表”,这需要昂贵的同时锁定多个表以确保更改不会使数据库处于不一致状态。
另一方面,对于数据库数据,每个文档都可以具有与其他文档完全不同的结构。不需要对数据库进行额外的管理来管理方案中的更改。
21) NoSQL 数据库文档有什么好处?
文档数据库的主要优点如下:
- 灵活的数据模型数据可以在没有定义模式的情况下插入,插入的数据格式可以随时更改,提供极大的灵活性,最终为业务带来显着的敏捷性。
- 一致、高性能的高级 NoSQL 数据库技术正在将缓存数据透明地放入系统内存中;对开发人员和负责运营的团队完全透明的行为。
- 一些易于扩展的 NoSQL 数据库自动在服务器之间传播数据,不需要应用程序参与。可以在不中断应用程序的情况下添加和删除服务器,数据和 I/O 分布在多个服务器上。
22) Git 相对于 CVS 的主要优势是什么?
最大的优势是 Git 是分布式的,而 CVS 是中心化的。CVS 中的更改是针对每个文件的,而 Git 中的更改(提交)总是指整个项目。Git 提供的工具比 CVS 多得多。
23) 容器和虚拟机之间的区别?
每个 VM 实例化都需要启动一个完整的操作系统。虚拟机占用大量系统资源。这很快就会增加大量的 RAM 和 CPU 周期。容器主机使用 linux 内核的进程和文件系统隔离特性。
24) 什么是CoreOS,有什么替代品?
CoreOS 是用于运行容器的精简 Linux 发行版,主要具有自己的 rkt 格式,但也支持其他格式。它最初基于 ChromeOS 并支持 Docker。替代方案是 canonical 的 ubuntu snappy 或 red hat 企业 linux atomic 主机。当然,Containers 也可以运行在常规的 Linux 系统上。
25) 什么是 Kickstart?
这是一种通过自动方式安装基于 Red Hat 的系统的方法。在手动安装过程中,Anaconda 安装程序会创建文件 anaconda-ks.cfg,然后可以使用 system-config-kickstart 工具在多个系统上自动安装相同的配置。
26) 什么是网络监控工具?列举几个
例如,Nagios、Icinga 2、OpenNMS、Splunk 和 Wireshark。这些工具用于监控网络流量、网络质量并在网络问题出现之前检测它们。在列出的那些中,只有 Splunk 是专有的,其他是开源的。
27) Juju 是什么?
Juju 是主要用于 ubuntu 的编排工具,用于在 Ubuntu 系统上进行管理、配置和配置。它最初是用 Python 编写的,后来用 Go 重写了。
28) 给我一个你将如何处理项目的例子?
作为一名 DevOps 工程师,我将展示对 DevOps 项目管理策略的清晰理解,并与团队合作设定目标、简化工作流程、维护范围、研究和引入新工具或框架、将需求转化为工作流程并跟进。我会求助于 CI、发布管理和其他工具来保持跨学科项目的正常进行。
29) 什么是尸检会议?
这是一个会议,我们讨论出了什么问题以及应该采取哪些步骤,以使失败不再发生。事后分析会议不是要找出应该受到指责的人,而是要防止再次发生中断并计划重新设计基础设施,以便最大限度地减少停机时间。这是关于从错误中学习。
30)你对无服务器模型了解多少?
无服务器是指对开发人员隐藏服务器存在的模型。这意味着您不再需要处理容量、部署、扩展和容错以及操作系统。它将从根本上减少维护工作,并允许开发人员快速专注于开发代码。
示例是 Amazon AWS Lambda 和 Auth0 无服务平台。
Devops 示例:使用 Ansible 部署应用程序
Ansible 是一个轻量级、可扩展的解决方案,用于自动化您的应用程序配置。Ansible 除了 Python 和 SSH 之外没有其他依赖项。它不需要在远程主机上设置任何代理,运行后也不会留下任何痕迹。它允许您通过创建简单的基于 YAML 的剧本来显着简化我们的操作。它有利于配置自动化、部署和编排。
Ansible 的组件
Playbooks: Ansible playbooks 是一种以脚本方式向远程计算机发送命令的方法。您可以通过将脚本传递给一个或多个系统来配置整个复杂环境,而不是单独使用 Ansible 命令从命令行远程配置计算机。
Ansible playbook 以 YAML 数据序列化格式编写。如果您不知道什么是数据序列化格式,请将其视为一种将编程数据结构(列表、数组、字典等)转换为可以轻松存储到磁盘的格式的方法。然后可以使用该文件在以后重新创建结构。JSON 是另一种流行的数据序列化格式,但 YAML 更容易阅读。
让我们看一个允许我们在多个主机中安装 Web 应用程序 (nginx) 的基本剧本:
hosts: webservers
tasks:
- name: Installs nginx web server
apt: pkg=nginx state=installed update_cache=true
notify:
- start nginx
handlers:
- name: start nginx
service: name=nginx state=started
hosts 文件:(默认在 /etc/ansible/hosts 下)这是 Ansible Inventory 文件,它存储主机及其到主机组(网络服务器、数据库等)的映射
[webservers]
10.0.15.22
# example of setting a host inventory by IP address.
# also demonstrates how to set per-host variables.
[repository_servers]
example-repository #通过主机名设置主机的示例。需要在 /etc/hosts # 或 DNS 中进行本地查找。
[数据库服务器]
db01
SSH 密钥:对于第一次运行,我们需要告诉 ansible SSH 和 Sudo 密码,因为常见的角色之一是配置无密码 sudo,并部署 SSH 密钥。因此在这种情况下,ansible 可以在远程节点(主机)中执行 playbook 的命令并部署 Web 应用程序 nginx。
结论
这些是你在面试中可能会遇到的一些问题,但是在学习 DevOps 概念时,你绝不应该只专注于那些阅读所有与 Linux 和开源相关的东西,并尝试任何对你有用的软件。感谢您的阅读。