09月20日
2019 DevOps 必备面试题——配置管理篇

原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3
原文作者:Saurabh Kulshrestha
翻译君:CODING 戴维奥普斯

现在让我们来看看您对配置管理的了解程度。

Q1、配置管理流程的目标是什么?

配置管理(CM)的目的是通过使开发或部署过程可控且可重复,来确保产品或系统在其整个生命周期中的完整性,从而创建更高质量的产品或系统。CM 流程允许有序管理系统信息和系统更改,以便:
* 调整能力
* 提高性能
* 提升可靠性或可维护性
* 延长寿命
* 降低成本
* 降低风险
* 及时纠正缺陷

Q2、IT 资产管理和配置管理有什么区别?IT 资产和配置有什么区别?

以下是资产管理和配置管理之间的一些差异:

图片

接下来解释资产。它具有财务价值以及附加的折旧率。IT 资产只是它的一个子集。任何具有成本的组织都将其用于资产价值计算和税收计算中的相关收益归属于资产管理,此类项目称为资产。

另一方面,配置项可能有也可能没有分配给它的财务值,它不会有任何与之相关的折旧,因此它的生命不依赖于其财务价值,而是取决于该项目对该组织的过时时间。

现在,可以举例说明两者之间的相似性和差异:
1)相似性:
服务器 - 它既是资产又是配置项。
2)差异:
建筑 - 这是一种资产,但不是配置项。
文档 - 它是配置项但不是资产

Q3、您对“基础设施即代码”有何看法?它如何适用于 DevOps 方法?它的目的是什么?

基础设施即代码(IAC)是一种 IT 基础架构,运维团队可以使用它来自动管理和通过代码进行配置,而不是通过手工的过程。

更快部署的公司也将基础设施视为软件:可以使用 DevOps 工具和流程管理的代码。利用这些工具,您可以更轻松、快速、安全、可靠地更改基础架构。

Q4、Puppet、Chef、SaltStack 和 Ansible 中哪一个您认为是最好的配置管理(CM)工具?为什么?

这取决于研发组织的需求,因此需要在所有这些工具上提到以下几点:
Puppet 是最古老,最成熟的 CM 工具。Puppet 是一个基于 Ruby 的配置管理工具,虽然它有一些免费功能,但 Puppet 大部分很棒的内容仅在付费版本中可用。不需要大量额外功能的组织会发现 Puppet 很有用,但那些需要更多自定义的组织可能需要升级到付费版本。

Chef 是用 Ruby 编写的,因此可以由熟悉该语言的人进行定制。它还包括免费功能,如果需要,还可以从开源版本升级到企业级。最重要的是,它是一个非常灵活的产品。

Ansible 是一个非常安全的选项,因为它使用 Secure Shell。它是一个简单的工具,但除了配置管理之外,它还提供了许多其他服务。它非常容易学习,因此非常适合那些非专职 IT 但仍需要配置管理工具的人员。

SaltStack 是基于 python 的开源 CM 工具,适用于大型企业,但其学习曲线相当低。

Q5、什么是 Puppet?

它是一个配置管理工具,用于自动执行管理任务。Puppet 有一个 Master-Slave 架构,其中 Slave 必须首先向 Master 发送证书签名请求,Master 必须签署该证书才能在 Puppet Master 和 Puppet Slave 之间建立安全连接,如下图所示。Puppet Slave 向 Puppet Master 发送请求,然后 Puppet Master 向 Slave 推送配置。请参阅下图解释上述说明。

图片

Q6、在客户端使用 Puppet Master 进行身份验证之前,需要对其证书进行签名和接受。您将如何自动完成这项任务?

最简单的方法是在 puppet.conf 中启用自动签名。请注意这是一个安全风险。如果您仍想这样做:
* 为您的 puppet master 建立防火墙 - 将端口 tcp / 8140 限制为您信任的网络。
* 为每个“信任区域”创建 puppet master,并且只在该 puppet master 清单中包含可信节点。
* 切勿使用完整的通配符,例如 * 。

Q7、描述通过 Puppet 自动化流程所取得的最重要的收益

对于这个答案,我建议您解释一下您过去使用 Puppet 的经历。可以参考以下示例:
我使用 Puppet 自动配置和部署 Linux 和 Windows 机器。除了将处理时间从一周缩短到 10 分钟之外,我还使用了角色和配置文件模式,并在 README 中记录了每个模块的用途,以确保其他人可以使用 Git 更新模块。我写的模块仍然在使用,但是我的团队成员和社区成员对它们进行了改进。

Q8、您使用哪些开源或社区工具来使 Puppet 更强大?

在这里,您需要提及工具以及如何使用这些工具使 Puppet 更强大。以下是一个供您参考的示例:
我们通过项目管理工具进行更改请求,通过内部流程管理请求,然后我们使用 Git 和 Puppet 的 Code Manager 应用程序来管理 Puppet 代码。此外,我们使用测试框架通过 Jenkins 中的持续集成流水线运行所有 Puppet 更改。

