Devops面试准备


文档摘要

主题 学习 主题 !学习 - DevOps 面试问题 编程: 操作系统-Linux: 网络: 安全: Docker kubernetes 架构: 基础架构即代码: 设置 测试 DevOps 面试问题 Q1) 您能告诉我们 DevOps 和敏捷之间的基本区别吗? A: 虽然 DevOps 与其中一种最流行的软件开发生命周期(SDLC)方法论——敏捷方法有一些相似之处,但两者都是对软件开发的基本不同方法。以下是两者之间的各种基本区别: 敏捷方法 - 敏捷方法仅适用于敏捷中的开发,而 DevOps 方法则同时适用于 DevOps 中的开发和运维。

主题 学习

DevOps 面试问题

  • Q1) 您能告诉我们 DevOps 和敏捷之间的基本区别吗?
  • A: 虽然 DevOps 与其中一种最流行的软件开发生命周期(SDLC)方法论——敏捷方法有一些相似之处,但两者都是对软件开发的基本不同方法。以下是两者之间的各种基本区别:
  • 敏捷方法 - 敏捷方法仅适用于敏捷中的开发,而 DevOps 方法则同时适用于 DevOps 中的开发和运维。
  • 实践和流程 - 虽然敏捷涉及诸如敏捷 Scrum 和敏捷看板等实践,但 DevOps 涉及诸如 CD(持续交付)、CI(持续集成)和 CT(持续测试)等流程。
  • 优先级
  • 敏捷优先考虑时间性,而 DevOps 则同等重视时间和质量。
  • 发布周期
  • DevOps 提供较小的发布周期并提供即时反馈,而敏捷仅提供较小的发布周期而不提供即时反馈。
  • 反馈来源 - 敏捷依赖于客户反馈,而 DevOps 涉及来自自身(监控工具)的反馈。
  • 工作范围 - 对于敏捷而言,工作范围仅是灵活性,但对于 DevOps 来说,它不仅包括灵活性还包括自动化的需求。
  • Q2) 为什么我们需要 DevOps?
  • A: 现在,组织试图通过一系列发布列车将小功能传递给客户,而不是一次性发布大量功能集。这样做有很多好处,包括更好的软件质量和快速的客户反馈。
  • 所有这些好处导致更高的客户满意度,这是任何产品开发项目最重要的目标。为此,公司需要:
  • 增加部署频率 - 减少修复之间的前置时间 - 降低新发布的故障率 - 如果新版本崩溃,则具有更快的恢复平均时间
  • DevOps 帮助满足所有这些要求,并因此实现无缝的软件交付。像亚马逊、Etsy 和谷歌这样的全功能组织采用了 DevOps 方法,从而实现了以前未达到的性能水平。
  • 采用 DevOps 方法后,组织每天可以完成数十到数千次部署。而且,在提供一流可靠性、安全性和稳定性的过程中做到这一点。
  • Q3) 使用 DevOps 的重要业务和技术优势是什么?
  • A: DevOps 带来了很多业务和技术优势。其中一些最重要的如下:
  • 业务优势: - 增强的操作环境稳定性 - 更快地交付功能 - 为增加产品价值提供更多的时间
  • 技术优势: - 持续软件交付 - 更快的问题解决 - 较少复杂的难题
  • Q4) 您能说出一些常用的 DevOps 工具吗?
  • A: 以下是一些最广泛使用的 DevOps 工具列表:
  • Ansible – 一个配置管理和应用程序部署工具
  • Chef – 一个配置管理和应用程序部署工具
  • Docker – 一个容器化工具
  • Git – 一个版本控制系统(VCS)工具
  • Jenkins – 一个持续集成(CI)工具
  • Jira – 一个敏捷团队协作工具
  • Nagios – 一个持续监控工具
  • Puppet – 一个配置管理和应用程序部署工具
  • Selenium – 一个持续测试(CT)工具
  • Q5) Selenium 用于什么?
  • A: Selenium 用于 DevOps 中的持续测试。该工具专门用于功能测试和回归测试。
  • Q6) 您如何理解 DevOps 中的 Puppet?
  • A: 它是一个用于自动化管理任务的配置管理工具。Puppet 使用主从架构,其中两个实体通过加密通道进行通信。 - 系统管理员需要执行许多重复的任务,特别是安装和配置服务器。编写脚本来自动化这些任务是一种选择,但在基础设施较大的情况下会变得繁琐。配置管理是对此的一种很好的解决方案。
  • Puppet 帮助配置、部署和管理服务器。它不仅使这些冗余任务更容易,还减少了总工作时间。
  • 成熟的配置管理工具: - 持续检查主机所需的配置是否到位。如果被更改,配置将自动恢复 - 为每个主机定义不同的配置 - 动态调整(上下)机器 - 控制所有已配置的机器,以便中央更改可以自动传播到所有机器上
  • Q7) 您如何理解 DevOps 的反模式?
  • A: 当其他组织通常采用的 DevOps 模式在一个特定情境中不起作用,但组织仍然继续使用它时,就会形成反模式。换句话说,反模式是关于 DevOps 的神话。一些著名的反模式包括:
  • 组织需要有一个单独的 DevOps 团队
  • 敏捷等于 DevOps - DevOps 是一个过程
  • DevOps 是以开发为主的发布管理 - DevOps 不可能因为组织是独特的
  • DevOps 不可能因为可用的人不适合
  • DevOps 意味着开发人员管理生产
  • DevOps 将解决所有问题
  • 在正在进行的 DevOps 过渡中未能包含组织的所有方面
  • 在 DevOps 过渡开始时不定义 KPI
  • 用一个新的 DevOps 团队减少开发和运营基于孤岛的隔离,该团队与其他部分隔离开来
  • Q8) DevOps 有所谓的 CI。它是什么以及它的目的是什么?
  • A: DevOps 中的 CI 代表持续集成。CI 是一种开发实践,开发人员会在一天内多次将代码集成到共享存储库中。
  • 开发和测试的持续集成提高了软件的质量,并减少了交付所需的整体时间。
  • 如果团队成员在提交代码时遇到编译失败,那么开发者就破坏了构建。这样,其他开发者无法与共享源代码存储库同步,而不会将其自己的工作空间引入编译错误。
  • 这会中断协作和共享的开发过程。因此,一旦 CI 构建中断,立即识别并纠正问题是很重要的。
  • 通常,CI 过程包括每次编译成功时运行的一套单元测试、集成测试和回归测试。如果上述任何测试失败,CI 构建被认为是不稳定(这在开发持续进行的敏捷冲刺期间很常见),而不是破裂。
  • Q9) 在 DevOps 中我们经常听到“左移”。它是什么意思?
  • A: 传统的软件开发生命周期绘制在纸上时有两个侧面,左边和右边。左边的图包括设计和开发,而右边的图包括生产阶段、压力测试和用户验收。
  • 在 DevOps 中“左移”意味着尽可能多地将通常发生在应用程序开发过程后期的任务纳入 DevOps 方法的早期阶段。
  • 实现 DevOps 中“左移”的方法有很多,最显著的是:
  • 在每个敏捷冲刺结束时创建生产就绪工件
  • 在每个构建中加入静态代码分析例行程序
  • 做好 DevOps 的程度直接取决于尽可能多的“左移”。
  • Q10) DevOps 中的 CAMS 代表什么?
  • A: 缩写 CAMS 通常用于描述 DevOps 方法的核心信条。它代表: - 文化 - 自动化 - 度量 - 共享
  • Q11) 用于衡量 DevOps 成功的几个 KPI 是什么?
  • A: KPIs 是关键绩效指标的缩写。为了衡量 DevOps 流程的成功,可以使用多个 KPI。其中一些最受欢迎的是:
  • 应用程序性能 - 应用程序使用和流量 - 自动化测试通过率 - 可用性 - 变更量 - 客户票证 - 缺陷逃逸率 - 部署频率 - 部署时间 - 错误率 - 失败部署 - 领导时间 - 检测平均时间 (MTTD) - 恢复平均时间 (MTTR)
  • Q12) 您认为实施 DevOps 自动化的重大好处是什么?
  • A: 实施 DevOps 自动化的重大好处如下:
  • 从 CD 方程中消除人为错误的可能性(核心优势)
  • 随着任务变得更加可预测和可重复,当出现问题时容易识别和纠正。因此,这会导致产生更加可靠和稳健的系统
  • 从 CI 管道中去除瓶颈。这导致部署频率增加和失败部署次数减少。这两个都是重要的 DevOps KPI。
  • Q13) 您如何理解容器? - A: 容器是一种轻量级虚拟化形式,有助于在进程之间提供隔离。容器比 chroot 重,但比 hypervisor 轻。
  • Q14) 微服务是 DevOps 的核心部分。您能说出两种流行的用于创建微服务的 Java 开发框架吗?
  • A: 有许多 Java 框架允许创建微服务。然而,Eclipse MicroProfile 和 Spring Boot 是两个领先的 Java 开发框架,用于 DevOps 创建微服务。
  • Q15) 您如何理解版本控制系统(VCS)?定义其用途。
  • A: 版本控制系统或 VCS 是一种能够记录文件或一组文件随时间变化的能力的系统。Git 和 Mercurial 是两个最流行的版本控制系统。VCS 的重要用途包括:
  • 检查最后一次修改导致的问题
  • 比较随时间变化的修改
  • 确定谁在什么时间引入了一个新的问题
  • 将文件或文件恢复到某个早期状态
  • 将整个项目恢复到先前的状态
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) 什么是缓存?大规模应用应该在哪里缓存,以及缓存哪些数据?

