k8s面试中最常见的50个问题(翻译)

原文链接 https://medium.com/edureka/kubernetes-interview-questions-c9790e5abddb

前言

k8s已经成为当前市场的流行术语,也是最好的编排工具。它吸引了许多想提升自己职场能力的有经验的专业人员。许多跨国公司如华为、口袋妖怪、Box、ebay、Ing、日本Yahoo、SAP、纽约时报、Open Ai, Sound Cloud也在使用k8s。我相信你已经知道了这些事实,促使你打开这篇blog。

在这篇博客中,我将讨论在面试中经常被问到的50个k8s相关的问题。因此,为了让大家能更好的理解,该博客分为以下四个部分。

  • k8s基本面试问题
  • 基于架构的面试问题
  • 基于场景的面试问题
  • 多选问题

1.k8s基本面试问题

该部分包含所有你在使用k8s的工作中需要知道的基本问题。
Q1 k8s与Docker Swarm的区别

特性 k8s Docker Swarm
安装&集群配置 安装复杂;但是一旦安装,集群会非常健壮 安装非常简单;但是集群不够健壮
GUI GUI是k8s的Dashboard 没有GUI
扩展性 高度可扩展&扩展较快 高度可扩展&扩展速度比k8s快5倍
自动扩展 可以自动扩展 不能自动扩展
负载均衡 不同pod中的不同容器之间的流量需要人工介入进行负载均衡 Docker Swarm可以在集群中的不同容器之间做自动化负载均衡
回滚更新&回滚 能部署回滚更新&能自动化回滚 可以部署回滚更新&不能自动回滚
数据卷 仅支持同一个pod中容器间可以共享存储卷 可以在任意容器之间共享存储卷
日志&监控 有用于日志和监控的内建工具集 需要第三方工具如ELK等来进行日志采集和监控

Q2 什么是k8s
k8s面试中最常见的50个问题(翻译)_第1张图片
k8s是一个开源的容器管理工具,它具有容器部署、容器扩缩容及负载均衡的能力。作为谷歌的产物,它提供了非常优秀的社区以且与其他云提供商协同合作。因此,我们可以说k8s不是一个容器化平台,而是一个多容器的管理解决方案。

Q3 k8s与Docker之间的关系
众所周知,Docker为容器提供生命周期管理,且docker镜像可以创建运行时容器。但是,这些独立的容器之间需要通信,这就需要k8s。因此,docker创建容器,容器之间通过k8s进行通信。运行在多个主机上的容器可以使用k8s进行手动连接和编排。

Q4 在主机部署应用于在容器上部署应用有哪些异同点

k8s面试中最常见的50个问题(翻译)_第2张图片
参考上图。左侧架构表示在主机上部署应用程序。所以,这种架构会有一个操作系统,然后操作系统会有一个内核,在操作系统上安装应用程序所需的各种库。因此,在这种框架中,你可以有n个应用程序,所有的应用程序将共享该操作系统中的库,而在容器中部署应用程序时,架构略有不同。

这种架构将会有一个内核,这是所有应用程序之间唯一的共同之处。所以,如果有一个特定的应用程序需要Java,那么这个特定的应用程序就可以访问Java,如果有另一个应用程序需要Python,那么只有这个特定的应用程序才能访问Python。

您可以在图的右侧看到的单个块基本上是容器化的,它们与其他应用程序隔离。
因此,应用程序拥有与系统其余部分隔离的必要库和二进制文件,并且不会被任何其他应用程序侵犯。

Q5 什么是容器编排
考虑这样一种场景,你有一个包含五六个微服务的应用。现在,这些微服务被放在独立的容器中。但若没有容器编排则无法进行通信。因此,因此,正如管弦乐意味着所有乐器在音乐中和谐地一起演奏一样,容器编排意味着各个容器中的所有服务一起工作以满足单个服务器的需求。

Q6 容器编排需要什么
假设你有5-6个微服务用于一个执行各种任务的应用程序,所有这些微服务都放在容器中。现在,为了确保这些容器彼此通信,我们需要容器编排。
k8s面试中最常见的50个问题(翻译)_第3张图片
正如您在上面的图表中所看到的,如果不使用容器编排,也会出现许多挑战。因此,为了克服这些挑战,容器编排应运而生。

