Kubernetes一直是当今业界的流行语,也是最好的编排工具。它吸引了许多想要提升自己职业生涯的经验丰富的专业人士。HuaWei、Pokemon、Box、eBay、Ing、YahooJapan、SAP、纽约时报、OpenAI、SoundCloud等跨国公司也在使用Kubernetes。我相信您已经知道这些事实,这就是促使您打开这篇Kubernetes面试问题文章的原因。在这篇关于Kubernetes面试问题的文章中,我将讨论面试中最重要的Kubernetes相关问题。因此,为了您的理解,我将这篇博客分为以下4个部分:Kubernetes基础面试题基于架构的面试题基于场景的面试题多项选择所以让我们开始吧!基本Kubernetes面试问题这部分问题将涵盖您需要了解的有关使用Kubernetes的所有基本知识。Q1。Kubernetes与DockerSwarm有何不同?Q2。什么是Kubernetes?Kubernetes是一个开源容器管理工具,负责容器部署、容器伸缩和负载均衡。作为Google的心血结晶,它提供了一个很棒的社区并与所有云提供商合作。因此,我们可以说Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。Q3.Kubernetes与Docker有什么关系?众所周知,Docker提供容器生命周期管理,Docker镜像构建运行时容器。但是,由于这些单独的容器必须进行通信,因此使用了Kubernetes。所以,我们说Docker构建容器,这些容器通过Kubernetes相互通信。因此,Kubernetes可用于手动关联和编排运行在多个主机上的容器。Q4.在主机和容器上部署应用程序有什么区别?请参考上图。左侧的架构表示应用程序在主机上的部署。所以这个架构会有操作系统,然后操作系统会有内核,内核会在应用程序需要的操作系统之上安装各种库。因此,在这种框架中,您可以拥有n个应用程序,所有应用程序将共享该操作系统中存在的库,而在容器中部署应用程序时,体系结构略有不同。这种架构将有一个内核,这是唯一一个在所有应用程序中通用的东西。因此,如果有一个特定的应用程序需要Java,那么我们将为该特定应用程序访问Java,如果有另一个应用程序需要Python,则只有该特定应用程序才能访问Python。您可以在图表右侧看到的各个块基本上是容器化的,并且与其他应用程序隔离。因此,该应用程序具有与系统其余部分隔离的必要库和二进制文件,并且不会被任何其他应用程序覆盖。Q5.什么是容器编排?考虑一个应用程序有5-6个微服务的场景。今天,这些微服务被放置在单独的容器中,但没有容器编排就无法通信。因此,正如编排意味着所有乐器都与音乐和谐一致一样,容器编排同样意味着各个容器中的所有服务协同工作以满足单个服务器的需求。Q6.容器编排需要什么?考虑一个应用程序,其中有5-6个用于各种任务的微服务,所有这些都放在容器中。现在,为了确保这些容器相互通信,我们需要容器编排。正如您在上图中看到的,如果不使用容器编排,就会面临很多挑战。因此,为了克服这些挑战,容器编排应运而生。Q7.Kubernetes有什么特点?Kubernetes的功能如下:Q8.Kubernetes如何简化容器化部署?由于一个典型的应用程序会有一个跨多个主机运行的容器集群,所有这些容器都需要相互通信。因此,要做到这一点,您需要能够负载平衡、扩展和监控容器的东西。由于Kubernetes与云无关并且可以在任何公共/私人供应商上运行,因此您必须选择它来简化容器化部署。Q9.你对Kubernetes集群了解多少?Kubernetes背后的基础是我们可以实现所需的状态管理,我的意思是我们可以提供具有特定配置的集群服务,集群服务将在基础设施中运行并运行该配置。因此,正如您在上图中所见,部署文件将包含服务集群服务所需的所有配置。现在,部署文件将提供给API,然后由集群服务决定如何在环境中安排这些pod,并确保正确运行的pod数量。因此,位于服务前面的API、工作节点和节点运行的Kubelet进程共同构成了一个Kubernetes集群。Q10。什么是谷歌容器引擎?GoogleContainerEngine(GKE)是一个用于Docker容器和集群的开源管理平台。这个基于Kubernetes的引擎只支持在谷歌的公共云服务中运行的集群。Q11.什么是Heapster?Heapster是由在每个节点上运行的Kubelet提供的集群范围的数据聚合器。这个容器管理工具在Kubernetes集群上得到原生支持,并且像集群中的任何其他pod一样作为pod运行。所以它基本上发现了集群中的所有节点,并通过板载的Kubernetesagent查询集群中Kubernetes节点的使用信息。Q12.什么是Minikube?Minikube是一种可以轻松在本地运行Kubernetes的工具。这将在虚拟机中运行单节点Kubernetes集群。Q13.什么是Kubectl?Kubectl是一个可用于向集群传递命令的平台。因此,它基本上为CLI提供了针对Kubernetes集群运行命令的方法,以及创建和管理Kubernetes组件的各种方法。Q14.什么是Kubelet?这是一个代理服务,运行在每个节点上,使从节点能够与主节点通信。因此,Kubelet处理PodSpec中提供给它的容器的描述,并确保PodSpec中描述的容器是健康的。Q15.你对Kubernetes中的节点了解多少?基于架构的Kubernetes面试问题这部分问题将涵盖与Kubernetes架构相关的问题。Q1。Kubernetes架构有哪些不同的组件?Kubernetes架构主要有两个组件——主节点和工作节点。如下图所示,master和worker节点中内置了很多组件。主节点有kube-controller-manager、kube-apiserver、kube-scheduler等。而工作节点有kubelet和kube-proxy在每个节点上运行。Q2。你对Kube-proxy了解多少?Kube-proxy可以运行在每个节点上,可以跨后端网络服务进行简单的TCP/UDP数据包转发。基本上,它是一个网络代理,可以镜像每个节点上KubernetesAPI中配置的服务。因此,Docker-linkable兼容环境变量提供了代理打开的集群IP和端口。Q3.能否介绍一下Kubernetes中主节点的工作原理?Kubernetesmaster控制容器所在的节点和节点内部。现在,这些单独的容器包含在容器内部,在每个容器内部,您可以根据您的配置和要求拥有不同数量的容器。因此,如果必须部署pod,可以使用用户界面或命令行界面来部署它们。然后将这些pod调度到节点上,并根据资源需求分配给这些节点。kube-apiserver确保在Kubernetes节点和主组件之间建立通信。Q4.kube-apiserver和kube-scheduler的作用是什么?kube-apiserver遵循横向扩展架构,是主节点控制面板的前端。这暴露了Kubernetes主节点组件的所有API,并负责建立Kubernetes节点和Kubernetes主组件之间的通信。kube-scheduler负责工作节点上工作负载的分配和管理。因此,它会根据资源需求选择最合适的节点来运行未调度的Pod,并跟踪资源利用率。它确保工作负载不会安排在已满的节点上。Q5.能否简单介绍一下KubernetesControlManager?多个控制器进程在主节点上运行,但被编译在一起作为单个进程运行,即Kubernetes控制器管理器。因此,控制器管理器是一个嵌入控制器并执行命名空间创建和垃圾收集的守护进程。它负责并与API服务器通信以管理端点。所以在主节点上运行的不同类型的控制器管理器是:Q6。什么是ETCD?Etcd是用Go编程语言编写的,是一个用于协调分布式工作的分布式键值存储。因此,Etcd存储Kubernetes集群的配置数据,代表集群在任何给定时间点的状态。Q7.Kubernetes中有哪些不同类型的服务?以下是使用的不同类型的服务:Q8。您对Kubernetes中的负载均衡器了解多少?负载平衡器是公开服务的最常见和标准的方式之一。根据工作环境,使用两种类型的负载均衡器,内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分发容器,而外部负载均衡器将流量从外部负载引导到后端容器。Q9.什么是Ingress网络,它是如何工作的?Ingress网络是一组规则,充当Kubernetes集群的入口点。这允许入站连接,这些连接可以配置为通过可访问的URL、负载平衡流量或通过提供基于名称的虚拟主机在外部提供服务。因此,Ingress是一个API对象,通常通过HTTP来管理外部对集群中服务的访问,这是最高效的服务暴露方式。现在,让我用一个例子来解释一下Ingress网络的工作原理。有2个节点具有带Linux网桥和根网络命名空间的Pod。除此之外,一个名为flannel0(网络插件)的新虚拟以太网设备被添加到根网络。现在,假设我们希望数据包从pod1流向pod4。请参见下图。所以数据包保持pod1的网络在eth0上,去到veth0的根网络。然后传递给cbr0,cbr0发出ARP请求寻找目的地,发现该节点上没有人拥有目的地IP地址。因此,桥将数据包发送到flannel0,因为该节点的路由表配置了flannel0。flannel守护进程现在与Kubernetes的API服务器通信,以了解所有podIP及其各自的节点,从而创建podIP到节点IP的映射。网络插件将此数据包封装在一个UDP数据包中,带有额外的标头,将源和目标IP更改为各自的节点,并通过eth0发送此数据包。现在,由于路由表已经知道如何在节点之间路由流量,它会将数据包发送到目标节点2。数据包到达节点2的eth0并返回到flannel0以解封装并在根网络命名空间中将其发送回。同样,数据包被转发到Linux网桥以发出ARP请求以找出属于veth1的IP。数据包最终穿过根网络到达目的地Pod4。Q10。您对云控制器管理器了解多少?CloudControllerManager负责持久存储、网络路由、从核心Kubernetes特定代码中抽象出特定于云的代码,以及管理与底层云服务的通信。它可能会根据您运行的云平台分成几个不同的容器,然后它使云提供商和Kubernetes代码能够在没有任何相互依赖性的情况下进行开发。因此,云提供商在运行Kubernetes时开发他们的代码和与Kubernetes云控制器管理器的接口。各类云控制器管理器如下:Q11.什么是容器资源监控?了解应用程序的性能和所有不同抽象层的资源利用率对用户来说非常重要。Kubernetes通过创建容器、pod、服务和整个集群等不同级别的抽象来考虑集群的管理。现在每个层级都可以监控,就是容器资源监控。各种容器资源监控工具如下:Q12.副本集和复制控制器有什么区别?ReplicaSet和ReplicationController几乎是一样的。它们都确保指定数量的pod副本在任何给定时间运行。不同之处在于复制pod使用的选择器。副本集使用基于集合的选择器,而复制控制器使用基于权限的选择器。基于股票的选择器:这种类型的选择器允许通过标签键和值进行过滤。因此,通俗地说,基于权益的选择器只会找到与标签具有完全相同短语的广告连播。示例:假设您的标签键表示app=nginx,那么使用此选择器,您只能找到标签app等于nginx的那些pod。基于选择器的选择器:这种类型的选择器允许基于一组值过滤键。因此换句话说,基于选择器的选择器将查找其标签已在集合中提及的pod。示例:假设您的标签键显示应用程序在(nginx、NPS、Apache)中。然后,使用此选择器,如果您的应用程序等于任何nginx、NPS或Apache,选择器会将其视为真实结果。Q13.什么是无头服务?无头服务类似于“普通”服务,但没有集群IP。该服务允许您直接访问pod,而无需通过代理访问它。Q14.使用Kubernetes时可以采取哪些最佳安全措施?以下是您在使用Kubernetes时可以遵循的最佳安全实践:Q15。什么是集群联邦?在联邦集群的帮助下,多个Kubernetes集群可以作为一个集群进行管理。因此,您可以在您的数据中心/云中创建多个Kubernetes集群,并使用联邦在一个地方控制/管理它们。联邦集群可以通过做两件事来实现这一点。请参考下图。基于场景的面试问题这部分问题将包含您在面试中可能遇到的各种基于场景的问题。场景1:假设一家基于单一架构的公司处理许多产品。现在,随着公司在当今不断扩大的行业中扩张,它们的单一架构开始引起问题。您如何看待公司从单一服务转向微服务并部署他们的服务容器?解决方案:由于公司的目标是从单体应用程序转向微服务,他们最终可以一个一个地并行构建,并且只需在后台切换配置。然后他们可以把这些内置的微服务放到Kubernetes平台上。因此他们可以从一两个迁移服务开始并监控它们以确保一切顺利运行。一旦他们觉得一切顺利,他们就可以将应用程序的其余部分迁移到他们的Kubernetes集群。场景2:考虑一个拥有分布式系统的跨国公司,拥有大量数据中心、虚拟机和许多从事各种任务的员工。您认为这样的公司如何使用Kubernetes以一致的方式管理所有任务?解决方案:众所周知,IT部门推出了数千个容器,任务分布在分布式系统中全球的许多节点上。在这种情况下,公司可以使用为基于云的应用程序提供敏捷性、横向扩展功能和DevOps实践的东西。因此,该公司可以使用Kubernetes来定制他们的调度架构并支持多种容器格式。这使得容器任务之间具有亲和力,提供更高的效率,并广泛支持各种容器网络解决方案和容器存储。场景3:考虑这样一种情况,一家公司希望通过保持最低成本来提高技术运营的效率和速度。您认为公司将如何实现这一目标?解决方案:公司可以通过构建CI/CD管道来实施DevOps方法,但这里可能出现的一个问题是配置可能需要一段时间才能启动和运行。因此,在实施了CI/CD流水线之后,公司下一步应该是在云环境中工作。一旦他们开始在云环境中工作,他们就可以在集群上安排容器,并可以在Kubernetes的帮助下进行协调。这种方法将帮助公司减少部署时间并在各种环境中提高速度。场景4:假设一家公司想要修改其部署方式,想要构建一个更具扩展性和响应性的平台。您认为这家公司将如何实现这一目标以满足客户需求?解决方案:为了向数百万客户提供他们期望的数字体验,公司需要一个可扩展且响应迅速的平台,以便他们可以快速将数据发送到客户站点。现在,要做到这一点,公司应该从他们的私有数据中心(如果他们使用的话)转移到任何云环境,比如AWS。不仅如此,他们还应该实施微服务架构,以便他们可以开始使用Docker容器。一旦他们准备好基础设施,他们就可以开始使用最好的编排平台Kubernetes。这将使团队能够自主构建应用程序并快速交付它们。场景5:考虑一家拥有非常分布式系统的跨国公司,希望解决整个代码库问题。您认为公司如何解决他们的问题?解决方案那么,为了解决这个问题,我们可以将他们的单体代码库迁移到微服务设计中,然后每个微服务都可以看作是一个容器。因此,所有这些容器都可以在Kubernetes的帮助下进行部署和编排。场景六:我们都知道,从单体服务到微服务,解决了开发端的问题,却增加了部署端的问题。公司如何解决部署问题?解决方案团队可以试验容器编排平台,例如Kubernetes,并在数据中心运行它们。因此,通过这种方式,公司可以生成一个模板化应用程序,在五分钟内部署它,然后将实际实例集中在暂存环境中。这种Kubernetes项目会有几十个微服务并行运行以提高生产力,而且即使某个节点出现故障,也可以立即重新调度而不影响性能。场景7:假设一家公司希望通过采用新技术来优化其工作负载的分配。公司如何有效地实现这种资源分配?这个问题的解决方案是Kubernetes。Kubernetes确保资源得到有效优化,并且仅使用特定应用程序所需的资源。因此,通过使用最好的容器编排工具,企业可以高效地实现资源分配。场景8:假设一家拼车公司希望通过同时扩展其平台来增加服务器数量。您认为公司如何处理服务器及其安装?解决方案公司可以采用容器化的概念。一旦他们将所有应用程序部署到容器中,他们就可以使用Kubernetes进行编排,并使用Prometheus等容器监控工具来监控容器中的操作。因此,利用容器的这种使用可以让他们更好地规划数据中心的容量,因为他们现在将受到更少的限制,因为服务和运行它们的硬件之间存在抽象。场景9:考虑这样一种情况,一家公司希望为具有各种环境的客户提供所有必需的发行版。您认为他们如何以动态的方式实现这一关键目标?知道公司可以使用Docker环境,组建一个跨部门团队使用Kubernetes构建Web应用程序。该框架将帮助公司实现在尽可能短的时间内将所需产品投入生产的目标。因此,有了这样一台机器运行,一个公司就可以向各种环境下的所有客户发出电子邮件。场景10:假设一家公司想要在不同的云基础设施上运行各种工作负载,从裸机到公共云。公司将如何在存在不同接口的情况下实现这一目标?该公司可以将其基础架构分解为微服务并采用Kubernetes。这将允许公司在不同的云基础设施上运行各种工作负载。多项选择面试问题这部分问题将包含多个面试中经常问到的面试问题。Q1。Kubernetes集群中的minions是什么?它们是主节点的组件。它们是集群的工作节点。【答】他们监控的是kubernetes中广泛使用的engine。它们是docker容器服务。Q2。Kubernetes集群数据存储在以下哪个位置?KUBE-APIserverKubeletETCD【答】以上都不是Q3。哪个是Kubernetes控制器?ReplicaSetDeploymentRollingUpdatesReplicaSetandDeployment[answer]Q4。以下哪个是Kubernetes的核心对象?PodsServicesVolumes都在上面[回答]Q5。Kubernetes网络代理在哪个节点上运行?MasterNodeWorkerNode所有节点【答】以上都不是Q6。节点控制器的职责是什么?将CIDR块分配给节点维护节点列表监控节点的健康状况以上所有[答案]Q7。复制控制器的职责是什么?使用单个命令更新或删除多个pod有助于实现所需状态如果现有pod崩溃,请创建一个新pod以上所有内容[答案]Q8。如何在没有选择器的情况下定义服务?Specifyanexternalname[Answer]SpecifyanendpointwithanIPaddressandport指定IP地址即可指定标签和api版本Q9.Kubernetes1.8版本引入了什么?污点和容忍[答案]集群级别LoggingSecretsFederatedClustersQ10。Kubelet调用的检查容器IP地址是否打开的过程是什么?HTTPGetActionExecActionTCPSocketAction【答】以上都不是
