概述 Kubernetes的其他组件都是通过client-go的Informer机制与Kubernetes API Server进行通信的。 在Informer架构设计中,有多个核心组件,分别介绍如下。 1.Reflector Reflector用于监控(Watch)指定的Kubernetes资源,当监控的资源发生变化时,触发相应的变更事件,例如Added(资源添加)事件、Updated(资源更新)事件、Deleted(资源删除)事件,并将其资源对象存放到本地缓存DeltaFIFO中。 2.DeltaFIFO DeltaFIFO可以分开理解,FIFO是一个先进先出的队列,它拥有队列操作的基本方法,例 …
阅读更多Karmada(Kubernetes Armada) 是一个多集群管理系统,在原生 Kubernetes 的基础上增加对于多集群应用资源编排控制的API和组件,从而实现多集群的高级调度,本文就详细分析一下 karmada 层面多集群调度的具体实现逻辑。 Karmada Scheduler( Karmada 调度组件)主要是负责处理添加到队列中的 ResourceBinding 资源,通过内置的调度算法为资源选出一个或者多个合适的集群以及 replica 数量。 注意: 本文使用 karmada 版本为 tag:v0.8.0 commit: c37bedc1 调度框架 karmada-scheduler 在启动过程中实例化并运行了多个 …
阅读更多什么是 EdgeFS EdgeFS 是使用Go和C实现的高性能、可容错以及低延迟的对象存储系统,可以对来自本地,私有/公有云或者小型(loT)设备的数据进行地理透明地访问。 EdgeFS 能够跨越无限数量的地理位置分布的站点(地理站点),相互连接,作为在 Kubernetes 平台上运行的一个全局名称空间数据结构,提供持久、容错和高性能的完全兼容的 S3 Object API 有状态的 Kubernetes 应用程序和 CSI 卷。 在每个Geo站点,EdgeFS 节点在物理或虚拟节点上部署为容器(StatefulSet),汇集可用存储容量并通过兼容的 S3/NFS/iSCSI/etc 存储模拟协议为在相同或专用服务器上运行的云原生 …
阅读更多NFS 介绍 NFS(Network File System)即网络文件系统, 是FreeBSD支持的文件系统中的一种。NFS是基于RPC(Remote Procedure Call)远程过程调用实现,其允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序就可以像访问本地文件一样访问远端系统上的文件。NFS是一个非常稳定的,可移植的网络文件系统。具备可扩展和高性能等特性,达到了企业级应用质量标准。由于网络速度的增加和延迟的降低,NFS系统一直是通过网络提供文件系统服务的有竞争力的选择。 NFS 使用方式 已有NFS集群,例如公司QCE 申请的NFS集群, 在K8S中创建PVC和STorageClass , …
阅读更多什么是knative knative 是一个基于 Kubernetes 的 serverless 框架,其主要目标是在基于Kubernetes之上为整个开发生命周期提供帮助. 不仅可以部署和伸缩应用程序,还可以构建和打包应用程序. Knative 使开发者能够专注于编写代码,而无需担心构建、部署和管理应用等“单调而棘手”的工作。 如下图所示, knative是建立在 kubernetes和 isto平台之上的,使用 kubernetes提供的容器管理能力( deployment、 replicase 和 pods等),以及 isto提供的网络管理功能( Ingress、LB、 dynamic route等)。 各个角色之间的关系,如 …
阅读更多概要 监控分为两个部分: 核心监控流程由kubelet、资源评估器、metric-server(Heapster 精简版)以及API server 上的master metrics API 组成. 这些监控数据被系统核心组件使用,例如调度逻辑(调度器和基于系统指标的HPA) 和 开箱即用的UI组件(例如 kubectl top), 这条监控管道不适合与第三方监控系统集成. 另一个监控流程用于从系统收集各种指标并将这些指标导出到用户端、HPA(自定义指标)以及通过适配器到处到 infrastore. 用户可以从众多的监控系统中进行选择,也可以不运行监控系统. Kubernetes 不附带监控管道, 但是第三方的选项是很容易被安装的. …
阅读更多controller-runtime(https://github.com/kubernetes-sigs/controller-runtime) 框架是社区封装的一个控制器处理的框架,Kubebuilder、Operator-sdk 这两个框架也是基于controller-runtime做了一层封装,目的是快速生成operator项目代码。下面我们就来具体分析一下下 controller-runtime 原理以及实现 。 概念 CRD: 自定义资源(CustomResourceDefinition), K8s允许你定义自己的定制资源,K8s API 负责为你的定制资源提供存储和访问服务。 下面例子是定义了一个crontab 的自定 …
阅读更多Kubernetes 是Google开源的容器编排项目,是云原生时代最成功的项目之一,其本身也是高度可配置且可扩展的,这就可以让我们利用扩展开发出符合我们业务逻辑的软件,本文就其扩展展开讨论。 Kubernetes 扩展点 Kubernetes 在官网给出了7个扩展点: Kubectl扩展: 以 kubectl- 开头的可执行文件,需要注意两点: 变量传递:所有环境变量也按原样传递给可执行文件; 命令最长匹配:插件机制总是为给定的用户命令选择尽可能长的插件名称; 影响范围: 只对本地环境造成影响; API访问扩展:请求到达API服务时都会经过:认证、鉴权、准入控制这几个阶段,API访问扩展就是对这几个阶段进行扩展,使用户可以对请求执 …
阅读更多Kubebuilder 是什么 kubebuilder 是使用自定义资源(CRD)构建 Kubernetes API 的框架。Kubebuilder提高了开发人员在Go中快速构建和发布Kubernetes api的速度,降低了开发管理的复杂性。 Kubebuilder 如何使用 我们通过向 Kubernetes 集群添加一个自定义 Cluster 来了解 Kubebuilder 如何使用。 其主要步骤如下: 创建一个项目 创建一个API 定义CRD 实现controller 测试 创建项目 创建目录ipes-cmp 并进入执行 go mod init ipes-cmp 来告诉 kubebuilder 和 Go module 的基本导 …
阅读更多阻塞/非阻塞与同步/异步I/O
Jun 7, 2021 · 1 min read阻塞/非阻塞与同步/异步I/O区别 阻塞/非阻塞与同步/异步I/O 最大区别是作用的对象不同:阻塞非阻塞是针对应用程序,同步异步是针对系统。 阻塞/非阻塞I/O 是针对应用程序在处理I/O操作时是否被阻塞来划分: 阻塞I/O 是指应用程序在进行I/O操作时,如果没有得到响应,当前线程就会被阻塞,不能执行其他任务。 阻塞I/O 是指应用程序在进行I/O操作时,如果没有得到响应,当前线程不会被阻塞,还能继续执行其他任务。 同步/异步I/O 是根据I/O响应方式而划分的: 同步I/O 是指系统收到I/O请求后,不会立刻响应,而是处理玩成之后才会响应。 异步I/O 是指系统收到I/O请求后,立刻响应告诉程序已经收到请求,随后再去异步处理,处 …
阅读更多