Istio 相关概念
Istio 是一个开源的服务网格,它提供了一种易于配置和管理微服务网络的方式。主要概念如下:
- 服务网格(Service Mesh):一组互相交流的微服务组成的网络。
- 控制平面(Control Plane):配置并监管服务网格的工作负载通信的部分。
- 数据平面(Data Plane):由所有微服务实例的智能代理 (Envoy) 组成,负责监控和控制网络通信。
- Envoy Proxy:高性能的边车代理,为服务网格内的服务提供动态路由、监控、安全特性等。
- Pilot:控制平面组件,负责配置服务网格中的 Envoy 实例。
- Citadel:提供密钥和证书管理功能,用于支持服务之间的 TLS 通讯。
- 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 的全过程涉及以下步骤:
- 用户提交 Pod 定义到 API Server。
- Scheduler 观察到未被调度的 Pod。
- 根据资源需求、亲和性规则等,Scheduler 选择一个合适的 Node 并将 Pod 分配到该 Node。
- Kubelet 在指定 Node 上接收到 Pod 分配信息。
- Kubelet 通过容器运行时创建和启动容器。
- 一旦容器处于运行状态,Kubelet 会向 API Server 报告 Pod 状态。
client-go Informer 机制全过程
Informer 机制是 Kubernetes client-go 库中用于监视资源状态变化并缓存在本地的一种机制。全过程如下:
- Informer 从 API Server 获取资源列表并开始监视资源变化事件。
- 当有新事件发生时,API Server 将事件推送给 Informer。
- 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 通常需要手动编写更多的代码。