Kubernetes一直是当今业界的流行语,也是最好的编排工具。它吸引了许多想要提高本身职业生涯的经验丰富的专业人士。HuaWei,Pokemon,Box,eBay,Ing,Yahoo Japan,SAP,纽约时报,Open AI,Sound Cloud等跨国公司也使用Kubernetes。我相信你已经知道这些事实,这也是促使你打开这个Kubernetes面试问题文章缘由。前端
在这篇关于Kubernetes面试问题的文章中,我将讨论在面试中提出的与Kubernetes相关的最重要问题。所以,为了您的理解,我将此博客分为如下4个部分:java
Kubernetes基本面试问题
基于架构的面试问题
基于场景的面试问题
多项选择题
因此让咱们开始吧!!node
基本的Kubernetes面试问题
这部分问题将包含您须要了解的与Kubernetes工做相关的全部基本问题。nginx
Q1。Kubernetes与Docker Swarm的区别如何?面试
Q2。什么是Kubernetes?docker
Kubernetes是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。做为Google的创意之做,它提供了出色的社区,并与全部云提供商合做。所以,咱们能够说Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。编程
Q3。Kubernetes与Docker有什么关系?
众所周知,Docker提供容器的生命周期管理,Docker镜像构建运行时容器。可是,因为这些单独的容器必须通讯,所以使用Kubernetes。所以,咱们说Docker构建容器,这些容器经过Kubernetes相互通讯。所以,可使用Kubernetes手动关联和编排在多个主机上运行的容器。后端
Q4。在主机和容器上部署应用程序有什么区别?api
请参考上图。左侧架构表示在主机上部署应用程序。所以,这种架构将具备操做系统,而后操做系统将具备内核,该内核将在应用程序所需的操做系统上安装各类库。所以,在这种框架中,您能够拥有n个应用程序,而且全部应用程序将共享该操做系统中存在的库,而在容器中部署应用程序时,体系结构则略有不一样。安全
这种架构将有一个内核,这是惟一一个在全部应用程序之间惟一共同的东西。所以,若是有一个须要Java的特定应用程序,那么咱们将得到访问Java的特定应用程序,若是有另外一个须要Python的应用程序,则只有该特定应用程序才能访问Python。
您能够在图表右侧看到的各个块基本上是容器化的,而且这些块与其余应用程序隔离。所以,应用程序具备与系统其他部分隔离的必要库和二进制文件,而且不能被任何其余应用程序侵占。
Q5。什么是Container Orchestration?
考虑一个应用程序有5-6个微服务的场景。如今,这些微服务被放在单独的容器中,但若是没有容器编排就没法进行通讯。所以,因为编排意味着全部乐器在音乐中和谐共处,因此相似的容器编排意味着各个容器中的全部服务协同工做以知足单个服务器的需求。
Q6。Container Orchestration须要什么?
考虑到你有5-6个微服务用于执行各类任务的单个应用程序,全部这些微服务都放在容器中。如今,为了确保这些容器彼此通讯,咱们须要容器编排。
正如您在上图中所看到的,在没有使用容器编排的状况下,还存在许多挑战。所以,为了克服这些挑战,容器编排就到位了。
Q7。Kubernetes有什么特色?
Kubernetes的功能以下:
Q8。Kubernetes如何简化容器化部署?
因为典型应用程序将具备跨多个主机运行的容器集群,所以全部这些容器都须要相互通讯。所以,要作到这一点,你须要一些可以负载平衡,扩展和监控容器的东西。因为Kubernetes与云无关而且能够在任何公共/私有提供商上运行,所以必须是您简化容器化部署的选择。
Q9。您对Kubernetes的集群了解多少?
Kubernetes背后的基础是咱们能够实施所需的状态管理,个人意思是咱们能够提供特定配置的集群服务,而且集群服务将在基础架构中运行并运行该配置。
所以,正如您在上图中所看到的,部署文件将具备提供给集群服务所需的全部配置。如今,部署文件将被提供给API,而后由集群服务决定如何在环境中安排这些pod,并确保正确运行的pod数量。
所以,位于服务前面的API,工做节点和节点运行的Kubelet进程,共同构成了Kubernetes集群。
Q10。什么是Google容器引擎?
Google Container Engine(GKE)是Docker容器和集群的开源管理平台。这个基于Kubernetes的引擎仅支持在Google的公共云服务中运行的群集。
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。你对Kubernetes的一个节点有什么了解?
基于架构的Kubernetes访谈问题
这部分问题将涉及与Kubernetes架构相关的问题。
Q1。Kubernetes Architecture的不一样组件有哪些?
Kubernetes Architecture主要有两个组件 - 主节点和工做节点。以下图所示,master和worker节点中包含许多内置组件。主节点具备kube-controller-manager,kube-apiserver,kube-scheduler等。而工做节点具备在每一个节点上运行的kubelet和kube-proxy。
Q2。你对Kube-proxy有什么了解?
Kube-proxy能够在每一个节点上运行,而且能够跨后端网络服务进行简单的TCP / UDP数据包转发。基本上,它是一个网络代理,它反映了每一个节点上Kubernetes API中配置的服务。所以,Docker可连接的兼容环境变量提供由代理打开的群集IP和端口。
Q3。您可否介绍一下Kubernetes中主节点的工做状况?
Kubernetes master控制容器存在的节点和节点内部。如今,这些单独的容器包含在容器内部和每一个容器内部,您能够根据配置和要求拥有不一样数量的容器。所以,若是必须部署pod,则可使用用户界面或命令行界面部署它们。而后,在节点上调度这些pod,并根据资源需求,将pod分配给这些节点。kube-apiserver确保在Kubernetes节点和主组件之间创建通讯。
Q4。kube-apiserver和kube-scheduler的做用是什么?
kube -apiserver遵循横向扩展架构,是主节点控制面板的前端。这将公开Kubernetes主节点组件的全部API,并负责在Kubernetes节点和Kubernetes主组件之间创建通讯。
kube-scheduler负责工做节点上工做负载的分配和管理。所以,它根据资源需求选择最合适的节点来运行未调度的pod,并跟踪资源利用率。它确保不在已满的节点上调度工做负载。
Q5。你能简要介绍一下Kubernetes控制管理器吗?
多个控制器进程在主节点上运行,可是一块儿编译为单个进程运行,即Kubernetes控制器管理器。所以,Controller Manager是一个嵌入控制器并执行命名空间建立和垃圾收集的守护程序。它拥有责任并与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流向pod 4.请参阅下图。
所以,数据包将pod1的网络保留在eth0,并进入veth0的根网络。
而后它被传递给cbr0,这使得ARP请求找到目的地,而且发现该节点上没有人具备目的地IP地址。
所以,桥接器将数据包发送到flannel0,由于节点的路由表配置了flannel0。
如今,flannel守护程序与Kubernetes的API服务器通讯,以了解全部pod IP及其各自的节点,以建立pods IP到节点IP的映射。
网络插件将此数据包封装在UDP数据包中,其中额外的标头将源和目标IP更改成各自的节点,并经过eth0发送此数据包。
如今,因为路由表已经知道如何在节点之间路由流量,所以它将数据包发送到目标节点2。
数据包到达node2的eth0并返回到flannel0以解封装并在根网络命名空间中将其发回。
一样,数据包被转发到Linux网桥以发出ARP请求以找出属于veth1的IP。
数据包最终穿过根网络并到达目标Pod4。
Q10。您对云控制器管理器有何了解?
Cloud Controller Manager负责持久存储,网络路由,从核心Kubernetes特定代码中抽象出特定于云的代码,以及管理与底层云服务的通讯。它可能会分红几个不一样的容器,具体取决于您运行的是哪一个云平台,而后它可使云供应商和Kubernetes代码在没有任何相互依赖的状况下开发。所以,云供应商开发他们的代码并在运行Kubernetes时与Kubernetes云控制器管理器链接。
各类类型的云控制器管理器以下:
Q11。什么是Container资源监控?
对于用户而言,了解应用程序的性能和全部不一样抽象层的资源利用率很是重要,Kubernetes经过在容器,pod,服务和整个集群等不一样级别建立抽象来考虑集群的管理。如今,能够监视每一个级别,这只是容器资源监视。
各类容器资源监控工具以下:
Q12。Replica Set 和 Replication Controller之间有什么区别?
Replica Set 和 Replication Controller几乎彻底相同。它们都确保在任何给定时间运行指定数量的pod副本。不一样之处在于复制pod使用的选择器。Replica Set使用基于集合的选择器,而Replication Controller使用基于权限的选择器。
Equity-Based选择器:这种类型的选择器容许按标签键和值进行过滤。所以,在外行术语中,基于Equity的选择器将仅查找与标签具备彻底相同短语的pod。 示例:假设您的标签键表示app = nginx,那么,使用此选择器,您只能查找标签应用程序等于nginx的那些pod。
Selector-Based选择器:此类型的选择器容许根据一组值过滤键。所以,换句话说,基于Selector的选择器将查找已在集合中说起其标签的pod。 示例:假设您的标签键在(nginx,NPS,Apache)中显示应用程序。而后,使用此选择器,若是您的应用程序等于任何nginx,NPS或Apache,则选择器将其视为真实结果。
Q13。什么是Headless Service?
Headless Service相似于“普通”服务,但没有群集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的帮助下进行部署和协调。
场景6:
咱们全部人都知道,从单片到微服务的转变解决了开发方面的问题,但却增长了部署方面的问题。
公司如何解决部署方面的问题?
解
团队能够试验容器编排平台,例如Kubernetes,并在数据中心运行。所以,经过这种方式,公司能够生成模板化应用程序,在五分钟内部署它,并在此时将实际实例集中在暂存环境中。这种Kubernetes项目将有数十个并行运行的微服务,以提升生产率,即便节点出现故障,也能够当即从新安排,而不会影响性能。
场景7:
假设一家公司但愿经过采用新技术来优化其工做负载的分配。
公司如何有效地实现这种资源分配?
解
这个问题的解决方案就是Kubernetes。Kubernetes确保资源获得有效优化,而且只使用特定应用程序所需的那些资源。所以,经过使用最佳容器编排工具,公司能够有效地实现资源分配。
场景8:
考虑一家拼车公司但愿经过同时扩展其平台来增长服务器数量。
您认为公司如何处理服务器及其安装?
解
公司能够采用集装箱化的概念。一旦他们将全部应用程序部署到容器中,他们就可使用Kubernetes进行编排,并使用像Prometheus这样的容器监视工具来监视容器中的操做。所以,利用容器的这种使用,在数据中心中为它们提供更好的容量规划,由于它们如今将受到更少的限制,由于服务和它们运行的硬件之间存在抽象。
场景9:
考虑一种状况,公司但愿向具备各类环境的客户提供全部必需的分发。
您认为他们如何以动态的方式实现这一关键目标?
解
该公司可使用Docker环境,组建一个横截面团队,使用Kubernetes构建Web应用程序。这种框架将帮助公司实如今最短的时间内将所需产品投入生产的目标。所以,在这样的机器运行的状况下,公司能够向全部具备各类环境的客户发放电子邮件。
场景10:
假设公司但愿在不一样的云基础架构上运行各类工做负载,从裸机到公共云。
公司将如何在不一样界面的存在下实现这一目标?
解
该公司能够将其基础设施分解为微服务,而后采用Kubernetes。这将使公司在不一样的云基础架构上运行各类工做负载。
多项选择面试问题
这部分问题将包括多项面试问题,这些问题在面试中常常被问到。
Q1。什么是Kubernetes集群中的minions?
它们是主节点的组件。
它们是集群的工做节点。[答案]
他们正在监控kubernetes中普遍使用的引擎。
他们是docker容器服务。
Q2。Kubernetes集群数据存储在如下哪一个位置?
KUBE-API服务器
Kubelet
ETCD [答案]
以上都不是
Q3。哪一个是Kubernetes控制器?
ReplicaSet
Deployment
Rolling Updates
ReplicaSet和Deployment [答案]
Q4。如下哪一个是核心Kubernetes对象?
Pods
Services
Volumes
以上全部[答案]
Q5。Kubernetes Network代理在哪一个节点上运行?
Master Node
Worker Node
全部节点[答案]
以上都不是
Q6。 节点控制器的职责是什么?
将CIDR块分配给节点
维护节点列表
监视节点的运行情况
以上全部[答案]
Q7。Replication Controller的职责是什么?
使用单个命令更新或删除多个pod
有助于达到理想状态
若是现有Pod崩溃,则建立新Pod
以上全部[答案]
Q8。如何在没有选择器的状况下定义服务?
指定外部名称[答案]
指定具备IP地址和端口的端点
只需指定IP地址便可
指定标签和api版本
Q9。1.8版本的Kubernetes引入了什么?
Taints and Tolerations [答案]
Cluster level Logging
Secrets
Federated Clusters
Q10。Kubelet 调用的处理检查容器的IP地址是否打开的程序是?
HTTPGetAction
ExecAction
TCPSocketAction [答案]
以上都不是