Kubernetes
文章平均质量分 96
Kubernetes技术解析
邋遢的流浪剑客
成长中的基础架构攻城狮
展开
-
Kubernetes复习总结(三):核心组件原理及源码:client-go、controller-runtime、Scheduler、API Server、kubelet
Controller中主要使用到Informer和WorkQueue两个核心组件Controller可以有一个或多个Informer来跟踪某一个或多个resource。Informer跟Kubernetes API Server保持通讯获取资源的最新状态并更新到本地的cache中,一旦跟踪的资源有变化,Informer就会调用callback把关心的变更的Object放到WorkQueue里面。原创 2024-01-17 20:21:20 · 1501 阅读 · 2 评论 -
Kubernetes复习总结(二):Kubernetes容器网络
这条规则的意思是:凡是发往10.244.2.0/24网段的IP包,都需要经过flannel.1设备发出,并且,它最后被发往的网关地址是:10.244.2.0,也就是Node2上的VTEP设备(也就是flannel.1设备)的IP地址。所以,flanneld进程在处理由flannel0传入的IP包时,就可以根据目的IP的地址(比如10.244.2.3),匹配到对应的子网(10.244.2.0/24),从Etcd中找到这个子网对应的宿主机的IP地址是172.19.216.115。也就是说,来到了隧道的入口。原创 2024-01-06 16:32:07 · 1205 阅读 · 0 评论 -
Kubernetes复习总结(一):Kubernetes内置资源、Device Plugin机制
控制器对象本身,负责定义被管理对象的期望状态。比如,Deployment里的replicas=2这个字段而被控制对象的定义,则来自于一个模板。比如,Deployment里的template字段。可以看到,Deployment这个template字段里的内容,跟一个标准的Pod对象的API定义丝毫不差。而所有被这个Deployment管理的Pod实例,其实都是根据这个template字段的内容创建出来的。原创 2024-01-06 16:23:58 · 1309 阅读 · 0 评论 -
kubelet源码学习(二):kubelet创建Pod流程
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-12-24 14:20:33 · 1403 阅读 · 1 评论 -
kubelet源码学习(一):kubelet工作原理、kubelet启动过程
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-12-24 14:19:21 · 1959 阅读 · 0 评论 -
Kubernetes API Server源码学习(四):Admission机制的实现、HttpReq的处理过程、Authentication与Authorization
Admission Controller在HTTP请求经过登录和鉴权之后并且在Request真正被处理并且存储到Etcd之前去执行,可以修改请求对象(Mutation)或校验请求(Validation):登录和鉴权,校验Request发送者是否合法:Request以JSON格式发过来,转换为Go结构体类型,将外部版本转换为API Server内部APIObject版本:拿到Request对内容进行调整:通过Webhook调用Kubernetes使用者扩展的Mutation逻辑。原创 2023-06-22 15:28:02 · 749 阅读 · 4 评论 -
Kubernetes API Server源码学习(三):KubeAPIServer、APIExtensionsServer、AggregatorServer
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-06-22 15:17:18 · 1318 阅读 · 0 评论 -
Kubernetes API Server源码学习(二):OpenAPI、API Resource的装载、HTTP Server具体是怎么跑起来的?
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-06-22 15:11:07 · 1433 阅读 · 0 评论 -
Kubernetes API Server源码学习(一):API Server架构设计、API Server启动过程、APIObject的装载、Scheme详解、GenericAPIServer
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-06-22 14:53:56 · 1148 阅读 · 0 评论 -
Kubernetes调度器源码学习(三):Preempt抢占机制、调度失败与重试处理
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-04-09 16:22:13 · 1055 阅读 · 2 评论 -
Kubernetes调度器源码学习(二):调度核心实现
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-04-05 15:21:55 · 665 阅读 · 0 评论 -
Kubernetes调度器源码学习(一):调度器工作原理、调度器启动流程、调度队列
本文基于Kubernetes v1.22.4版本进行源码学习。原创 2023-04-05 13:56:21 · 1546 阅读 · 0 评论 -
controller-runtime源码学习
首先Controller会先向Informer注册特定资源的eventHandler;然后Cache会启动Informer,Informer向APIServer发出请求,建立连接;当Informer检测到有资源变动后,使用Controller注册进来的eventHandler判断是否推入队列中;当队列中有元素被推入时,Controller会将元素取出,并执行用户侧的Reconciler2022年最新k8s编程operator篇kubebuilder 进阶: 源码分析。原创 2023-02-11 16:39:53 · 1619 阅读 · 0 评论 -
client-go源码学习(四):自定义Controller的工作原理、WorkQueue
Controller中主要使用到Informer和WorkQueue两个核心组件Controller可以有一个或多个Informer来跟踪某一个resource。Informer跟Kubernetes API Server保持通讯获取资源的最新状态并更新到本地的cache中,一旦跟踪的资源有变化,Informer就会调用callback把关心的变更的Object放到WorkQueue里面。原创 2023-01-17 20:17:25 · 1000 阅读 · 0 评论 -
client-go源码学习(三):Indexer、SharedInformer
Indexer接口继承了一个Store接口(实现本地缓存),以及包含几个index索引相关的方法声明(实现索引功能)Store接口中定义了Add、Update、Delete、List、Get等一些资源对象增删改查的方法声明,用于操作Informer的本地缓存cache struct是Indexer接口的一个实现,所以自然也是Store接口的一个实现,cache struct包含一个ThreadSafeStore接口的实现,以及一个计算object key的函数KeyFunc。原创 2023-01-07 15:26:58 · 1434 阅读 · 0 评论 -
client-go源码学习(二):Reflector、DeltaFIFO
本文基于Kubernetes v1.22.4版本进行源码学习,对应的client-go版本为v0.22.4。原创 2022-12-31 15:42:53 · 1554 阅读 · 2 评论 -
client-go源码学习(一):client-go源码结构、Client客户端对象
本文基于Kubernetes v1.22.4版本进行源码学习,对应的client-go版本为v0.22.4。原创 2022-12-26 14:55:43 · 1724 阅读 · 0 评论 -
Kubernetes容器网络(三):容器跨主机Overlay网络、路由模式实验
前言前三篇文章我们分别介绍了Docker网络原理、Flannel网络原理、Calico网络原理,本文将通过实验的方式带你进一步理解容器跨主机网络实现 两个容器docker1和docker2分别位于节点Node1和Node2,如何实现容器的跨主机通信呢?一般来说有两种实现方式:封包模式:利用Overlay网络协议在节点间建立隧道,容器之间的网络包被封装在外层的网络协议包中进行传输,例如:Flannel UDP、Flannel VXLAN、Calico IPIP路由模式:容器间的网络包传输全部用三层原创 2022-05-01 14:44:45 · 2295 阅读 · 0 评论 -
Kubernetes容器网络(二):Calico网络原理
1、前置网络知识1)、BGP自治系统AS:在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由协议以确定在AS之间的路由路由选择协议分为:内部网关协议IGP:一个AS内使用的,如RIP、OSPF外部网关协议EGP:AS之间使用的,如BGP边界网关协议(BGP)是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议BGP的工作原理如下:每个自治系统的管理员要选择至少一个路由器(可以有多个)作原创 2022-04-16 16:36:42 · 7438 阅读 · 0 评论 -
Kubernetes容器网络(一):Flannel网络原理
前言本文主要分享Flannel如何解决跨主机容器之间通信问题的,如果你对主机内容器之间通信流程还不了解,建议先看下这篇文章:Docker网络原理1、前置网络知识1)、tun/tap设备tun/tap设备在虚拟机的组网过程中起到作用。tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装tun/tap设备到底是什么?从Linux文件系统的角度看,它是用户可以用文件句柄操作的字符设备;从网络虚拟化角度看,它是虚拟网卡,一端连着网络协议栈,另一端连着用户态程序t原创 2022-04-05 09:40:18 · 7338 阅读 · 5 评论 -
Kubernetes学习笔记(四):持久化存储与安全认证
一、持久化存储容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,Kubernetes引入了Volume的概念Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下,Kubernetes通过Volume实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储。Volume的生命容器不与Pod中单个容器的生命周期相关,当原创 2022-03-12 09:56:03 · 1113 阅读 · 0 评论 -
Kubernetes学习笔记(三):Service与Ingress
一、Service详解1、Service介绍在Kubernetes中,Pod是应用程序的载体,我们可以通过Pod的IP来访问应用程序,但是Pod的IP地址不是固定的,这也就意味着不方便直接采用Pod的IP对服务进行访问为了解决这个问题,Kubernetes提供了Service资源,Service会对提供同一个服务的多个Pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的Pod服务Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服原创 2022-03-05 16:59:45 · 3587 阅读 · 0 评论 -
Kubernetes学习笔记(二):Pod控制器详解:资源元信息、ReplicaSet、Deployment、DaemonSet、Job、CronJob
1、资源元信息 Kubernetes的资源对象组成:主要包括了Spec、Status两部分。其中Spec部分用来描述期望的状态,Status部分用来描述观测到的状态Kubernetes的元数据部分。该部分主要包括了用来识别资源的标签:Label;用来描述资源的注解:Annotation;用来描述多个资源之间相互关系的OwnerReference1)、LabelLabel是Kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择Label的特点:一个La原创 2022-02-22 08:37:43 · 2207 阅读 · 0 评论 -
Kubernetes学习笔记(一):Pod详解:Pod配置、Pod生命周期、Pod调度、容器设计模式
1、Pod介绍Pod是Kubernetes进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器1)、Pod=进程组在Kubernetes里面,Pod实际上正是Kubernetes抽象出来的一个可以类比为进程组的概念由四个进程共同组成的一个应用Helloworld,在Kubernetes里面,实际上会被定义为一个拥有四个容器的Pod就是说现在有四个职责不同、相互协作的进程,需要放在容器里去运行,在Kubernet原创 2022-02-13 14:51:25 · 3643 阅读 · 1 评论 -
Kubernetes集群环境搭建&部署Dashboard
1、Kubernetes集群搭建本次环境搭建需要三台CentOS服务器(一主二从),然后在每台服务器中分别安装Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)三台主机配置信息如下:角色IP地址操作系统配置Master192.168.56.20CentOS7.5+2C2GNode1192.168.56.21CentOS7.5+2C2GNode2192.168.56.22Cen原创 2022-02-07 10:54:41 · 3064 阅读 · 1 评论 -
云原生技术公开课学习笔记:K8s网络概念及策略控制、Kubernetes Service
十、Kubernetes网络概念及策略控制1、Kubernetes基本网络模型因为容器的网络发展复杂性就在于它其实是寄生在Host网络之上的。从这个角度讲,可以把容器网络方案大体分为Underlay/Overlay两大派别:Underlay的标准是它与Host网络是同层的,从外在可见的一个特征就是它是不是使用了Host网络同样的网段、输入输出基础设备、容器的IP地址是不是需要与Host网络取得协同(来自同一个中心分配或统一划分)。这就是UnderlayOverlay不一样的地方就在于它并不需要原创 2021-01-05 08:58:36 · 761 阅读 · 0 评论 -
云原生技术公开课学习笔记:共享存储原理、健康检查、监控与日志
七、共享存储原理1、Volumes介绍1)、Pod Volumes首先来看一下Pod Volumes的使用场景:场景一:如果pod中的某一个容器在运行时异常退出,被kubelet重新拉起之后,如何保证之前容器产生的重要数据没有丢失?场景二:如果同一个pod中的多个容器想要共享数据,应该如何去做?以上两个场景,其实都可以借助Volumes来很好地解决,接下来首先看一下Pod Volumes的常见类型:本地存储,常用的有emptydir/hostpath网络存储:网络存储当前的实现方式有原创 2021-01-03 08:54:45 · 1378 阅读 · 3 评论 -
云原生技术公开课学习笔记:应用编排与管理:Job和DaemonSet、应用配置管理
五、应用编排与管理:Job和DaemonSet1、Job1)、需求来源2)、用例解读1)Job语法上图是Job最简单的一个yaml格式,这里主要新引入了一个kind叫Job,这个Job其实就是job-controller里面的一种类型。 然后metadata里面的name来指定这个Job的名称,下面spec.template里面其实就是pod的spec这里面的内容都是一样的,唯一多了两个点:第一个是restartPolicy,在Job里面可以设置Never、OnFailure、Alwa原创 2021-01-01 16:31:55 · 301 阅读 · 0 评论 -
云原生技术公开课学习笔记:应用编排与管理:核心原理、Deployment
三、应用编排与管理:核心原理1、资源元信息Kubernetes的资源对象组成:主要包括了Spec、Status两部分。其中Spec部分用来描述期望的状态,Status部分用来描述观测到的状态Kubernetes的元数据部分。该部分主要包括了用来识别资源的标签:Labels;用来描述资源的注解:Annotations;用来描述多个资源之间相互关系的OwnerReference1)、labelsLabels是一种具有标识型的Key:Value元数据。标签主要用来筛选资源和组合资源,可以使用类似于S原创 2020-12-27 15:30:07 · 3721 阅读 · 4 评论 -
云原生技术公开课学习笔记:Kubernetes核心概念、理解Pod和容器设计模式
一、Kubernetes核心概念1、Kubernetes的核心功能服务的发现与负载的均衡容器的自动装箱,我们也会把它叫做scheduling,就是调度,把一个容器放到一个集群的某一个机器上,Kubernetes会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能有一个连接Kubernetes会帮助我们去做自动化的容器的恢复。在一个集群中,经常会出现宿主机的问题或者说是OS的问题,导致容器本身的不可用,Kubernetes会自动地对这些不可用的容器进行恢复Kubernetes原创 2020-12-21 22:28:36 · 759 阅读 · 1 评论 -
K8S的架构及工作原理
1、Master和Node1)、MasterK8S中的Master是集群控制节点,负责整个集群的管理和控制在Master上运行着以下关键进程:kube-apiserver:提供了HTTP Rest接口的关键服务进程,是K8S里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程kube-controller-manager:K8S里所有资源对象的自动化控制中心,集群内各种资源C...原创 2020-03-15 20:07:14 · 27535 阅读 · 5 评论