编程:

  • Q1) 你最喜欢的脚本/编程语言是什么?为什么?
  • Q2) 通用计算机科学、算法问答:5分钟
  • Q3) 讨论可能的实现和数据结构的应用:
    • 二叉树
    • 哈希表
  • Q4) 讨论复杂度类并举例说明:
    • 线性
    • 多项式
    • NP 完全 / NP 难
  • Q5) 讨论排序算法:
    • 最快的排序算法是什么?
    • 快速排序的复杂度是多少?
  • Q6) 分布式系统:
    • 什么是 Paxos?
    • 什么是 Raft?
    • 什么是一致性哈希?
  • Q7) 动手编码:
    • 就地反转字符串
  • Q8) 动态规划和图论的深入概念
  • Q9) 开发编码问题
  • Q10) 使用 GIT 描述开发/测试/生产的工作流程
    • 特性分支 vs 主干开发
    • 需要拉取请求和批准的优势

操作系统-Linux:

  • Q1) 如何查看正在运行的进程?
    • ps aux
    • top(htop)
  • Q2) 如何检查服务器运行时间?
    • uptime
    • top
  • Q3) 如何启动/停止服务?
    • (废弃) service start/stop service_name
    • systemctl start/stop service_name
  • Q4) 如何显示 shell 的环境变量?
    • env
    • printenv
  • Q5) 脚本顶部的 #!/bin/bash 是什么意思?
    • 它告诉 shell 运行此脚本时使用哪个解释器
  • Q6) 命令后跟 & 代表什么?
    • 它在后台运行命令
  • Q7) 命令管道意味着什么?
    • 使用 '|' 进行管道传输一个命令的 stdout 到另一个命令的 stdin,例如,ps aux | grep httpd 第一个命令显示所有运行中的进程,然后将 stdout 传递给第二个命令,其查找包含 'httpd' 的字符串
  • Q8) 你在服务器上使用过哪些发行版?为什么?
    • Ubuntu - 很新的内核和包
    • CentOS/RHEL - 企业级稳定
  • Q9) 你最喜欢哪个编辑器?
  • Q10) 什么是 RAID?RAID0、RAID1、RAID5、RAID10 是什么?
  • Q11) 描述 Linux 系统的一般文件系统层次结构
  • Q12) 描述以下命令行工具的作用:
    • tee
    • awk
    • tr
    • cut
    • curl
    • tail
    • sed
  • Q13) 命令行演示:
    • 在所有 *.py 文件中搜索 "我的功夫是最好的"
    • 在所有 *.txt 文件中将 "我的功夫是最好的" 替换为 "我是一个 Linux 大师"
    • 查找在过去 30 天内被访问过的所有文件
  • Q14) 虚拟内存和交换的区别是什么?
  • Q15) 硬链接和符号链接的区别是什么?
  • Q16) 什么是 inode,inode 中存储了哪些字段?
  • Q17) 什么是僵尸进程?
  • Q18) 是否可以在同一 IP 上设置多个 HTTPS 虚拟主机?
    • 可以,我可以在一个 IP 上设置多个虚拟主机,并通过不同的端口来区分它们
  • Q19) 进程和线程有什么区别?
  • Q20) exec 和 fork 的区别是什么?
  • Q21) Nginx 如何处理大量连接?它内部使用什么?
    • 示例答案:Eventloop
  • Q22) nohup 用来做什么?
  • Q23) 什么是原子操作?
  • Q24) 我已将公钥添加到 authorized_keys,但仍然需要输入密码,可能是什么问题?
  • Q25) 如何捕获 SIGHUP 信号?SIGSEGV 和 SIGKILL 呢?
  • Q26) Linux 内核 OOM 是什么?它是如何工作的?
  • Q27) 什么是 chroot 监狱?
  • Q28) 详细描述 Linux 启动过程,从系统通电开始,直到获得提示。
  • Q29) 什么是 LD_PRELOAD,何时使用它?
  • Q30) 你运行了一个二进制文件,但什么都没有发生。你会如何调试这个问题?
    • 我用 strace 运行二进制文件,例如:strace binary_name
  • Q31) 什么时候套接字会收到 EAGAIN?
  • Q32) 动态链接和静态链接的文件是什么?
  • Q33) 一个粗心的管理员执行了以下命令:chmod 444 /bin/chmod - 你该如何修复这个问题?
  • Q34) 我丢失了我的 root 密码,我该怎么办?
  • Q35) 你不小心删除了一个正在运行的脚本,你该如何恢复它?
  • Q36) 你使用过哪些负载均衡器?

