Manager定义了访问Pod的一系列方法,维护了static pod和mirror pod之间的关系。kubelet从三个来源获取pod变化:file,http,apiserver。pod中除了apiserver这一来源的pod都叫static pod(apiserver并不知道这些pod的存在) ...
kubelet之pleg
在k8s中kubelet是运行在k8s节点中的daemon程序,负责管理节点上的pod并将状态上报给apiserver,并驱动对应的pod更新到预期的状态。为此kubelet需要对pod specs和容器状态进行响应。kubelet从多个源中监听pod specs变化,kubelet会定期调用容器运 ...
kube-controller之podgc
podgc controller负责对pod进行垃圾回收。 如果Terminated状态的数量大于terminatedPodThreshold,删除部分Terminated状态的pod 删除不再服务的node上的pod 删除孤儿pod(一个pod绑定到了一个不存在的Node) 删除Terminat ...
kube-controller之namespace
Kubernetes Namespace Controller是Kubernetes中的一个控制器,负责管理Kubernetes中的命名空间。命名空间是Kubernetes资源的一个逻辑分组,用于将资源隔离在不同的命名空间中,从而实现更好的资源管理和隔离。 Namespace Controller主 ...
kube-controller之replicaset
ReplicaSet维护一组Pod并使Pod数量和状态达到预期的状态。Deployment就是基于ReplicaSet的一层封装,官方并不建议直接使用ReplicaSet,而是使用Deployment。 使用下面的yaml创建对应的RS.apiVersion: apps/v1kind: Replic ...
kube-controller之deployment
Kubernetes中的Deployment Controller是一个负责管理Pod副本集的控制器。它在Kubernetes集群中负责确保Pod的副本数始终符合用户指定的期望值。Deployment Controller能够对Pod进行滚动更新(默认的更新策略),通过逐步替换Pod的方式更新应用程 ...
kube-controller之endpointslice
Kubernetes EndpointSlice是在Kubernetes 1.16版本中引入的一种资源,它提供了一种更有效的方式来表示Kubernetes服务的网络端点。 EndpointSlice为现有的Endpoints资源提供了一种替代方案,对于具有大量网络端点的非常大型服务,Endpoint ...
kube-controller之endpoint
在 Kubernetes 中,一个 Endpoint 代表一个网络地址(IP地址和端口,是实现实际服务的端点的集合,通常用于将服务的客户端请求路由到后端 Pod 的 IP 地址和端口上。 Endpoint 可以手动创建,也可以由 Kubernetes 的 service 控制器自动创建和更新。当创建 ...
apiserver-builder-alpha
k8s有两种扩展kubernetes API的方式Custom Resources和Kubernetes API Aggregation这两者最大的区别在于CRD通过在kubernetes API内部添加资源来扩展API,而server aggregation则是通过外部服务。 Aggregatio ...
k8s Deployment滚动升级可可靠吗
Kubernetes Deployment使用滚动升级策略进行升级,可以保证升级过程中的可靠性和容错性。 滚动升级通过逐步将新版本的Pod逐步添加到服务中,同时逐步停止旧版本的Pod,实现了服务的无停机升级。在升级过程中,Kubernetes会监控新版本Pod的运行状态,并在满足指定的健康检查条件之 ...
k8s源码设计模式之Iterator
迭代器模式也叫Iterator迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。 // plugins/ipam/host-local/backend/allocator/allocator.go// 对RangeIter实现Next ...
cni-plugins之ipam-host-local
host-local是一种IP地址管理(IPAM)插件。它从一组地址范围中分配IP地址,也可以从主机上的resolv.conf文件中获取DNS配置。它在主机文件系统上存储本地状态,因此可以确保单个主机上IP地址的唯一性。该分配器可以分配多个地址范围,并支持多个(不相交的)子网集。分配策略是在每个范围 ...
k8s设计模式之Command
命令模式也叫动作,事务,Action,Transaction,Command。 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。 // pkg/kubelet/con ...
hexo添加评论系统giscus
如何给hexo搭建的博客添加评论系统,经过对比之后决定使用giscus。giscus有如下优点,参考官网。 本人使用的hexo的一些信息,使用的主题为next,版本为7.1.2。查看文件themes/next/package.json获取版本信息。➜ hexo versionhexo: 3.9.0h ...
k8s源码设计模式之State
State也就是状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在Kubernetes 中,DeploymentController 作为控制器之一,主要负责维护 Deployment 对象的状态,即根据用户定义的 Deployme ...
k8s源码设计模式之Proxy
Proxy也就是代理模式 代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。 在upgradeawarehandler.go文件中还定义了一个UpgradeAwareHandler结构体,它可以将HTTP请求 ...
k8s源码设计模式之Flyweight
Flyweight也叫缓存,Cache,享元模式。 享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。 在 Kubernetes 源码中,有多个地方使用了享元模式(Flyweight Pattern), ...
k8s源码设计模式之Composite
组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。在Golang中可以使用多个interface组合在一起实现组合的功能。 // vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go// 下 ...
k8s源码设计模式之Clone
原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 k8s使用代码生成的方式为每个资源对象实现了DeepCopy()方法。 // pkg/apis/core/types.go// Pod的定义// Pod is a collection of container ...
k8s源码设计模式之Template Method
模板方法是一种行为设计模式,用于定义一个操作的算法骨架,而将一些步骤的实现推迟到子类中。它可以使子类在不改变算法结构的情况下重定义算法中的某些步骤。 k8s源码中client-go中模版方法 // staging/src/k8s.io/client-go/rest/client.gotype Int ...