Q7 k8s有哪些特性
k8s的特性如下图所示
k8s面试中最常见的50个问题(翻译)_第4张图片
Q8 k8s如何简化容器化部署
作为一个典型的应用程序,将有一个跨多个主机运行的容器集群,所有这些容器都需要相互通信。所以,要做到这一点,你需要一些大的东西来负载均衡、和监控容器。由于Kubernetes与云无关,并且可以在任何公共/私有提供商上运行,所以您必须选择简化容器化部署。

Q9 你知道k8s集群吗
Kubernetes背后的基本原理是,我们可以强制执行所需的状态管理,我的意思是,我们可以为特定配置的集群服务提供feed,而将由集群服务出去并在基础设施中运行该配置。
k8s面试中最常见的50个问题(翻译)_第5张图片
因此,正如您在上面的图表中所看到的,部署文件将包含提供给集群服务所需的所有配置。现在,将向API提供部署文件,然后由集群服务确定如何调度环境中的这些pods,并确保运行的pods数量正确。

因此,位于服务前面的API、工作节点和节点运行的Kubernetes进程一起构成了Kubernetes集群。

Q10 什么是Google Container Engine
Google Container Engine(GKE)是一个开源的Docker容器和集群管理平台。这个基于Kubernetes的引擎只支持那些运行在谷歌公有云服务中的集群。

Q11 Heapster是什么
Heapster是运行在每个节点上的Kubelet提供的一个集群范围内的数据聚合器。这个容器管理工具在Kubernetes集群上得到本地支持,并作为pod运行,就像集群中的任何其他pod一样。因此,它基本上会发现集群中的所有节点,并通过机器上的Kubernetes代理从集群中的Kubernetes节点查询使用信息。

Q12 什么是Minikube
Minikube是一个可以方便地在本地运行Kubernetes的工具。它在虚拟机中运行一个单节点Kubernetes集群。

Q13 什么是kubectl
Kubectl是一种平台,您可以使用它向集群传递命令。因此,它基本上提供了CLI,通过各种方式对Kubernetes集群运行命令,以创建和管理Kubernetes组件。

Q14 什么是kubelet
这是一个代理服务,运行在每个节点上,使从节点能够与主节点通信。因此,Kubelet在PodSpec中对提供给它的容器进行描述,并确保PodSpec中描述的容器是健康的和正在运行的。

Q15 你理解k8s中的节点吗

k8s面试中最常见的50个问题(翻译)_第6张图片

2. 基于架构的k8s面试题

Q1 k8s中的不同组件是什么
Kubernetes体系结构主要有两个组件——主节点和工作节点。正如您在下面的图表中所看到的,主节点和工作节点中有许多内置组件。主节点有kube-controller-manager、kube-apiserver、kube-scheduler和etcd。而工作节点在每个节点上运行kubelet和kube-proxy。
k8s面试中最常见的50个问题(翻译)_第7张图片
Q2 如何理解Kube-proxy?
Kube-proxy可以在每个节点上运行,可以跨后端网络服务进行简单的TCP/UDP包转发。因此,它基本上是一个网络代理,反映每个节点上的Kubernetes API中配置的服务。因此,docker可链接的兼容环境变量提供了集群的IPs和通过代理打开的端口。

Q3 简要介绍一下Kubernetes主节点的工作情况?
Kubernetes master控制节点,在节点中存在容器。现在,这些单独的容器包含在Pods中,在每个Pod中,您可以根据配置和需求拥有不同数量的容器。因此,如果必须部署pods,则可以使用用户界面或命令行界面部署它们。然后,在节点上调度这些pods,并根据资源需求将pods分配给这些节点。kube-apiserver确保在Kubernetes节点和主组件之间建立了通信。

k8s面试中最常见的50个问题(翻译)_第8张图片
Q4 kube-apiserver和kube-scheduler的角色是什么?
kube -apiserver遵循扩展架构,是主节点控制面板的前端。这将公开Kubernetes主节点组件的所有api,并负责在Kubernetes节点和Kubernetes主组件之间建立通信。kube-scheduler负责在工作节点上分配和管理工作负载。因此,它根据资源需求选择最合适的节点来运行未调度的pod,并跟踪资源利用率。它确保工作负载不会在已满的节点上调度。

