- 博客(173)
- 收藏
- 关注
转载 【容器运行时-转载】k8s 1.20 后 containerd 的变化(containerd-shim父进程为1号进程)
这件事困扰了我很久,现在终于有时间来一探究竟了。Kubernetes 自从 1.20 版废除对 dockershim 的支持,改用作为默认的容器运行时。我们使用ps我们会发现了一个奇怪的现象,containerd 进程是由 PID 1 号进程 systemd 托管,所以 containerd 进程的父进程 ID(PPID)毫无疑问就是 1;
2023-03-06 11:10:55
702
转载 【容器运行时-转载】为什么需要 containerd
可以看出,在容器技术逐步标准化后,containerd 在相关的技术栈中将占据非常重要的地位,containerd 提供的核心服务很可能成为底层管理容器的标准。届时,更上层的容器化应用平台将直接使用 containerd 提供的基础服务。Containerd小尝containerd。
2023-03-06 11:08:33
529
转载 【容器运行时-转载】RunC 是什么?
RunC 作为标准化容器运行时的一个实现目前已经被 docker 内置为默认的容器运行时。相信随着 runC 自身的成熟和完善会有越来越多的大厂把 runC 作为默认的容器运行时。OCI和runc容器标准化和dockerOCI标准和runC原理解读。
2023-03-06 11:07:22
1162
原创 【容器运行时】一文理解 OCI、runc、containerd、docker、shim进程、cri、kubelet 之间的关系
方法 https://github.com/containerd/containerd/blob/v1.4.3/runtime/v2/runc/v2/service.go#L174-L286。结合源码 https://github.com/containerd/containerd/blob/v1.4.3/runtime/v2/shim/shim.go#L221-L229。可以看出,containerd是containerd-shim的父进程,contaienrd-shim是容器进程的父进程。
2023-03-06 11:02:15
3913
2
原创 【 K8s 源码之调度学习】Pod 间亲和性和反亲和性的源码分析
问题 —— 为什么不梳理 【现存哪些 Pod】 喜欢【新 Pod】?这部分就是,将节点的得分进行累计计算,返回此符合条件的节点的得分数。这部分主要看 processExistingPod 函数。—— 因此才考虑这么详细。
2023-02-24 16:48:22
966
1
原创 【 K8S 调度系列】理解 Pod 间的亲和性与反亲和性
这里的 topologyKey 对应的是 Node 上的标签的 Key(没有Value),可以看出,其实 topologyKey 就是用于筛选 Node 的。这里指定“同一位置” 是通过 topologyKey 来定义的,topologyKey 对应的值是 node 上的一个标签名称,比如各别节点zone=A标签,各别节点有zone=B标签,pod affinity topologyKey定义为zone,那么调度pod的时候就会围绕着A拓扑,B拓扑来调度,而相同拓扑下的node就为“同一位置”。
2023-02-20 17:21:46
1880
2
原创 【容器基础之三大基石】Cgroups、Namespace、Rootfs 保障容器的隔离性、一致性和高性能
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
2023-02-07 17:51:33
1779
转载 【K8S 之调度器详解】调度器的config、预选、优选、批调度都是什么?
尽可能地将 workload 平均到不同的节点,减少单个节点宕机造成的损失可扩展性。随着集群规模的增加,怎么保证调度器不会成为性能的瓶颈高可用。调度器能做组成集群,任何一个调度器出现问题,不会影响整个集群的调度灵活性。不同的用户有不同的调度需求,一个优秀的调度器还要允许用户能配置不同的调度算法资源合理和高效利用。调度器应该尽可能地提高集群的资源利用率,防止资源的浪费一般来说,我们有4种扩展 Kubernetes 调度器的方法。
2023-02-03 15:39:44
1193
原创 【K8S之调度器流程和扩展】如何给 scheduler 添加扩展插件、关闭默认插件、创建多个 scheduler?
如果我们要实现自己的插件,必须向调度框架注册插件并完成配置,另外还必须实现扩展点接口,对应的扩展点接口我们可以在源码。
2023-02-02 18:19:01
3855
10
原创 【授权与认证】Dex 与 LDAP、OIDC
为了检索的需要添加了 BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法(Syntax)。但目录一般只执行简单的更新(写)操作,不支持批量更新所需要的事务处理功能;可以把Dex当作一个轻量级的认证的代理入口(portal),应用APP只需要通过与Dex交互,由Dex负责与后端的上游认证服务器交互,从而屏蔽了后端认证服务器的协议差异。目录信息树可以类比我们的**「磁盘文件系统目录树」**,上面的定义是官方定义,理解起来,DIT 就是指像文件系统一样的目录结构树。
2023-01-30 18:06:33
1410
原创 【授权与认证】OAuth 2.0 和 OIDC 的异同点
OIDC 协议定义的名词和 OAuth 2.0 协议定义的稍微有些出入:OpenID Provider ,简称 OP :相当于 OAuth 2.0 中的授权服务器,除了负责颁发 Access Token ,还会颁发 ID Token。例如 IDaaS 就是一个 OP。Relying Party ,简称 RP :代指 OAuth 2.0 中的客户端。End User ,简称 EU :即用户。最后, OIDC 的授权流程与 OAuth 2.0 是一样的,
2023-01-30 17:58:02
3313
1
原创 【Docker rwm权限】docker 的创建设备文件权限 m(mknod)
我们的linux操作系统跟外部设备(如磁盘、光盘等)的通信都是通过设备文件进行的,应用程序可以打开、关闭、读写这些设备文件,从而对设备进行读写,这种操作就像读写普通的文件一样easy。默认的seccomp配置文件将根据所选的功能进行调整,以允许使用功能所允许的功能,所以从Docker1.12之后的版本,不应该对此进行调整。时,将允许Docker容器访问宿主机上的所有设备,并在AppArmor或SELinux中设置一些配置,使容器内的进程可以与容器外运行的进程几乎一样权限来访问宿主机。对功能进行细粒度控制。
2023-01-06 14:25:44
2016
原创 Go 易错点之协程(中间函数退出不会导致调用的 goroutine 退出)
【代码】Go 易错点之协程(中间函数退出不会导致调用的 goroutine 退出)
2023-01-05 18:18:43
304
原创 Go 易错点值 Sort 自定义属性排序
Golang之Sort包对于不同结构体,实现 Sort 包规定的几个方法,便可以按照自己想要的【属性】自行排序package main import("fmt" "sort") // sort.Sort 自定义排序 // 首先要自定义类型 // 之后要实现自定义排序 需要实现三个方法 Len 返回长度 Less 比较(升序还是降序) Swap 交换 type arrTest [ ] int func main() {
2023-01-05 18:17:04
255
原创 Go 学习之 grpc
RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。首先与RPC(远程过程调用)相对应的是本地调用。
2023-01-05 18:15:35
771
转载 【Docker capability】docker capability 属性功能介绍(docker运行时权限、Linux系统功能)
出于容器之间和容器与宿主机的安全隔离保护,在默认的Docker配置下,Docker容器是没有系统权限的。这是因为在默认情况下,容器内的进程不允许访问任何宿主机上的设备。默认的seccomp配置文件将根据所选的功能进行调整,以允许使用功能所允许的功能,所以从Docker1.12之后的版本,不应该对此进行调整。时,将允许Docker容器访问宿主机上的所有设备,并在AppArmor或SELinux中设置一些配置,使容器内的进程可以与容器外运行的进程几乎一样权限来访问宿主机。如果想限制对特定设备的访问,可以使用。
2023-01-05 18:07:10
1666
转载 【k8s-device plugin】k8s device plugin 编写实例教学
几个月前,在我的博客如何在 Kubernetes 集群中利用 GPU 进行 AI 训练对 Kubernetes 1.8 如何使用 GPU 进行了分析,在 Kubernetes 1.10 中,已经推荐使用 Device Plugins 来使用 GPU 了。本文分析了 Device Plugin 的的原理和工作机制,介绍了 Extended Resource,Nvidia Device Plugin 的异常处理及改进点,如何使用和调度 GPU 等。下一篇篇博客,我将对。
2023-01-05 18:02:24
2373
原创 【k8s-device plugin】如何编写 k8s device plugin
Kubernetes开发知识–device-plugin的实现[Gaia Scheduler] gpu-manager 启动流程分析[Gaia Scheduler] gpu-manager 的虚拟化 gpu 分配流程以 gpu-manager 项目为例,关注了两种资源 vcore 和 vmemory(我为其命名为 dfy.com/vgpu-core 和 dfy.com/vgpu-memory,项目中不是这个名字哈)所以考虑一下几个方面,以 vcore 资源为例。
2023-01-05 17:53:09
2146
原创 【shell脚本编写】shell 数组的使用
数组不是单纯的数组,可以视为【字典】和【数组】的结合。append【+=】方式创建数组,注意加括号()${数组名[索引]}
2022-12-02 09:30:52
1823
1
原创 【shell脚本编写】判断条件中 -z到-d 的使用
记录下shell的if判断条件里-z到-d的意思。if [[ -d 待判定变量 ]];数字判断 [ count−gt"1"]如果。 若待判定变量是目录,需要执行的逻辑。
2022-12-02 09:30:32
938
转载 【shell脚本编写】shell 中各种括号的作用()、(())、[]、[[]]、{}
对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}若var为空时,用string替换${var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。(1) 大括号拓展。2、${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。
2022-12-02 09:30:19
300
原创 【shell脚本编写】shell编写常用命令
Shell脚本-for循环和for in循环](https://blog.csdn.net/qq_37279783/article/details/125536209)
2022-12-02 09:29:55
275
原创 【Linux命令】awk命令
以上就是awk的内置变量,如果我们要自定义自己想要的变量,可以通过下面的方式来进行定义: [ root@dev01 yeyz_shell ] # awk -v var='yeyz' 'BEGIN{print var}' yeyz [ root@dev01 yeyz_shell ] # awk 'BEGIN{ var2="yyy";
2022-12-01 15:39:43
900
原创 【Linux命令】sed命令
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
2022-12-01 15:34:36
8679
原创 【Linux命令】pushd、popd 实现目录快速跳回(优于cd -)
【代码】【Linux命令】pushd、popd 实现目录快速跳回(优于cd -)
2022-12-01 15:30:19
1709
原创 【Linux命令】curl 命令
最好用登录页面测试,因为你传值过去后,回抓数据,你可以看到你传值有没有成功。,后面的url要具体到某个文件,不然抓不下来。我们还可以用正则来抓取东西。curl(7.29.0)所支持的选项(options)参数如下。用的时候,把他们cat一下就OK了,
2022-12-01 14:51:56
516
转载 【转载】Kubernetes IPAM分配IP原理 host-local
假设有一个pod用了10.244.1.1,然后这个pod被删除了,然后CNI插件释放这个ip,docker释放这个容器,但是有可能docker还没完全释放这个容器的时候,CNI先完成了ip的释放并且这时候又有新的pod创建出来,那么新的pod可能用了10.244.1.1这个ip,但是旧的正在被释放容器也在用这个ip,就可能出现冲突和数据混乱。1、kubernetes会针对每个node去标示一个名为PodCIDR的值,代表该Node可以使用的网段是什么,且分配的时候保证为每个pod分配不同的段。
2022-12-01 14:48:47
910
原创 【Linux基础知识点】内核、系统调用、Shell、指令集、微架构、硬件架构、用户态、内核态、进程、用户线程、内核线程
linux基础知识点介绍
2022-12-01 12:40:17
1551
原创 iptables 过滤过程理解(四表五链)
链是规则的容器,一条链中可能包含着众多的规则,当一个数据包到达一个链时,iptables 就会从链中第一条规则开始匹配,如果满足该规则的条件,系统就会根据该条规则所定义的方法处理该数据包,否则将继续匹配下一条规则,如果该数据包不符合链中任一条规则,iptables 就会根据该链预先定义的默认策略来处理数据包。规则存储在内核空间的信息包过滤表中,数据包每经过一个链(关卡)时,系统会根据链中规则指定的匹配条件来尝试匹配,一旦匹配成功,则由规则后面指定的处理动作进行处理。它能改变 TCP 头中的 QoS 位。
2022-10-26 15:28:00
1442
原创 k8s 创建 Token (及一个 ServiceAccount 管控多个 Namespace)
可以实现 SA 具有操作别的 namespace 中资源的权限(例如 SA 在 ns1, Role 在 ns2,SA 可操作 ns2 资源)SA 通过 ClusterRoleBinding 绑定 ClusterRole,具有 ClusterRole 权限,可操作。SA 通过 RoleBinding 绑定 Role ,具有 Role 权限,只能操作。没有 ClusterRoleBinding 与 Role 的 组合。绑定 ClusterRole, 具有。
2022-10-18 16:42:56
5068
原创 Go 项目生成版本号
本文介绍了一种如何通过 ldflags -X 变量传递的方式。使用这种方式我们可以在构建时轻松设定一些元信息,例如本文示例的程序版本信息。而这种构建的动作不应该手动去执行,而是放入到 CI/CD 流程中,让整个过程变得更加丝滑。关于 ldflags 的用例或版本号管理方案,如果大家有更好的想法,欢迎留言交流。
2022-10-14 18:00:37
1120
原创 【Go mod 学习之 go sum 篇】用于验证 go mod 文件和依赖包的完整性
中的依赖包,下载的依赖包会缓存在本地,以便下次构建。考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一个。在Go module机制下,我们需要同时使用依赖包的名称和版本才可以准确的描述一个依赖,为了方便叙述,下面我们使用。文件,用于记录每个依赖包的哈希值,在构建时,如果本地的依赖包hash值与。存在的意义,即如果不使用我期望的版本,就不能构建。中记录的依赖包,并计算本地依赖包的哈希值,然后与。中记录的是完全一致的,从而达到一致构建的目的。(校验和数据库)验证过的。
2022-10-14 17:59:10
1652
原创 【Go mod 学习之依赖包存储篇】go get 下载的包存储在哪?
由于依赖包的每个版本都有一个唯一的目录,所以在多项目场景中需要使用同一个依赖包的多版本时才不会产生冲突。另外,由于依赖包的每个版本都有唯一的目录,也表示该目录内容不会发生改变,也就不必再存储其位于版本管理系统(如git)中的信息。命令不指定特定版本时,默认会下载最新版本,即v1.1.1,如软件包有新版本发布,实验结果将有所不同。中使用错误的包名,除了会增加额外的不必要存储外,还可能会影响。在下面的操作中,我们会使用。,该目录下只保存特定依赖包的一个版本,而在。目录,它用来存储依赖包的缓存,简单说,
2022-10-14 17:58:09
8321
原创 【Go mod 学习之伪版本篇】采用 commit id 进行 go get 会生成伪版本号
在实际项目中,有时不得不直接使用一个commit ID,比如某项目发布了v1.5.0版本,但随即又修复了一个bug(引入一个新的commit ID),而且没有发布新的版本。此时,如果我们希望使用最新的版本,就需要直接引用最新的commit ID,而不是之前的语义化版本v1.5.0。使用commit ID的版本在Go语言中称为,可译为"伪版本"。伪版本的版本号通常会使用格式,其中vx.y.z看上去像是一个真实的语义化版本,但通常并不存在该版本,所以称为伪版本。另外表示某个commit ID的前12位,而。
2022-10-14 17:57:14
2287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