kubernetes
文章平均质量分 93
kubernetes
daemon365
https://daemon365.cnblogs.com/
展开
-
etcd watch 实现原理
在 etcd 中,watch 是一个非常重要的特性,它可以让客户端监控 etcd 中的 key 或者一组 key,当 key 发生变化时,etcd 会通知客户端。本文将介绍 etcd watch 的实现原理。# 当 /test 的值发生变化时,会输出如下信息PUT/testaPUT/testbDELETE/test。原创 2024-06-16 18:23:54 · 875 阅读 · 0 评论 -
boltdb 原理
介绍及简单使用:https://www.cnblogs.com/daemon365/p/17690167.html源码地址:https://github.com/etcd-io/bbolt。原创 2024-06-15 16:15:44 · 1774 阅读 · 0 评论 -
kubernetes 存储流程
csi-node 是一个 kubelet 的插件,所以它需要每个节点上都运行,当 pod 创建时,并且 VolumeAttachment 的 .spec.Attached 时,kubelet 会调用 csi 的 NodeStageVolume 函数,之后插件(csiAttacher)调用内部 in-tree CSI 插件(csiMountMgr)的 SetUp 函数,该函数内部会调用 csi 的 NodePublishVolume 函数,挂载 volume 到 pod 上。原创 2024-05-26 21:52:38 · 562 阅读 · 0 评论 -
kubernetes container device interface (CDI)
这么做的原因就是使用 gpu 不单单要绑定 gpu device 文件到容器内,还需要绑定一些驱动文件和可执行命令(比如 nvidia-smi)等到容器内,还有就执行一些 hooks。可以看到 nvidia 的 cdi 配置文件比 mock 的要复杂很多,因为 nvidia 的 gpu 需要绑定很多文件到容器内,还有 hooks 等。可以看到我们 cdi 配置文件配置的 device 和 so 文件和还有我们的 list_device.sh 都已经挂载到容器内了。查看node使用了多少资源。原创 2024-05-26 21:51:58 · 638 阅读 · 0 评论 -
kubernetes CNI(Container Network Inferface)
cni 创建的 process 进程是一个用户态的进程,每个包要在 node1 上从内核态 copy 到用户态,然后再封包,再 copy 到内核态,再发给 node2,再从内核态 copy 到用户态,再解包,再 copy 到内核态,再发给 pod2。所以我们像做一些网络操作,就不能在五层做了,只能在二三四层做。这个协议很重,之前都是用到互联网上,比如我们刚才距离的百度的时候,经过那么多路由器,每个路由器怎么知道要跳到哪,他们之间就是通过 BGP 协议来告诉对方自己的路由表,再经过一系列的学习优化。原创 2024-05-26 21:51:18 · 435 阅读 · 0 评论 -
kubernetes client-go功能介绍
lister则是对indexer的封装,提供了一种简单的方式来获取已经索引的对象列表,以供代码中的其他部分使用。例如,Deployment 的 GVR 为 “apps/v1/deployments”,其中 “apps” 是 API 群组,“v1” 是 API 版本,“deployments” 是资源类型。Kubernetes的所有资源都可以转换为这个结构类型。总之,Lister作为client-go包中的一个重要组件,可以帮助开发者更加高效地处理Kubernetes资源对象,提高代码的可读性和可重用性。原创 2024-05-26 21:50:28 · 458 阅读 · 0 评论 -
kubelet 原理分析
kubernetes 分为控制面和数据面,kubelet 就是数据面最主要的组件,在每个节点上启动,主要负责容器的创建、启停、监控、日志收集等工作。它是一个在每个集群节点上运行的代理,负责确保节点上的容器根据PodSpec(Pod定义文件)正确运行。Pod生命周期管理:Kubelet根据从API服务器接收到的PodSpecs创建、启动、终止容器。它负责启动Pod中的容器,并确保它们按预期运行。节点状态监控:Kubelet定期监控节点和容器的状态,并将状态报告回集群的控制平面。原创 2024-05-26 21:47:46 · 624 阅读 · 0 评论 -
istio sidecar 工作方式
所以可以看到,流量从 test pod 的 test container 出来之后,会被自己的 envoy(istio-proxy sidecar) 劫持,然后7层转发到 10.244.0.73 (nigix pod IP地址)。然后 nginx pod 中的 envoy container 会劫持这个流量交给自己,然后7层代理到 nginx container。流量回复回去是一个道理。原创 2024-05-26 21:46:51 · 425 阅读 · 0 评论 -
kube-proxy 流量流转方式
kube-proxy是 Kubernetes 集群中负责服务发现和负载均衡的组件之一。它是一个网络代理,运行在每个节点上, 用于 service 资源的负载均衡。iptables和ipvs。原创 2024-05-26 21:46:13 · 391 阅读 · 0 评论 -
etcd MVCC 存储结构及流程
MVCC 是 Multi-Version Concurrency Control 的缩写,即多版本并发控制。它是一种并发控制的方法,用于在数据库系统中实现事务的隔离性。MVCC 是一种乐观锁机制,它通过保存数据的多个版本来实现事务的隔禽性。在 etcd 中,MVCC 是用于实现数据的版本控制的。而且可以查看历史版本的数据。原创 2024-05-26 21:45:27 · 773 阅读 · 0 评论 -
kubernetes集群最新版安装
之前,我们用的容器runtime基本都是docker,但是docker并没有实现k8s的CRI,是在kubelet的有一个组件叫docker-shim做转化,在kubernetes v1.24版本以上这个组件已经废弃,这里选择containerd做容器runtime。如果非要使用docker的话,被kubernetes废弃的docker-shim被docker自己维护起来了,可以试试看。在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。原创 2024-05-26 21:44:06 · 381 阅读 · 0 评论 -
容器基础-- namespace,Cgroup 和 UnionFS
这里的 “namespace” 指的是 Linux namespace 技术,它是 Linux 内核实现的一种隔离方案。简而言之,Linux 操作系统能够为不同的进程分配不同的 namespace,每个 namespace 都具有独立的资源分配,从而实现了进程间的隔离。如果你的 Linux 安装了 GCC,可以通过运行命令来查看相关文档,或者你也可以访问在线手册获取更多信息。下图为各种 namespace 的参数,支持的起始内核版本,以及隔离内容。Namespace系统调用参数内核版本隔离内容。原创 2024-05-26 21:30:45 · 624 阅读 · 0 评论 -
容器启动流程(containerd 和 runc)
因为 第一个 containerd-shim 会在创建完第二个 containerd-shim 后退出,而作为第一个进程子进程的第二个 containerd-shim 会成为孤儿进程,这样就会被 init 进程接管,而和 containerd 本身脱离了关系。为了保证稳定性和独立性。这样 containerd-shim-runc-v2 的父进程就是 init 进程(1),而 init 进程的父进程是 containerd-shim-runc-v2 进程,这样就形成了一个进程树。可以看到我们的结论是正确的。原创 2024-05-26 21:34:50 · 772 阅读 · 0 评论 -
docker containerd runc containerd-shim等组件的关系
如果这些容器的进的父进程是 containerd ,那么当 containerd 进程挂掉或者重启时,容器的进程也会挂掉,这样就不符合容器的定义了,所以 containerd 通过 containerd-shim 来调用 runc,这样当 containerd 挂掉时,容器的进程还是会继续运行的。目前 dockershim 组件已经删除,不能使用了,所以 k8s 1.24 版本之后,kubelet 只能和实现了 cri 接口的容器运行时交互,比如 containerd,cri-o 等。原创 2024-05-26 21:33:34 · 1179 阅读 · 1 评论