Q5 您能简要介绍一下Kubernetes控制器管理器吗?
多个控制器进程在主节点上运行,但是被编译成一个单独的进程,即Kubernetes控制器管理器。因此,Controller Manager是一个嵌入控制器并执行命名空间创建和垃圾收集的守护进程。它拥有责任,并与API服务器通信以管理端点。

因此,运行在master节点不同类型的控制器有:
k8s面试中最常见的50个问题(翻译)_第9张图片
Q6 ETCD是什么?
Etcd是用Go编程语言编写的,它是一个分布式键值存储,用于协调分布式工作。因此,Etcd存储Kubernetes集群的配置数据,表示集群在任何给定时间点的状态。

Q7 Kubernetes中有哪些不同类型的服务?
以下是使用的不同类型的服务:
k8s面试中最常见的50个问题(翻译)_第10张图片
Q8 您对Kubernetes中的负载均衡器有何理解?
负载平衡器是公开服务的最常见和标准的方法之一。根据工作环境有两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。
内部负载均衡器自动平衡负载并使用所需的配置分配pods,而外部负载均衡器将流量从外部负载定向到后端pods。

Q9 什么是Ingress Network,它是如何工作的?
Ingress Network是一个规则集合,作为Kubernetes集群的入口点。这允许入站连接,可以将入站连接配置为通过可达url、负载平衡流量或提供基于名称的虚拟主机向外部提供服务。因此,Ingress是一个API对象,它管理对集群中服务的外部访问(通常通过HTTP),是公开服务的最强大的方式。

现在,让我用一个例子来解释一下引入网络的工作原理。

有2个节点具有具有Linux桥接器的pod和根网络名称空间。
除此之外,根网络中还添加了一个名为flannel0(网络插件)的虚拟以太网设备。
现在,假设我们希望数据包从pod1流到pod 4。

参考下面的图表。
k8s面试中最常见的50个问题(翻译)_第11张图片

  • 因此,数据包离开了位于eth0的pod1网络,进入位于veth0的根网络。 然后它被传递给cbr0,
  • cbr0发出ARP请求来寻找目的地址,结果发现在这个节点上没有人有目的IP地址。
  • 因此,当节点的路由表配置为flannel0时,网桥将报文发送到flannel0。
  • 现在,flannel守护进程与Kubernetes的API服务器对话,以了解所有pod ip和它们各自的节点,从而为pod
  • ip创建到节点ip的映射。 网络插件将这个包封装在一个带有额外头的UDP包中,改变源IP和目的IP到各自的节点,并通过eth0发送这个包。
  • 现在,由于路由表已经知道如何在节点之间路由流量,它将包发送到目标node2。
  • 这个包到达node2的eth0位置,然后返回到flannel0进行解封装,并返回到根网络名称空间中。
  • 再一次,数据包被转发到Linux网桥,发出ARP请求,找出属于veth1的IP。 数据包最终通过根网络并到达目的地Pod4。

Q10 你对云控制器管理器有什么理解?
云控制器管理器负责持久存储、网络路由、从核心Kubernetes特定代码中提取特定于云的代码,并管理与底层云服务的通信。它可以被分割成几个不同的容器,这取决于您运行在哪个云平台上,然后它可以在没有任何相互依赖的情况下开发云供应商和Kubernetes代码。因此,云供应商开发他们的代码,并在运行Kubernetes云控制器-manager时连接到Kubernetes。
云控制器管理器的各种类型如下:
k8s面试中最常见的50个问题(翻译)_第12张图片
Q11 什么是容器资源监控?
对于用户来说,在所有不同的抽象层上理解应用程序的性能和资源利用是非常重要的,Kubernetes通过在容器、pods、服务和整个集群等不同层次上创建抽象来考虑集群的管理。现在,可以监视每个级别,这就是容器资源监控。
不同的容器资源监控工具如下:
k8s面试中最常见的50个问题(翻译)_第13张图片
Q12 replica set和replication controller有什么不同
复制集和复制控制器几乎做同样的事情。它们都确保在任何给定时间运行指定数量的pod副本。不同之处在于使用选择器复制pods。复制集使用基于集的选择器,而复制控制器使用基于权益的选择器。
基于权益的选择器:这种类型的选择器允许通过标签键和值进行筛选。因此,在外行术语中,基于股权的选择器将只查找与标签具有完全相同短语的pods。
例如:假设你的标签键是app=nginx,那么,使用这个选择器,你只能查找标签为app=nginx的pod。
基于选择器的选择器:这种类型的选择器允许根据一组值过滤键。因此,换句话说,基于选择器的选择器将查找其标签在集合中被提到的pods。
例如:你的标签键说app在(nginx, NPS, Apache)。然后,有了这个选择器,如果你的应用程序等于任何一个nginx, NPS,或Apache,那么选择器将把它作为一个真结果。

