Kubernetes面经总结

Istio 相关概念

Istio 是一个开源的服务网格,它提供了一种易于配置和管理微服务网络的方式。主要概念如下:

  1. 服务网格(Service Mesh):一组互相交流的微服务组成的网络。
  2. 控制平面(Control Plane):配置并监管服务网格的工作负载通信的部分。
  3. 数据平面(Data Plane):由所有微服务实例的智能代理 (Envoy) 组成,负责监控和控制网络通信。
  4. Envoy Proxy:高性能的边车代理,为服务网格内的服务提供动态路由、监控、安全特性等。
  5. Pilot:控制平面组件,负责配置服务网格中的 Envoy 实例。
  6. Citadel:提供密钥和证书管理功能,用于支持服务之间的 TLS 通讯。
  7. Galley:负责验证、处理和分发配置。

Kubernetes Service 和网络插件

在 Kubernetes 中,Service 是定义一组 Pod 访问策略的抽象概念,它通过选择器来决定哪些 Pod 属于这个 Service。而为了实现 Pods 间的网络通信,Kubernetes 集群会使用网络插件。常见的网络插件有 Calico 和 Flannel:

  • Calico:提供高效的网络和网络策略,支持灵活的网络路由选项。
  • Flannel:简单易用,使用覆盖网络来连接不同节点上的容器。

云原生

云原生是一种构建和运行应用程序的方法,旨在充分利用云计算的灵活性、可扩展性和弹性。云原生通常涉及使用容器、服务网格、微服务、不可变基础设施和声明式 API 来构建和运行应用程序。

常见的容器运行时

容器运行时是负责运行容器的软件。常见的容器运行时包括:

  • Docker:最流行的容器运行时,易于使用。
  • containerd:Docker 的核心组件,也可以独立使用。
  • CRI-O:专门为 Kubernetes 设计的轻量级容器运行时。
  • rkt(已废弃):由 CoreOS 开发的容器运行时。

数据库部署(Kubernetes 的 StatefulSet)

在 Kubernetes 中,StatefulSet 是用于管理有状态应用程序的工作负载 API 对象。与 Deployment 类似,但它为每个 Pod 提供稳定的且唯一的网络标识符。数据库通常部署为 StatefulSets,因为它们需要稳定的存储和唯一的网络身份。

Kubernetes Master 组件

Kubernetes Master 负责维护和管理整个集群的状态,主要组件包括:

  • API Server (kube-apiserver):Kubernetes API 的前端,是控制面的入口。
  • Scheduler (kube-scheduler):负责调度 Pods 到合适的节点上。
  • Controller Manager (kube-controller-manager):管理控制器,处理集群中的常规任务。
  • etcd:一致性存储,保存所有集群数据。

容器和虚拟机的不同点

容器和虚拟机都是提供隔离环境以运行应用程序的技术,但它们在多个方面有本质的不同:

  • 启动时间:容器几乎可以即时启动,而虚拟机可能需要更长时间。
  • 资源消耗:容器共享宿主机的操作系统,比虚拟机更轻量级。
  • 隔离级别:虚拟机提供硬件级别的隔离,容器则是在操作系统级别隔离。
  • 移植性:容器由于其小巧的特性,易于迁移和扩展。

Kubernetes 创建一个 Pod 的全过程

创建 Pod 的全过程涉及以下步骤:

  1. 用户提交 Pod 定义到 API Server。
  2. Scheduler 观察到未被调度的 Pod。
  3. 根据资源需求、亲和性规则等,Scheduler 选择一个合适的 Node 并将 Pod 分配到该 Node。
  4. Kubelet 在指定 Node 上接收到 Pod 分配信息。
  5. Kubelet 通过容器运行时创建和启动容器。
  6. 一旦容器处于运行状态,Kubelet 会向 API Server 报告 Pod 状态。

client-go Informer 机制全过程

Informer 机制是 Kubernetes client-go 库中用于监视资源状态变化并缓存在本地的一种机制。全过程如下:

  1. Informer 从 API Server 获取资源列表并开始监视资源变化事件。
  2. 当有新事件发生时,API Server 将事件推送给 Informer。
  3. Informer 将这些事件添加到本地缓存并触发相应的事件处理器。

DeltaFIFO 与普通队列的区别,Store、Reflector 是什么?

  • DeltaFIFO:是一个先进先出队列,其中包含了对象的变化记录(增加、更新、删除)。这种设计可以帮助 Informer 处理重复或丢失的事件。
  • 普通队列:简单的先进先出数据结构,没有 DeltaFIFO 的复杂处理逻辑。
  • Store:是一个本地缓存,Informer 使用 Store 来实现对 Kubernetes 资源的本地存储。
  • Reflector:是负责从 Kubernetes API Server 中列举(list)和监视(watch)资源,并将变更事件写入 DeltaFIFO 的组件。

k8s 官方 sample-controller 和 kubebuilder 生成 controller 的区别

  • sample-controller:是 Kubernetes 官方提供的一个示例控制器,用于教学目的,展示如何使用 client-go 编写自定义控制器。
  • kubebuilder:是一个 SDK,用于构建 Kubernetes API 和控制器。它提供代码生成、框架和工具,以便迅速开发和迭代自定义 Kubernetes 控制器。

两者的主要区别在于 kubebuilder 提供了更高级的抽象和自动化工具,而 sample-controller 通常需要手动编写更多的代码。

  • 33
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值