K8S面试指南

214 阅读6分钟

kubernetes面试题

这些面试题可能被问到,所以想整理一下。

  • • 什么时候应该使用 80 端口,什么时候应该使用 8080 端口?
  • • 你是否应该为每个服务创建一个新端口,以免它们发生冲突?
  • • 标签名称重要吗?应该都一样吗?

Service 和 Deployment 存不存在关系

  • Service 和 Deployment 根本没有联系。相反,Service直接指向 Pod 并完全跳过Deployment。所以你应该注意的是Pods和Services是如何相互关联的。

  • 1、Service 选择器应该至少匹配一个 Pod 的标签。

  • 2、Service 的targetPort应该与Pod 的containerPort匹配。

  • 3、Service 的port可以是任何数字。多个服务可以使用相同的端口,因为它们分配了不同的 IP 地址。

k8s几大核心组件的架构

  • 1、kube-apiserver(API Server):kube-apiserver 是 Kubernetes 集群中的统一入口,提供了对集群的控制和管理的 API。它接收来自用户或其他组件的操作请求,并将它们转发给相应的组件进行处理。
  • 2、etcd:etcd 是 Kubernetes 集群的分布式键值存储系统,用于保存集群的配置数据、状态信息和元数据等。各个组件通过 etcd 实现数据的一致性和共享。
  • 3、kube-scheduler(Scheduler):kube-scheduler 负责根据用户定义的调度策略,将 Pod 部署到集群中的合适节点上。它考虑了诸如资源需求、亲和性和互斥性等因素,以最优的方式进行调度。
  • 4、kube-controller-manager(Controller Manager):kube-controller-manager 是一组控制器的集合,用于监控并维护集群状态的一致性。其中包括 Replication Controller、Node Controller、Service Controller、Endpoint Controller 等,它们确保集群中的各个组件和资源都处于期望的状态。
  • 5、kubelet:kubelet 是运行在每个节点上的代理程序,负责管理节点上的容器和容器化应用。它与 API Server 通信,接收来自 API Server 下发的 Pod 创建请求,并负责拉取镜像、启停容器等操作。
  • 6、kube-proxy(Proxy):kube-proxy 负责实现 Kubernetes 集群中的服务发现和负载均衡机制。它维护着集群中的网络规则,并通过 IP 转发或负载均衡方式将流量路由到正确的后端 Pod 上。

学习kubernetes怎么能不懂架构史呢?

单体架构:

image.png

特点: 1 所有功能集成在一个项目工程中

2 所有功能打包在一个 web 包部署到服务器

3 应用跟数据库分开部署

4 通过部署应用集群和数据库集群来提高系统性能

优点:

架构简单,前期开发成本低,周期短。小型项目首选。

缺点:

1 全部功能集成在一个工程中,对于大型项目不易开发、扩展和维护

2 系统性能扩展只能通过扩展集群,成本高

3 技术栈受限

垂直架构 image.png

特点:

当访问量逐渐增大,单一应用增加机器带来的性价比越来越小,将应用拆成互不相关的几个应用,以提升效率。

优点:

1 相关架构简单,前期开发成本低,周期短,小型项目的首选

2 通过垂直拆分,原来的单体不至于无限扩大

3 不同的项目可采用不同的技术栈

缺点:

1 同业务域功能集成在一个工程中,对于大型项目不易开发、扩展和维护成本高

2 系统性能扩展只能通过扩展集群,成本高,有瓶颈

3 单体之间的函数调用过度到系统之间的 rpc 或者 http 调用,服务发现需要单独机制保证

微服务架构

1 将系统服务层完全独立出来,并将服务层抽取为一个个微服务

2 微服务遵循单一原则

3 微服务之间采用 RESTful轻量级协议进行传输

优点:

1 服务拆分粒度更细,有利于资源重复利用,提高开发效率

2 可以更加精准指定每个服务的优化方案,提高系统的可维护性

3 微服务架构采用去中心化思想,服务之间采用 RESTful 等轻量级协议通信,相比 ESB 更轻

4 适合互联网产品,产品迭代更加快速和便捷

缺点:

1 微服务过多,服务治理成本高,不利于系统维护

2 分布式系统开发的技术成本高(容错、分布式事务等),对团队技术挑战大

k8s如何创建pod

在Kubernetes(k8s)中,创建Pod主要有两种方法:使用命令行的方式和使用yaml文件的方式。

使用命令行的方式,可以通过kubectl run命令来创建Pod。这个命令可以帮助你创建并运行特定的镜像在一个Pod中。在执行kubectl run命令后,Kubernetes会进行一系列的步骤来完成Pod的创建。

首先,Kubernetes会进行认证,获取具体的权限。然后,kubectl会调用Master API创建对象的接口,并向Kubernetes ApiServer发出创建Pod的命令。接着,Kubernetes ApiServer收到请求后,并不会直接创建Pod,而是先创建一个包含Pod创建信息的Yaml文件,并将文件信息写入到Etcd中。这一步也可以通过使用Yaml文件的方式来跳过。

使用Yaml文件的方式,可以通过编写一个Yaml文件来定义Pod的详细信息,然后使用kubectl create命令来创建Pod。这种方式的优点是可以更详细地定义Pod的各种属性,包括容器、端口、存储等。

Kubernetes通过Apiserver和Etcd来实现Pod的创建和管理

iptables四表五链

四个表(Tables):

  • 1、Filter Table(过滤表):用于过滤数据包,实现基本的防火墙功能,常用于控制数据包的进出规则。
  • 2、NAT Table(网络地址转换表):用于实现网络地址转换,常用于端口映射、负载均衡等功能。
  • 3、Mangle Table(修改表):用于修改数据包的 IP 头部信息,例如修改 TTL(Time To Live)值或标记数据包。
  • 4、Raw Table(原始表):用于配置数据包的连接跟踪策略。 五个链(Chains):
  • 1、PREROUTING Chain(前向链):在数据包进入路由之前进行处理,可以进行 DNAT(目标地址转换)操作。
  • 2、INPUT Chain(输入链):用于处理目标地址是本机的数据包。
  • 3、FORWARD Chain(转发链):用于处理目标地址不是本机但需要转发的数据包。
  • 4、OUTPUT Chain(输出链):用于处理源地址是本机的数据包。
  • 5、POSTROUTING Chain(后向链):在数据包离开路由之前进行处理,可以进行 SNAT(源地址转换)操作。