
kubernetes
文章平均质量分 85
go、k8s云原生系列
码农渔夫
hax20211108 我是一名新时代广深漂AI农民工。喜欢分享,喜欢折腾,也热爱搞钱!
路漫漫其修远兮,吾将上下而求索。公号日更:「码农渔夫」
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
k8s 为什么需要Pod?
Pod,是 Kubernetes 项目中最小的 API 对象,更加专业的说,Pod,是 Kubernetes 项目的原子调度单位。Pod 是 Kubernetes 里的原子调度单位。这就意味着,Kubernetes 项目的调度器,是统一按照 Pod 而非容器的资源需求进行计算的。例子:所以,像 imklog、imuxsock 和 main 函数主进程这样的三个容器,正是一个典型的由三个容器组成的 Pod。原创 2024-12-08 10:41:47 · 1268 阅读 · 1 评论 -
k8s 之 DaemonSet
DaemonSet 作用就是保证 kubernetes 集群中部分或所有节点都能够运行同一份 Pod 副本,如果当有新的 Node 加入到集群,Pod 就会在目标的节点上启动;如果节点在集群中被剔除,那么该节点上 Pod 也会被剔除(被垃圾收集器清理掉)。原创 2024-12-08 10:41:13 · 1383 阅读 · 0 评论 -
k8s 之 Deployment
举个例子,如果你更新了 Deployment 的 Pod 模板(比如,修改了容器的镜像),那么 Deployment 就需要遵循一种叫作“滚动更新”(rolling update)的方式,来升级现有的容器。“水平收缩”则反之。实际上,这个组件,就是一系列控制器的集合。Deployment 这样的一个控制器,实际上都是由上半部分的控制器定义(包括期 望状态),加上下半部分的被控制对象的模板组成的。具体的实现上,这个 Deployment,与 ReplicaSet,以及 Pod 的关系是怎样的呢?原创 2024-12-08 10:40:24 · 611 阅读 · 0 评论 -
k8s 之 StatefulSet
本文主要介绍了无状态和有状态服务在K8S中的典型应用场景.通过对Deployment部署无状态服务所遇到问题的分析,引出了Stateful新的部署组件.它是通过支持Pod一些特性(e.g. 名称唯一性,稳定的网络标识, 稳定的持久化存储等)来实现在K8S中部署运维有状态服务.牢记: Stateful有状态服务,每个Pod有独立的PVC/PV存储组件StatefulSet 的工作原理之前,必须先为你讲解一个 Kubernetes 项目中非常实用的概念:Headless Service。原创 2024-12-08 10:38:59 · 1520 阅读 · 0 评论 -
Linux内核升级操作和 k8s 常见命令
kernel 包版本 —> lt:长期维护版;列出可以使用的 kernel 版本。4、设置开启系统启动时使用的内核版本。3、安装指定的 kernel 版本。1、安装 ELRepo 最新版本。2、安装新的内核版本。原创 2024-12-08 10:24:41 · 440 阅读 · 0 评论 -
spark-operaotr
提交作业的核心逻辑在submission.go这个模块中。控制器的代码主要位于。原创 2024-12-08 10:22:56 · 647 阅读 · 0 评论 -
Kubebuilder 架构介绍
Kubebuilder 是一个用 Go 语言构建 Kubernetes APIs 的框架,通过使用 Kubebuilder,用户可以遵循一套简单的编程框架,使用 CRD 构建API、Controllers 和 Admission WebHooks,实现对 k8s 的扩展。Kubebuilder 中的主要组件包含 Manager、Cache、Client 与 Finalizers。Manager组件主要实现管理外层,负责初始化 Controller、Cache、Client的工作;原创 2024-12-08 10:22:11 · 1362 阅读 · 0 评论 -
controller-runtime之Controller启动分析(2)
Builder 创 建 Controller 时, 会 根 据 Builder.For()、Builder.Owns()、Builder.Watches() 方法中设置的资源对象类型在 Builder.Build() 中创建相应的 Kind, 并调用 Controller. Watch() 方法将 Kind 传入 Controller。重新 入队列的方法可以是带有一定延迟的 Queue.AddAfter(), 也可以是有限速的 Queue. AddRateLimited()。重新加入的次数无限制。原创 2024-12-08 10:20:37 · 873 阅读 · 0 评论 -
controller-runtime之Manage启动分析(1)
Controller-runtime 提供的用于开发 Controller 的框架, 包含了各种已封装的代码库。如 Kubebuilder 与 Operator SDK 都是基于 Controller-runtime 框架来工作的, 使 用 Controller-runtime, 开 发 者 可 以 方 便 地 开 发 各 种 Controller、CRD、Admission WebHook 等。原创 2024-12-08 10:20:06 · 750 阅读 · 0 评论 -
k8s-编写CSI插件(3)
在 Kubernetes 中,存储插件的开发主要有以下几种方式:CSI插件:Container Storage Interface (CSI) 是 Kubernetes 的标准插件接口,是全新的插件方案,插件和驱动调用通过grpc协议,功能丰富,支持存储卷动态提供、快速、动态扩容等等。例如,可以连in-tree的插件做平滑迁移,当系统中运行有对应类型的 CSI 驱动时,其实使用方式虽然还是in-tree。原创 2024-12-07 16:21:12 · 1326 阅读 · 0 评论 -
k8s-持久化存储之StorageClass(2)
但现在有一个比较棘手的问题,当大规模的 kubernetes 生产集群中,可能会有很多的 PVC,而且随着项目的增加,可能还需要不断创建新的 PV,不然可能为某个新的 Pod 因 PVC 绑定不到 PV 而创建失败。首先,来了解持久化 Volume 的实现,想要持久化 Volume 大多数情况是需要依赖一个远程存储服务的,比如:远程文件存储(如:NFS)、远程块存储(如:公有云提供的远程磁盘)等。而 StorageClass 对象的作用,其实就是创建 PV 的模板。2、如何持久化 Volume。原创 2024-12-07 16:20:37 · 1161 阅读 · 0 评论 -
k8s-持久化存储PV与PVC(1)
在大规模的 kubernetes 生产集群中,可能会有很多的 PVC,随着项目的增加,可能还需要不断添加新的 PV,否则可能为某个新的 Pod 因 PVC 绑定不到 PV 而创建失败。但 Pod被删除,重新拉起,或Pod超出资源限制被 Kubelet 杀死了,emptyDir 卷中的数据也会被永久删除,这种存储卷也称为“临时存储”。说明:当 Pod 被删除,这个存储卷还在,只要保证同一个 Pod 被调度到同一个节点上, 在 pod 被删除重新被调度到这个节点之后,对应的数据依然是存在的。原创 2024-12-07 16:19:44 · 1250 阅读 · 0 评论 -
k8s-容器运行时接口分析
在 k8s v1.5 之前,Docker 作为第一代的容器运行时, kubelet 通过内嵌其中的 DockerShim 操作 Docker API 来操作容器。所以它的作用非常单一,那就是实现 CRI 规定的每个接口,然后把具体的 CRI 请求“翻译”成对后端容器项目的请求或者操作。在 CRI 中,我们显式的定义这些调用,让运行时可以做特定实现。Kubelet 的职责在于通过 RPC 管理容器的生命周期,实现容器生命周期的钩子,以及存活和健康监测,执行 Pod 的重启策略等。在CRI中,这种环境称为。原创 2024-12-07 16:17:14 · 1093 阅读 · 0 评论 -
什么是 k8s CNI ?
CNI 是容器网络接口 (Container Network Interface)的缩写。定义了容器运行时如何与网络插件进行交互,从而管理容器网络。只要开发者遵循 CNI 定义的规范就可以接入 kubernetes ,为 Pod 创建虚拟网卡、分配 IP 地址、设置路由规则等,这样就实现 “IP-Per-Pod” 网络模型。CNI 为网络插件定义了一些以系列通用接口,可以使容器运行时与多种不同的网络插件(Flannel、Calico、Cilium等网络插件)进行交互,不同网络插件可以提供不同的网络策略。原创 2024-12-07 16:15:57 · 1269 阅读 · 0 评论 -
了解 k8s 网络基础知识
根据我前面讲解的 TUN 设备的原理,这正是一个从用户态向内核态的流动方向(Flannel 进程向 TUN 设备发送数据包),所以 Linux 内核网络栈就会负责处理这个 IP 包,具体的处理方法,就是通过本机的路由表来寻找这个 IP 包的下一步流向。不难理解,这个 UDP 包的源地址,就是 flanneld 所在的 Node 1 的地址,而目的地址,则是 container-2 所在的宿主机 Node 2 的地址。其中,网关的 IP 地址,正是目的容器所在宿主机的 IP 地址。原创 2024-12-07 16:14:24 · 1284 阅读 · 0 评论 -
k8s-Informer之Reflector的解析
当资源对象发生变化时(如:添加和删除等事件),Reflector 会将其这些资源对象的变化包装成Delta并将其丢到DeltaFIFO中。通过 NewReflector 实例化 Reflector 对象,在实例中需要传入的 ListerWatcher 数据接口对象,这个包含核心 List 和 Watch 方法,主要是负责 List 和 Watch 指定的 Kubernetes APIServer 资源。组件的一个重要函数,它负责监听Kubernetes API server中的对象变更事件。原创 2024-12-07 15:05:43 · 644 阅读 · 0 评论 -
k8s-Informer之Indexer的解析(4)
Indexer 中的数据始终要是与 ETCD 中数据一致的,当 client-go 需要数据时,可直接通过该本地缓存获取资源对象,不需要每次都从 APIServer中获取,这样就减轻了请求过多造成对 APIServer 、etcd的压力。该方法传入索引器名称 indexName 和索引键名称indexedValue,方法寻找该索引器下,索引键对应的对象键列表,然后根据对象键列表,到Indexer缓存(即threadSafeMap中的items属性)中获取出相应的对象列表。3、Indexer 索引功能。原创 2024-12-07 15:05:09 · 566 阅读 · 0 评论 -
k8s-Informer之DeltaFIFO的解析(3)
在controller的Run方法中,调用NewReflector初始化Reflector时,同步了 DeltaFIFO,并且执行 processLoop 方法。DeltaFIFO 是一个增量的本地队列,记录资源对象的变化过程。它生产者是 Reflector 组件,将监听到的对象,同步到 DeltaFIFO 中,DeltaFIFO 又对资源对象做了什么呢。可知 Reflector里的 store.Add() 其实就是 DeltaFIFO 的 Replace、Add、Update、Delete方法的。原创 2024-12-07 15:03:50 · 616 阅读 · 0 评论 -
k8s-Informer概要解析(2)
Informer 负责与 kubernetes APIServer 进行 Watch 操作,Watch 的资源,可以是 kubernetes 内置资源对象,也可以 CRD。Informer 是一个带有本地缓存以及索引机制的核心工具包,当请求为查询操作的时候,会优先从本地缓存内存去查询数据,而 创建、更新、删除这类操作,则会根据事件通知写入队列 DeltaFIFO 中,同时对应的事件处理过后,更新本地缓存,使得本地缓存与 ETCD 的数据保持一致性。原创 2024-12-07 15:02:36 · 961 阅读 · 0 评论 -
k8s-client-go基本使用(1)
Client-go 是负责与 k8s APIServer 服务进行交互的客户端库,利用 Client-go 与 k8s APIServer 进行的交互访问,以此来对 k8s 中的各类资源对象进行管理操作,包括内置的资源对象及未来自定义的CRD资源。原创 2024-12-07 14:09:32 · 1240 阅读 · 0 评论 -
kubevirt 是什么?
卷是一种抽象概念,它们可以被格式化为文件系统,并被操作系统分配给应用程序或用户。卷通常由文件系统管理,它们可以被动态地扩展或收缩,以适应不同的存储需求。磁盘可以被划分成一个或多个分区,每个分区可以被格式化为一个文件系统,以便在上面存储数据。磁盘可以被划分为一个或多个分区,并且每个分区可以被格式化为一个文件系统并被挂载到一个挂载点上。因此,在某些情况下,磁盘可以被挂载为一个卷,然后使用该卷来存储数据。磁盘可以被分区并格式化为一个或多个卷,而卷可以动态地扩展或收缩以适应不同的存储需求。原创 2024-12-07 14:08:32 · 1128 阅读 · 0 评论