从一个deployment到创建对应的资源(如Replicat,pod)主要包括这几个主件kubee-apiserver,kube-controller-manager(deployment-controller,replicaset-controller),kubelet,kube-schedul ...
一个pod的正常终止流程
当你使用命令kubectl delete pod pod_name来删除一个pod,你有了解过整个流程是怎么样的吗?pod是如何被删除的,kubelet做了什么,容器运行时又做了什么?今天就来分析一下一个pod正常的终止流程。 新建一个pod你可以执行命令kubectl apply -f mycur ...
how to write a k8s admission webhook
什么是admission webhookKubernetes Admission Webhook是一种HTTP回调机制,它允许Kubernetes调用外部Web服务,以便在某些事件发生时执行自定义代码。 Admission Webhook是Kubernetes提供的一种扩展机制,用于在资源被持久化到 ...
kube-controller-manager
kube-controller-manager是k8s中一个非常重要的组件,它主要负责管理k8s集群中的各种资源调节到预期状态。kube-controller-manager中有多种内置的controller,它们其实就是一个永不停止的循环,不断的调节系统达到预期的状态。k8s中有多种内置的cont ...
http sse/x-ndjson
Server Sent EventsSSE (Server-Sent Events) 数据格式是一种基于文本的格式,用于在服务器和客户端之间传输事件数据。SSE 数据流由一系列以换行符 \n 分隔的字段组成,每个字段都由一个字段名和字段值组成。 SSE 数据格式中常用的字段如下:Event stre ...
k8s subresource status
什么是subresource statusstatus是k8s中常见的一种子资源。 /status 子资源用于更新和获取主资源的状态部 通常由控制器或操作系统更新,以反映系统中对象的当前状态 通过将状态更新与主资源的其他修改隔离开来,可以防止用户意外覆盖状态信息 subresource stat ...
helm chart install/uninstall源码分析
helm项目主要目录pkg/action: 包含执行Helm操作的主要客户端。和CLI处理过程中使用的是同一个包。如果你仅仅需要执行来自另一个Go程序的最基本的Helm命令,这个包会很适合你pkg/{chart,chartutil}: 加载和控制chart时使用的方法和帮助内容p ...
proxy protocol
什么是Proxy Protocol?Proxy Protocol是一种用于在代理服务器和目标服务器之间传递连接信息的协议。在传统的网络通信中,当客户端连接通过代理服务器时,代理服务器会在转发连接之前修改源IP和端口等连接信息。这导致目标服务器无法正确识别客户端的真实IP和端口。Proxy Proto ...
kube-state-metrics源码分析
代码结构介绍下几个比较重要的目录 目录 描述 internal/store 定义了各种资源metricsFamily用生成metrics pkg/builder 使用builder_pattern构建store pkg/metric_generator 生成metrics ...
kube-state-metrics
kube-state-metrics(KSM)是一个简单的服务,它监听Kubernetes API服务器并生成关于对象状态的指标(请参见下面“指标”部分中的示例)。它的重点不在于个别Kubernetes组件的健康状况,而是关注其中各种对象(如部署、节点和Pod)的健康状况。 kube-state-m ...
golang net/http路由实现
当我们使用net/http开发一个接口时,需要编写一个handler函数,然后将handler函数注册到对应的url中。当服务启动后, 访问对应的url就会将对应的请求转发到对应的hander函数中。下面是一个使用net/http的示例 func helloWorldHandler(w http.R ...
k8s list请求源码分析
我们知道在k8s中List请求是很常见的一种操作,用于获取一种资源对象的列表,如pod的List方法用于获取k8s集群中的所有pod资源。 在深入理解List操作之前,我们需要了解resourceVersion这个参数。 在每k8s资源对象中都有一个字段resourceVersion用于标识当前资源 ...
golang container list实现
golang源码中的container列表实现。 源码实现// Element 表示列表中的一个节点type Element struct { // Next and previous pointers in the doubly-linked list of elements. // T ...
k8s expiring lru cache
LRUExpireCache 是一种支持数据过期的 LRU(最近最少使用)缓存策略。当缓存达到最大大小(maxsize)后,在Add操作中最近最少使用的项目将会被移除,在Get操作中如果项目过期将会被移除。下面是k8s源码中LRUExpireCache的实现。 import ( "container ...
k8s expiring cache
如何实现一个带ttl的缓存。今天来学习下k8s源码中是怎么实现的。 package cacheimport ( "container/heap" "sync" "time" "k8s.io/utils/clock")// NewExpiring 返回初始化后的Expiringfunc NewExpi ...
asymmetric cryptography
公钥密码学,也称为非对称密码学,是使用相关密钥对的密码系统领域。每个密钥对由公钥和相应的私钥组成。密钥对是通过基于数学问题的单向函数的加密算法生成的。公钥密码学的安全性取决于保持私钥的机密性;公钥可以公开分发而不会危及安全性。 密钥对的生成非对称密钥对生成通常使用一个不可预测的(大且随机的)数字并通 ...
k8s webhook生成ssl证书
当我们使用k8s的webhook机制时,webhook服务必须是https服务。如果不是https服务 ,则会报如下错误。http: server gave HTTP response to HTTPS client 记录下证书生成的步骤: openssl req -new -newkey rsa: ...
kube-controller之storageversion
Lease, storageVersionLease(租约)租约提供了一种机制来锁定共享资源并协调集合成员之间的活动,Kubernetes 也使用 Lease 确保在任何给定时间某个组件只有一个实例在运行。 这在高可用配置中由 kube-controller-manager 和 kube-sched ...
kube-controller之statefulset
StatefulSetStatefulSet 是用来管理有状态应用的工作负载 API 对象。 StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符。 和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但 ...
Terminating状态的pod是怎么被删除的
一个Terminating状态(数据并没有直接从etcd删除,而是设置了DeletionTimestamp)的Pod是怎么删除的呢?我们知道删除一个资源对象是要调用APIServer接口从etcd中将数据删除。假如要调用接口那请求发起方又是哪个组件呢? 创建一个Terminating状态的Podk ...