随笔分类 - Kubernetes
摘要:介绍 假设一个Nginx的QPS(服务器一秒内处理的请求数)上限为500,如果外部访问的QPS达到了600,为了保证服务质量,必须扩容一个Nginx来分摊请求。 在Kubernetes环境中,如果外部请求超过了单个Pod的处理极限,我们则可以增加Pod数量来达到横向扩容的目的。 假设我们的服务是无状
阅读全文
摘要:介绍 在controller-runtime中使用一个 Manager 的接口来管理 Controller,除了控制器其实还可以管理A dmission Webhook,也包括访问资源对象的client、cache、scheme等,如下图所示: Manager 如何使用 首先我们来看看control
阅读全文
摘要:介绍 controller-runtime框架实际上是社区帮我们封装的一个控制器处理的框架,底层核心实现原理和我们自定义一个controller控制器逻辑是一样的,只是在这个基础上新增了一些概念,开发者直接使用这个框架去开发控制器会更加简单方便。 包括kubebuilder、operator-sdk
阅读全文
摘要:介绍 我们可以使用code-generator 以及controller-tools来进行代码自动生成,通过代码自动生成可以帮我们自动生成 CRD 资源对象,以及客户端访问的 ClientSet、Informer、Lister 等工具包,接下来我们就来了解下如何编写一个自定义的控制器。 CRD定义
阅读全文
摘要:介绍 在上一篇code-generator简单介绍中重点介绍了如何使用code-generator来自动生成代码,通过自动生成的代码可以帮助我们像访问k8s内置资源那样来操作我们的CRD,其实就是帮助我们生成ClientSet、Informer、Lister等工具包。 但是我们需要自己定义types
阅读全文
摘要:代码生成器 介绍 client-go为每种k8s内置资源提供了对应的clientset和informer。那么我们要监听和操作自定义资源对象,应该如何做呢? 方式一:使用client-go提供的dynamicClient来操作自定义资源对象,当然由于dynamicClient是基于RESTClien
阅读全文
摘要:介绍 Custom Resource Define 简称 CRD,是 Kubernetes(v1.7+)为提高可扩展性,让开发者去自定义资源的一种方式。 CRD 资源可以动态注册到集群中,注册完毕后,用户可以通过 kubectl 来创建访问这个自定义的资源对象,类似于操作 Pod 一样。不过需要注意
阅读全文
摘要:使用client-go实现自定义控制器 介绍 我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点: NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显。 LoadB
阅读全文
摘要:介绍 Kubernetes控制器是一个主动调谐的过程,它会watch一些对象的期望状态,也会watch实际的状态,然后控制器会发送一些指令尝试让对象的当前状态往期望状态迁移。 控制器最简单的实现就是一个循环: for{ desired := getDesiredState() current :=
阅读全文
摘要:Indexer 源码分析 介绍 我们知道DeltaFIFO 中的元素通过 Pop 函数弹出后,在指定的回调函数中将元素添加到了 Indexer 中。 Indexer 是什么?字面意思是索引器,它就是 Informer 中的 LocalStore 部分,我们可以和数据库进行类比,数据库是建立在存储之上
阅读全文
摘要:DeltaFIFO源码分析 介绍 我们已经知道 Reflector 中通过 ListAndWatch 获取到数据后传入到了本地的存储中,也就是 DeltaFIFO 中。从 DeltaFIFO 的名字可以看出它是一个 FIFO,也就是一个先进先出的队列,而 Delta 表示的是变化的资源对象存储,包含
阅读全文
摘要:Refletor源码分析 Informer 通过对 APIServer 的资源对象执行 List 和 Watch 操作,把获取到的数据存储在本地的缓存中,其中实现这个的核心功能就是 Reflector,我们可以称其为反射器,从名字我们可以看出来它的主要功能就是反射,就是将 Etcd 里面的数据反射到
阅读全文
摘要:Informer架构以及简单使用 介绍 我们知道可以使用 Clientset 来获取所有的原生资源对象,那么如果我们想要去一直获取集群的资源对象数据呢?岂不是需要用一个轮询去不断执行 List() 操作?这显然是不合理的,实际上除了常用的 CRUD 操作之外,我们还可以进行 Watch 操作,可以监
阅读全文
摘要:资源类型Scheme 1、介绍 当我们操作资源和 apiserver 进行通信的时候,需要根据资源对象类型的 Group、Version、Kind 以及规范定义、编解码等内容构成 Scheme 类型,然后 Clientset 对象就可以来访问和操作这些资源类型了,Scheme 的定义主要在 api
阅读全文
摘要:重新认识Clientset 1、介绍 Clientset 是调用 Kubernetes 资源对象最常用的客户端,可以操作所有的资源对象。 那么在 Clientset 中使如何用这些资源的呢? 因为在 staging/src/k8s.io/api 下面定义了各种类型资源的规范,然后将这些规范注册到了全
阅读全文
摘要:Client-go的四种客户端使用 我们知道kubectl是通过命令行交互的方式与Kubernetes API Server进行交互的,Kubernetes还提供了通过编程的方式与Kubernetes API-Server进行通信。 client-go是从 Kubernetes的代码中单独抽离出来的
阅读全文
摘要:Istio 是现在最热门的 Service Mesh 工具,istio 是由 Google、IBM、Lyft 等共同开源的 Service Mesh(服务网格)框架,于2017年初开始进入大众视野。Kubernetes 解决了云原生应用的部署问题,istio 解决的是应用的服务(流量)治理问题。 安
阅读全文
摘要:多租户 多租户集群由多个用户和/或工作负载共享,这些用户和/或工作负载被称为“租户”。多租户集群的运营方必须将租户彼此隔离,以最大限度地减少被盗用的租户或恶意租户可能对集群和其他租户造成的损害。此外,必须在租户之间公平地分配集群资源。 在规划多租户架构时,应该考虑 Kubernetes 中的资源隔离
阅读全文
摘要:网络策略 在 Kubernetes 里,网络隔离能力的定义,是依靠一种专门的 API 对象来描述的,即: NetworkPolicy。 Kubernetes 里的 Pod 默认都是“允许所有”(Accept All)的,即:Pod 可以接收来自任何发送方的请求;或者,向任何接收方发送请求。而如果要对
阅读全文
摘要:参考原文链接:https://www.qikqiak.com/k8strain/monitor/prometheus/ Prometheus 简介 Prometheus 最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 K
阅读全文