“Kubernetes”一词源于希腊语,意为“船长”“舵手”或“管理者”。如今,在DevOps和本地软件开发领域,这个词用于指代一套强大的解决方案,它能让运维工程师轻松地对服务器(及服务器集群)进行扩展和维护。
本Kubernetes面试问答教程将帮助你在完成培训后,为可能面临的任何面试或认证考试做好准备。事不宜迟,让我们马上开始学习最重要的Kubernetes面试问答吧。
40个最重要的Kubernetes面试问答
- 什么是Kubernetes?
这是Kubernetes面试中最基础却也最重要的问题之一!Kubernetes是一个开源的容器编排工具或系统,它可以自动化管理、监控、扩展和部署容器化应用程序等任务。它能够轻松管理多个容器(因为它可以对容器进行分组),形成可被发现和管理的逻辑单元。 - 什么是K8s?
K8s是Kubernetes的另一种说法。 - 在软件和DevOps领域,编排是什么意思?
编排指的是整合多个服务,使它们能够自动执行流程或快速同步信息。例如,一个应用程序的运行可能需要六七个微服务。如果将这些微服务分别放在不同的容器中,必然会给它们之间的通信造成障碍。而编排能够帮助解决这种情况,使各个容器中的服务能够无缝协作,实现共同的目标。 - Kubernetes和Docker有什么关系?
这是Kubernetes面试中经常被问到的问题,面试官可能还会让你分享使用它们的经验。Docker是一个用于处理软件开发的开源平台,其主要优势在于,它将软件或应用程序运行所需的设置和依赖项打包到一个容器中,这带来了可移植性等诸多好处。Kubernetes则能够手动链接和编排多个由Docker创建、运行在不同主机上的容器。 - Docker Swarm和Kubernetes的主要区别是什么?
Docker Swarm是Docker自带的开源容器编排平台,用于对Docker容器进行集群和调度。Swarm与Kubernetes的区别如下:- Docker Swarm的设置更便捷,但集群不够强大;而Kubernetes的设置更复杂,但集群更可靠。
- Docker Swarm无法进行自动扩展(Kubernetes可以);不过,Docker的扩展速度比Kubernetes快五倍。
- Docker Swarm没有图形用户界面(GUI);Kubernetes有一个名为Dashboard的GUI。
- Docker Swarm能自动在集群中的容器之间进行流量负载均衡,而Kubernetes进行此类流量负载均衡时需要手动干预。
- Docker需要像ELK栈这样的第三方工具进行日志记录和监控,而Kubernetes自带集成工具。
- Docker Swarm可以轻松地与任何容器共享存储卷,而Kubernetes只能与同一Pod中的容器共享存储卷。
- Docker可以进行滚动更新,但无法自动回滚;Kubernetes既可以进行滚动更新,也可以自动回滚。
- 在主机和容器上部署应用程序有什么区别?
在主机上部署应用程序时,使用的架构包含操作系统。操作系统的内核会管理安装在系统上的各种库,这些库是应用程序运行所必需的。
而容器主机是指运行容器化进程的系统。容器化进程与其他应用程序相互隔离,因此应用程序必须包含所需的库。容器中的二进制文件与系统的其他部分是分离的,不会干扰其他应用程序。
7. Kubernetes有哪些特性?
- Kubernetes允许用户控制服务器承载容器的位置以及容器的启动方式,从而实现了许多手动流程的自动化。
- Kubernetes可以同时管理多个集群。
- 它提供了诸如容器管理、安全、网络和存储等额外服务。
- Kubernetes会自动监控节点和容器的健康状况。
- 使用Kubernetes,用户可以轻松快速地对资源进行纵向和横向扩展。
- “DevOps不是一个目标,而是一个持续改进的永无止境的过程。”——杰兹·亨布尔
8. Kubernetes架构的主要组件有哪些?
Kubernetes架构有两个主要组件:主节点和工作节点。每个组件又包含各自的子组件。
9. 解释Kubernetes中主节点的工作原理。
主节点负责控制和管理一组工作节点,这种集群结构类似于Kubernetes中的集群。主节点负责集群管理,以及用于配置和管理集群内资源的API。Kubernetes的主节点可以与Kubernetes本身一起运行,它是专用Pod的一部分。
10. Kube-apiserver的作用是什么?
Kube-apiserver用于验证API对象的配置数据,并为其提供配置数据。这些API对象包括Pod、服务、复制控制器等。它还提供REST操作,是集群的前端接口。集群的前端状态通过它进行共享,其他组件都通过它进行交互。
11. Kubernetes中的节点是什么?
节点是计算硬件的最小基本单元,代表集群中的一台机器,它可以是数据中心的物理机,也可以是云服务提供商提供的虚拟机。在Kubernetes集群中,每台机器都可以替代其他机器。Kubernetes中的主节点控制着运行容器的节点。
12. 节点状态包含哪些内容?
节点状态的主要组成部分包括地址、条件、容量和信息。
13. Kubernetes主节点上运行什么进程?
Kube-api服务器进程运行在主节点上,用于扩展部署更多实例。
14. Kubernetes中的Pod是什么?
回答这个Kubernetes面试问题时,尽量给出全面的答案,而不是简单一句话带过。Pod是一种高级结构,它可以封装一个或多个容器。这是因为在Kubernetes中,容器不是直接运行的。同一Pod中的容器共享本地网络和相同的资源,这使得它们可以像在同一台机器上一样轻松地相互通信,同时又保持一定程度的隔离。
15. kube-scheduler的工作是什么?
kube-scheduler负责为新创建的Pod分配节点。
16. Kubernetes中的容器集群是什么?
容器集群是一组作为节点的机器元素。集群会建立特定的路由,以便运行在节点上的容器能够相互通信。在Kubernetes中,容器引擎(而非Kubernetes API服务器)为API服务器提供托管服务。
17. 什么是Google Container Engine?
Google Container Engine是一个专为Docker容器和集群设计的开源管理平台,它为在Google公共云服务中运行的集群提供支持。
18. 什么是DaemonSet?
DaemonSet是一组在每个主机上仅运行一次的Pod。它们用于主机层的任务,比如网络相关任务或网络监控,这些任务通常在一台主机上运行一次即可。
19. Kubernetes中的“Heapster”是什么?
在回答这个Kubernetes面试问题时,面试官期望你能给出详细的解释。你可以解释它是什么,如果在工作中使用过,也可以分享它对你的帮助。Heapster是一个性能监控和指标收集系统,用于收集Kublet采集的数据。它是Kubernetes集群原生支持的聚合器,像其他Pod一样在集群中运行,这使得它能够发现并查询集群中所有节点的使用数据。
20. 什么是Minikube?
借助Minikube,用户可以在本地运行Kubernetes。通过这个工具,用户可以在个人计算机(包括Windows、macOS和Linux系统的电脑)上运行单节点Kubernetes集群。这样,用户还可以在日常开发工作中试用Kubernetes。
21. Kubernetes中的命名空间是什么?
命名空间用于在多个用户之间划分集群资源。它适用于有许多用户参与不同项目或团队的环境,为资源提供了作用域。
22. Kubernetes启动时的初始命名空间有哪些?
- 默认命名空间(Default)
- kube - system命名空间
- kube - public命名空间
- 什么是Kubernetes控制器管理器?
控制器管理器是一个守护进程,用于嵌入核心控制循环、清理无用资源并创建命名空间。它使得多个进程可以在主节点上运行,尽管这些进程被编译成了单个进程。 - 控制器管理器有哪些类型?
可以在主节点上运行的主要控制器管理器包括端点控制器、服务账户控制器、命名空间控制器、节点控制器、令牌控制器和复制控制器。 - 什么是etcd?
Kubernetes使用etcd作为分布式键值存储,用于存储所有数据,包括元数据和配置数据,并允许Kubernetes集群中的节点读取和写入数据。虽然etcd最初是为CoreOS构建的,但由于它是开源的,所以也能在多种操作系统(如Linux、BSB和OS X)上运行。etcd代表了集群在特定时刻的状态,是Kubernetes集群状态管理和集群协调的核心枢纽。 - Kubernetes中有哪些不同的服务?
Kubernetes中的不同服务类型包括:- 集群内部IP服务(Cluster IP service)
- 节点端口服务(Node Port service)
- 外部名称创建服务(External Name Creation service)
- 负载均衡服务(Load Balancer service)
- 什么是ClusterIP?
ClusterIP是Kubernetes的默认服务类型,它为集群内部提供服务(外部无法访问),集群内的其他应用可以访问该服务。 - 什么是NodePort?
NodePort服务是让外部流量直接访问服务的最基本方式。它会在所有节点上打开一个特定端口,并将发送到该端口的任何流量转发到相应服务。 - Kubernetes中的LoadBalancer是什么?
LoadBalancer服务用于将服务暴露到互联网。例如,网络负载均衡器会创建一个单一的IP地址,将所有流量转发到你的服务。 - 什么是Ingress网络,它是如何工作的?
Ingress是一种允许用户从Kubernetes集群外部访问集群内服务的对象。用户可以通过创建规则来配置访问,这些规则定义了哪些入站连接会到达哪些服务。
它的工作原理是:Ingress是一个API对象,它提供路由规则,通过HTTP/HTTPS管理外部用户对Kubernetes集群中服务的访问。有了它,用户可以轻松设置流量路由规则,而无需创建大量负载均衡器,也无需将每个服务暴露到节点上。
31. 你对云控制器管理器有什么理解?
你肯定听说过公有云、私有云和混合云。云基础设施技术可以帮助你在这些云上运行Kubernetes。在云控制器管理器的背景下,控制面板组件嵌入了特定云的控制逻辑。这一过程可以将集群连接到云服务提供商的API,并将与云平台交互的组件和仅与集群交互的组件分离开来。
这也使得云服务提供商能够以与Kubernetes主项目不同的节奏发布功能。它采用插件机制进行构建,允许各种云服务提供商将其平台与Kubernetes集成。
32. 什么是容器资源监控?
容器资源监控是指收集指标并跟踪容器化应用程序和微服务环境健康状况的活动。它有助于改善其健康状况和性能,确保它们平稳运行。
33. 副本集和复制控制器有什么区别?
复制控制器(Replication Controller)通常简称为RC,它是Pod的一种封装,为Pod提供了额外功能,能够创建Pod的副本。
它会监控Pod的运行状态,如果Pod出现故障,会自动重启它们。如果某个节点发生故障,复制控制器会在其他节点上重新创建该节点上的所有Pod。如果Pod死亡,除非被副本集封装,否则不会再次创建。
而副本集(Replica Set)通常简称为RS,它是下一代复制控制器。副本集支持一些选择器类型,包括基于等式和基于集合的选择器。
它允许根据标签值和键进行筛选。为了匹配对象,这些对象必须满足所有指定的标签约束条件。
34. 什么是无头服务?
无头服务(headless service)是一种不依赖于ClusterIP就能与服务发现机制交互的服务。它允许你直接访问Pod,而无需通过代理。当既不需要负载均衡,也不需要单个服务IP时,无头服务就很有用。
- 什么是联邦集群(Federated Clusters)?
聚合多个集群并将它们视为一个逻辑集群的过程称为集群联邦。在这种情况下,多个集群可以作为一个集群进行管理。它们通过联邦组协同工作。此外,用户可以在数据中心或云中创建多个集群,并使用联邦在一个地方对它们进行控制和管理。
你可以通过以下方式实现集群联邦:
- 跨集群功能,允许使用来自参与集群的后端创建DNS和负载均衡器。
- 用户可以在不同集群之间同步资源,以便在各个集群中部署相同的资源集。
36. 什么是Kubelet?
Kubelet是一个服务代理,它通过Kubernetes API服务器监听Pod规范,从而控制和维护一组Pod。它通过确保给定的一组容器按预期运行来维护Pod的生命周期。Kubelet在每个节点上运行,实现了主节点和从节点之间的通信。
37. 什么是Kubectl?
Kubectl是一个命令行界面(CLI)工具,用于对Kubernetes集群运行命令。通过它,可以使用不同的创建和管理命令来控制Kubernetes集群管理器。
38. 请举例说明Kubernetes推荐的安全措施。
Kubernetes标准的安全措施示例包括定义资源配额、支持审计、限制etcd访问、定期更新环境安全性、进行网络分段、定义严格的资源策略、持续扫描安全漏洞,以及使用来自授权仓库的镜像。
39. 什么是Kube-proxy?
Kube-proxy实现了一个负载均衡器和网络代理,用于支持服务抽象和其他网络操作。它根据传入请求的IP地址和端口号,将流量转发到正确的容器。
40. 如何为Kubernetes负载均衡器获取静态IP?
通过更改DNS记录可以为Kubernetes负载均衡器获取静态IP,因为Kubernetes主节点可以分配新的静态IP地址。