Q13 什么是Headless Service?
Headless Service类似于“正常”服务,但没有集群IP。该服务使您可以直接访问pods,而不需要通过代理访问它。

在使用k8s时,可以采用的最佳安全措施是什么

k8s面试中最常见的50个问题(翻译)_第14张图片

Q15 什么是联合集群?
在联合集群的帮助下,可以将多个Kubernetes集群管理为单个集群。因此,您可以在一个数据中心/云中创建多个Kubernetes集群,并使用联合在一个地方控制/管理它们。
联合集群可以通过做以下两件事来实现这一点。参考下面的图表。
k8s面试中最常见的50个问题(翻译)_第15张图片

3.基于场景的面试问题

场景1
假设一个建立在单一体系结构上的公司处理许多产品。现在,随着公司在当今规模产业的扩张,他们的整体架构开始产生问题。
您认为该公司是如何从单一服务转向微服务并部署其服务容器的?
解决方案:
由于公司的目标是从单一的应用程序转移到微服务,他们最终可以一块一块地并行构建,只是在后台切换配置。然后他们可以把这些内置的微服务放到Kubernetes平台上。因此,他们可以首先迁移服务一两次,然后监视它们,以确保一切都运行稳定。
一旦他们觉得一切都进展顺利,他们就可以将应用程序的其余部分迁移到他们的Kubernetes集群中。

场景2
考虑一个拥有非常分布式系统的跨国公司,该公司有大量的数据中心、虚拟机和许多从事各种任务的员工。
你认为这样一家公司如何能够以与Kubernetes一致的方式管理所有的任务?
解决方案:
我们都知道,it部门启动数千个容器,在分布式系统中,任务在世界各地的大量节点上运行。
在这种情况下,公司可以使用一些为基于云的应用程序提供敏捷性、扩展能力和DevOps实践的东西。
因此,该公司可以使用Kubernetes来定制其调度架构,并支持多种容器格式。这使得容器任务之间的亲缘性成为可能,通过广泛支持各种容器网络解决方案和容器存储,提高了效率。

场景3
考虑这样一种场景,公司想通过在维持最小成本时提升技术开发的效率和速度。
你认为公司应该怎么做才能有上述效果?
解决方案
该公司可以通过构建CI/CD管道来实现DevOps方法,但这里可能出现的一个问题是,配置可能需要时间进行并运行。因此,在实现CI/CD管道之后,公司的下一步应该是在云环境中工作。一旦他们开始在云环境中工作,他们就可以在集群中调度容器,并在Kubernetes的帮助下进行编排。这种方法将帮助公司减少部署时间,并且能够更快地跨各种环境。

场景4:
假设一家公司想要修改它的部署方法,并想要构建一个更具可伸缩性和响应性的平台。
你认为这家公司是如何做到这一点来满足他们的客户的?
解决方案:
为了给数以百万计的客户提供他们所期望的数字体验,公司需要一个可伸缩的、响应性强的平台,这样他们就可以快速地将数据发送到客户网站。现在,为了做到这一点,该公司应该从它们的私有数据中心(如果它们正在使用任何数据中心的话)转移到任何云环境,比如AWS。不仅如此,他们还应该实现微服务体系结构,这样他们就可以开始使用Docker容器了。一旦他们准备好了基础框架,他们就可以开始使用可用的最佳编配平台,即Kubernetes。这将使团队在构建应用程序和快速交付它们时能够自治。

