从一个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 ...
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 ...
etcdctl的使用
etcdctl安装 访问etcd的GitHub仓库,链接为:https://github.com/etcd-io/etcd/releases 在该页面中,找到与您的操作系统和体系结构相匹配的最新版本的etcd二进制文件。例如,对于Linux系统,您可以下载以etcd-vX.Y.Z-linux-amd ...
kube-controller之history
ControllerRevisionControllerRevision 实现了一个不可变的状态数据快照。客户端负责序列化和反序列化包含其内部状态的对象一旦成功创建了 ControllerRevision,就不能对其进行更新,但是可以被删除。APIServer会拒绝所有试图修改 Data 字段的请求 ...
kube-controller之ttlafterfinished
TTLAfterFinishedTTLAfterFinished是一种自动清理已完成的 Job(包括 Complete 或 Failed 状态)的方法。其使用 TTL 机制,通过指定 Job的 .spec.ttlSecondsAfterFinished 字段。 当 TTLAfterFinished- ...
kube-controller之job
Job在k8s中,Job是用于运行批处理或单次任务的资源。它代表了一个任务或一组并行任务,直到成功完成。Job通常用于数据处理、备份或其他需要执行一次或定期执行的任务CronJob。 以下是k8s中Job的一些关键特性和特点: 执行:Job确保任务成功完成后才将其标记为“完成”。每个任务都会执行直 ...
k8s hasSynced
k8s cache在k8s中为减轻apiserver的压力,会使用缓存来存储k8s中的资源,这样每次访问就可以直接从缓存了获取数据(k8s通过watch,resync机制来保证本地缓存和数据的同步)。 当我们在使用informer机制时,必须等待资源同步到本地缓存中。所以如何等待和判断数据已经同步到 ...
k8s Pod Qos
QOSQos(Quality of Service),k8s会根据Pod容器中指定的资源约束为每个Pod设置QoS类。k8s依赖这种分类来决定当Node上没有足够可用资源时要驱逐哪些 Pod。 QoS 类k8s 对你运行的 Pod 进行分类,并将每个 Pod 分配到特定的 QoS类中。 k8s 使用 ...