网络:

  • Q1) 什么是 IPv6?我们为什么要关心它?
  • Q2) ping 是如何工作的?traceroute 呢?
  • Q3) 当我在浏览器的 URL 栏中键入 http://www.yahoo.com 并按下回车键时,会发生什么?(在每个 OSI 层讨论 - 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)
    • DNS 和任播,IP,UDP,路由,BGP,TCP,HTTP,透明代理
    • 什么是 BGP?
    • DNS 中的 PTR 是什么?我们为什么要关心它?
  • Q4) 如果我把 http://www.yahoo.com 改成 https://www.yahoo.com,会发生什么?
    • 公开/私有证书,CA,代理,中间人攻击等
  • Q5) 当我点击电子邮件客户端中的发送按钮时,会发生什么?
  • Q6) 我们如何防止机器人爬取?如何应对 SYN 泛洪攻击?
  • Q7) 在一个 /24 网络中有多少主机?/22 网络呢?
  • Q8) DNAT 和 SNAT 的区别是什么?何时使用其中任何一个?
  • Q9) 什么是虚拟 IP 地址?什么是集群?
  • Q10) 什么是 IPv6?我们为什么要关心它?

安全:

  • Q1) SSL 的重要性是什么?
    • A: 使用 SSL 可以通过加密服务器与客户端之间的消息来确保通信安全,即使消息被截获,攻击者也无法解密这些消息。
  • Q2) 什么是 SQL 注入?
    • A: 一种针对 SQL 数据库管理系统的攻击,通过注入 SQL 查询的方式使其被执行。目标是操纵应用程序的 SQL 查询逻辑,从而非法访问数据库或检索、修改或删除数据。
  • Q3) 什么是跨站脚本(XSS)?
    • A: 一种允许攻击者向其他用户查看的网页注入恶意脚本的 Web 安全漏洞。当 Web 应用程序允许用户输入未经适当验证或转义就包含在网页中时,就会发生这种情况。
      • 存储型 XSS:恶意脚本永久存储在目标服务器上,每个查看受影响页面的用户都会受到攻击。
      • 反射型 XSS:注入的脚本通过 Web 服务器反射,如在 URL 中,并在受害者打开被操纵的链接时立即执行。
  • Q4) 为什么不应该自己编写加密算法?
  • Q5) 数据库中的密码是如何存储的?
  • Q6) 什么是中间人攻击?
  • Q7) 如何在云环境中安全地管理环境变量?
  • Q8) 你是如何管理安全更新的?
  • Q9) 如何在保证加密密钥和凭证的安全的同时,让需要它们的机器能够访问它们?