Q9、什么是 Puppet 清单?

首先定义清单。每个节点(或 Puppet Agent)都在 Puppet Master 中获得了用 Puppet 语言编写的配置细节。这些细节用 Puppet 可以理解的语言编写,称为 Manifest。它们由 Puppet 代码组成,其文件名使用 .pp 扩展名。

现在举个例子:您可以在 Puppet Master 中编写一个清单,用于创建文件并在连接到 Puppet Master 的所有 Puppet Agent(Slaves)上安装 apache。

Q10、什么是 Puppet 模块以及它与 Puppet Manifest 的不同之处?

Puppet 模块是清单和数据(例如事实,文件和模板)的集合,它们具有特定的目录结构。模块对于组织 Puppet 代码很有用,因为它们允许您将代码拆分为多个清单。使用模块来组织几乎所有的 Puppet 清单是最佳实践。

Puppet 程序称为 Manifest,它由 Puppet 代码组成,其文件名使用 .pp 扩展名。

Q11、什么是 Puppet 的 Facter?

您应该回答 Facter 在 Puppet 中做了什么:“Facter 收集有关 Puppet Agent 的基本信息(事实),如硬件细节,网络设置,操作系统类型和版本,IP 地址,MAC 地址,SSH 密钥等等。这些 facts 随后会在 Puppet Master 的清单中作为变量提供。”

Q12、什么是 Chef?

它是一个强大的自动化平台,可将基础架构转换为代码。Chef 是一个工具,您可以编写用于自动化流程的脚本,流程涵盖几乎与 IT 相关的任何事情。

Chef 的架构包括:
* Chef Server:Chef Server 是基础架构配置数据的中央存储。Chef Server 存储配置节点所需的数据并提供搜索功能,并允许您根据数据动态驱动节点配置。
* Chef Node:Node 是使用 Chef-client 配置的任何主机。Chef-client 在您的节点上运行,与 Chef Server 联系以获取配置节点所需的信息。由于 Node 是运行 Chef-client 软件的机器,因此节点有时被称为“客户端”。
* Chef Workstation:Chef Workstation 是您用来修改 cookbook 和其他配置数据的主机。

图片

Q13、Chef 的资源是什么?

资源代表一个基础架构及其所需的状态,例如应安装的软件包,应运行的服务或应生成的文件。
资源的功能包括以下几点:
* 描述配置项的所需状态。
* 声明将该项目置于所需状态所需的步骤。
* 指定资源类型,例如包,模板或服务。
* 根据需要列出其他详细信息(也称为资源属性)。
* 被分类为配方(recipes),来描述工作配置。

Q14、Chef 的 Recipe 是什么?

Recipes 描述了特定配置或策略的资源集合,描述了配置系统部分所需的一切。
Recipes 的功能:
* 安装和配置软件组件。
* 管理文件。
* 部署应用程序。
* 执行其他 recipe。

Q15、Cookbook 与 Recipe 有何不同?

可以简单地说,“Recipe 是一组资源,主要配置软件包或某些基础架构。Cookbook 将 recipe 和其他信息整合在一起,比单独使用 recipe 更易于管理。”
译者注:cookbook 类似于食谱集;recipe 类似于食谱。

Q16、如果未在 Chef 中指定 Resource 操作,会发生什么?

当您未指定资源的操作时,Chef 会使用默认操作。
现在用一个例子解释一下,如下资源:

file ‘C:UsersAdministratorchef-reposettings.ini’ do
content ‘greeting=hello world’
end

与下面的资源相同:
file ‘C:UsersAdministratorchef-reposettings.ini’ do action :create content ‘greeting=hello world’ end
因为:创建是文件资源的默认操作。

Q17、什么是 Ansible 模块?

模块被认为是 Ansible 的工作单元。每个模块大多是独立的,可以用标准的脚本语言编写,如 Python、Perl、Ruby、bash 等。模块的一个重要属性是幂等性,这意味着即使一个操作重复多次(例如从停电中恢复),它会始终将系统置于同一状态。

Q18、什么是 Ansible 的 playbooks?

Playbooks 是 Ansible 的配置、部署和编排语言。他们可以描述您希望远程系统实施的策略,或者描述一般 IT 流程中的一系列步骤。Playbooks 设计为人类可读的,并以基本文本语言开发。在基础级别,可以使用 playbooks 来管理远程计算机的配置和部署。

Q19、如何查看所有 ansible_ 变量的列表?

Ansible 默认收集有关所管理机器的“facts”,可以在 playbooks 和模板中访问这些“facts”。要查看计算机的所有可用“facts”的列表,可以将“设置”模块作为临时操作运行:
Ansible -m setup hostname
这将打印出那个特定主机所有可用“facts”的目录。

coding1710