场景5:
考虑一个拥有非常分散的系统的跨国公司,期望解决单一代码基的问题。
你认为公司该如何解决他们的问题?
解决方案
好吧,为了解决这个问题,我们可以把它们的整体代码基础转移到一个微服务设计,然后每个微服务都可以被视为一个容器。因此,所有这些容器都可以在Kubernetes的帮助下进行部署和编排。

场景6:
我们都知道,从单一服务到微服务的转变从开发方面解决了问题,但增加了部署方面的问题。
公司如何解决部署方面的问题?
解决方案
团队可以试验容器编排平台,比如Kubernetes,并在数据中心运行它。这样,公司就可以生成一个模板化的应用程序,在5分钟内部署它,并在那时将实际的实例包含在staging环境中。这种Kubernetes项目将有几十个微服务并行运行,以提高生产率,即使一个节点宕机,也可以立即重新调度,而不会对性能造成影响。

场景7:
假设一家公司想要通过采用新技术来优化其工作负载的分配。
公司如何才能有效地实现这种资源分配?
解决方案
解决这个问题的不是别人,正是Kubernetes。Kubernetes确保资源得到有效优化,并且只使用特定应用程序所需的资源。因此,利用最好的容器编排工具,公司可以实现资源的高效分配。

场景8:
假设一家拼车公司希望通过同时扩展平台来增加服务器数量。
你认为公司会如何处理这些服务器和它们的安装?
解决方案
公司可以采用集装箱化的概念。一旦他们将所有的应用程序部署到容器中,他们就可以使用Kubernetes进行编排,并使用像Prometheus这样的容器监视工具来监视容器中的操作。因此,使用这样的容器,可以在数据中心为它们提供更好的容量规划,因为服务和它们运行的硬件之间的抽象现在将使它们受到的约束更少。

场景9:
考虑这样一个场景,一家公司想要向拥有各种环境的客户提供所有需要的分发品。
你认为他们如何以动态的方式实现这个关键目标?
解决方案
该公司可以使用Docker环境,组建一个跨部门团队,使用Kubernetes构建一个web应用程序。这种框架将帮助公司在最短的时间内实现将所需的产品投入生产的目标。因此,有了这样一台机器的运行,公司可以向所有在不同环境下的客户提供帮助。

场景10:
假设一家公司希望在从裸金属到公共云的不同云基础设施上运行各种工作负载。
公司将如何在存在不同界面的情况下实现这一点?
解决方案
该公司可以将其基础设施分解为微服务,然后采用Kubernetes。这将使公司在不同的云基础设施上运行各种工作负载。

4.多选择面试问题

Q1 k8s集群中的minions是什么
它们是主节点的组件。
它们是集群的主力/工作节点。
它们是kubernetes中广泛使用的监控引擎。
它们是docker容器服务。

Q2 k8s集群中存储在哪些地方
kube-apiserver
kubelet
etcd √
None

Q3 下列哪个是一个k8s controller
ReplicaSet
Deployment
Rolling Updates
Both ReplicaSet and Deployment √

Q4 下列哪项是核心k8s 对象
Pods
Services
Volumes
All of the above √

Q5 k8s Network proxy运行在哪个节点上
master node
worker node
All the nodes √
None of the above

Q6 一个node controller的责任是什么
为节点分配CIDR模块
维护节点list
监控节点的健康状态
All of the above √

Q7 What are the responsibilities of the Replication Controller
用一个命令更新或删除pods
帮助实现期望的状态
如果勋在pod崩溃, 创建新的pod
All of the above √

Q8 没有选择器如何定义一个service
指定外部名称 √
指定一个带有IP地址和端口的端点
只需指定IP地址即可
指定标签和api版本

Q9 k8s 1.8版本引入了什么
Taints and Tolerations √
Cluster level Logging
Secrets
Federated Clusters

Q10 Kubelet调用的处理程序检查容器的IP地址是否打开
HTTPGetAction
ExecAction
TCPSocketAction √
None of the above

你可能感兴趣的:(Docker,kubernetes,docker)