Docker

  • Q1) Docker 用来做什么?
    • A: Docker 是一个允许创建、删除、运行和存储容器的工具。
  • Q2) 如何使用 Docker 显示系统上的所有容器?
    • A: docker ps -a
  • Q3) 如何删除已被容器使用的镜像?
    • A: docker rmi -f
  • Q4) 哪个命令帮助你删除所有旧的未使用的镜像?
    • A: docker image prune -f
  • Q5) 什么是 docker-compose?docker-compose.yml 是什么?
  • Q6) 如何在 docker-compose 文件中暴露端口?
  • Q7) 如何减少 Docker 镜像?
    • 使用多阶段构建
    • 使用最小的基础镜像
    • 通过减少/合并 Dockerfile 命令尽可能减少层数
  • Q8) 你可以在哪里存储 Docker 镜像?
    • A: 使用容器注册表,如 AWS ECR
  • Q9) Alpine 是什么?为什么我们需要它?

Kubernetes

  • Q1) 什么是 Kubernetes?
    • A: Kubernetes 是一个开源的容器管理工具,负责容器的部署、扩展和负载均衡。作为谷歌的心血结晶,它拥有出色的社区支持,并且可以很好地与所有云提供商协同工作。因此,我们可以认为 Kubernetes 不是一个容器化平台,而是一个多容器管理解决方案。
  • Q2) Kubernetes 与 Docker 的关系是什么?
    • A: 已知的事实是,Docker 提供容器的生命周期管理,Docker 镜像构建运行时容器。但是,由于这些单独的容器需要相互通信,因此使用 Kubernetes。所以,Docker 构建容器,这些容器通过 Kubernetes 相互通信。因此,运行在多个主机上的容器可以通过 Kubernetes 手动链接和编排。
  • Q3) 什么是容器
    容器编排?- 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替换,以最小化中断。

基础设施即代码:

设置

测试

请从左到右写输出。

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替换,以最小化中断。

基础设施即代码:

设置

测试

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: Tikam02
来源:Tikam02
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: Tikam02 转发
评论区 (0)
U