随笔分类 - K8S
摘要:Controller作为核心中枢,集成了Reflector、DeltaFIFO、Indexer等组件,成为连接下游消费者的桥梁。Informer组件的启动,以及数据在几个组件之间的传递都由Controller完成。 Controller的定义如下。 type controller struct {
阅读全文
摘要:Kubernetes的事件(Event)是一种资源对象,用于展示集群内发生的情况,Kubernetes系统中的各个组件会将运行时发生的各种事件上报给Kubernetes API Server。例如,调度器做了什么决定,某些Pod为什么从节点中驱逐。可以通过kubectl get event kube
阅读全文
摘要:工作队列(WorkQueue)在控制器编写中使用得非常频繁,通常使用informer.AddEventHandler函数监听资源对象的事件,并设置事件触发时的回调函数。在回调函数中,将资源对象的key放入WorkQueue,控制器会不断地从WorkQueue中获取数据并按照期望的状态处理。在处理的过
阅读全文
摘要:Indexer是一个用来存储资源对象的内存存储,处理用户的查询是非常快速高效的。源码路径为k8s.io/client-go/tools/cache/index.go。 Indexer的实现主要分为2部分,ThreadSafeMap是底层的并发安全存储,Indexer索引器用来注册索引函数。 1.Th
阅读全文
摘要:在Reflector调用List/Watch方法后,数据会存入DeltaFIFO这个先进先出的队列。 从名称上看,DeltaFIFO需要分2部分来理解,FIFO(First Input First Output,先进先出)是指和正常的先进先出队列一样有基本的操作方法,例如Add、Delete、Upd
阅读全文
摘要:Informer启动后会连接API Server并进行全量资源查询,之后会对资源对象进行监听。以上操作主要是由Reflector实现的。源码路径为k8s.io/client-go/tools/cache/reflector.go。 Reflector使用的List/Watch方法主要分为2部分,第一
阅读全文
摘要:Kubernetes组件在工作过程中需要大量监控并查询集群中的资源对象。以Deployment控制器为例,它需要实时关注Deployment和要控制的ReplicaSet的状态变更,实时收敛ReplicaSet的状态,使ReplicaSet与用户自定义的Deployment的状态保持一致。其他控制器
阅读全文
摘要:Kubernetes集群环境下,集群内应用负载间的数据访问流和集群外应用到集群内应用负载的数据访问流。 数据流与网络方案密切相关。目前,Kubernetes官网提供的网络解决方案有Calico、Cilium、Contiv-VPP、Flannel、Kube-router和Weave Net。业界使用较
阅读全文
摘要:资源编排是指边缘计算系统云部分Kubernetes的计算节点在获得资源调度结果之后,计算节点对调度结果(负载)所需的存储资源、网络资源、计算资源的组织管理。 1)存储资源:创建负载所需的持久存储和临时存储。 2)网络资源:首先创建负载共享的Linux网络协议栈,并打通容器与宿主机的网络,然后创建负载
阅读全文
摘要:1 资源调度流程 资源创建流程如下所示。 资源调度流程是从资源创建流程的④开始的,即Kube-scheduler在需要创建的资源队列中监听到相应的资源时,会调用可用的调度算法和调度策略对可用的节点进行过滤和打分,最后选出可用的最优节点与需要创建的资源进行绑定,并调用Kube-apiserver的相应
阅读全文
摘要:Kubernetes的控制流程即Kubernetes集群中资源的增、删、改、查流程。这里的资源包括集群基础设施层面的资源和集群中应用负载层面的资源。 集群基础设施层面的资源的控制流程 Kubernetes集群基础设施层面的资源包括控制节点和计算节点,这两种节点在集群中扮演的角色不同,集群对它们的控制
阅读全文
摘要:边缘计算系统云部分Kubernetes逻辑架构 Kubernetes逻辑架构包含两种类型的节点,即控制节点和计算节点。 1)控制节点:负责Kubernetes集群的管理工作,在集群基础设施层面负责对集群规模的调整,比如集群中计算节点的增、删、改、查;在集群管理的应用负载资源层面负责对集群内应用资源的
阅读全文
摘要:Kubernetes整体架构 1)从Kubernetes的GitHub仓库的已发布版本可知,Kubernetes支持的CPU架构包括X86、ARM、s390x和ppc64le。 2)从Kubernetes的GitHub仓库的已发布版本可知,Kubernetes支持的操作系统类型包括Linux、Win
阅读全文
摘要:如何利用kubernetes实现应用的水平扩展(HPA) 云计算具有水平弹性的特性,这个是云计算区别于传统IT技术架构的主要特性。对于Kubernetes中的POD集群来说,HPA就是实现这种水平伸缩的控制器, 它能在当POD中业务负载上升的时候,创建新的POD来保证业务系统稳定运行,当POD中业务
阅读全文
摘要:1、常用的预选策略 2、优选函数 3、节点亲和调度 3.1、节点硬亲和性 3.2、节点软亲和性 4、Pod资源亲和调度 4.1、Pod硬亲和度 4.2、Pod软亲和度 4.3、Pod反亲和度 5、污点和容忍度 5.1、定义污点和容忍度 5.2、管理节点的污点 5.3、Pod对象的容忍度 API Se
阅读全文
摘要:监控 1、资源指标和资源监控 一个集群系统管理离不开监控,同样的Kubernetes也需要根据数据指标来采集相关数据,从而完成对集群系统的监控状况进行监测。这些指标总体上分为两个组成:监控集群本身和监控Pod对象,通常一个集群的衡量性指标包括以下几个部分: 节点资源状态:主要包括网络带宽、磁盘空间、
阅读全文
摘要:K8S的网络中主要存在4种类型的通信: ①同一Pod内的容器间通信 ②各个Pod彼此间的通信 ③Pod和Service间的通信 ④集群外部流量和Service之间的通信 K8S为Pod和Service资源对象分别使用了各自的专有网络,Pod网络由K8S的网络插件配置实现,而Service网络则由K8
阅读全文
摘要:etcd是一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 etcd是一个服务发现系统,具备以下的特点: 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单 安全:支持SSL证书验证 快速:根据官方提供的be
阅读全文
摘要:1、Master组件 1、API Server K8S对外的唯一接口,提供HTTP/HTTPS RESTful API,即kubernetes API。所有的请求都需要经过这个接口进行通信。主要负责接收、校验并响应所有的REST请求,结果状态被持久存储在etcd当中,所有资源增删改查的唯一入口。 2
阅读全文
摘要:一、高可用原理 配置一台新的master节点,然后在每台node节点上安装nginx,nginx通过内部的负载均衡将node节点上需要通过访问master,kube-apiserver组件的请求,反代到两台k8s-master节点上,这样就可以实现master节点的高可用,当任意一台master节点
阅读全文