- 博客(77)
- 问答 (3)
- 收藏
- 关注
原创 Redis设计与实现知识点总结
前序极力推荐《Redis设计与实现》这本书,文字易懂,知识点明确。是深入学习Redis的一把利器。本系列是通过阅读此书后的一些总结,会大量使用里面的语句,目的是为了将来的复习使用。Redis设计与实现知识点总结-存储结构Redis设计与实现知识点总结-过期时间Redis设计与实现知识点总结-持久化Redis设计与实现知识点总结-事件Redis设计与实现知识点总结-Redis客户端和服务器Redis设计与实现知识点总结-主从复制Redis设计与实现知识点总结-SentinelRedis设计
2021-03-21 12:34:51 114
原创 docker代理镜像
参考 https://blog.csdn.net/dm_changping/article/details/125258719。代理命令:docker pull gcr.dockerproxy.com/username/image:tag。官方命令:docker pull gcr.io/username/image:tag。
2023-02-10 09:11:41 1311 1
原创 K8s-存储原理说明
K8s存储主要是封装了对存储组件的细节,让我们可以通过pvc,pv操控就可以对存储进行管理。下面我们开始分析在k8s中是如何实现存储组件处理逻辑的。
2023-02-03 14:28:26 736
原创 kubelet源码分析-启动
上一章节中我们了解到kubelet每个组件的作用与创建原理,那么在本章节中我们就一起看一下它是如何对每个组件进行启动的,组件与组件之间是如何进行相互作用的。initializeModules 是对imagesManager 的管理,会每5分钟更新一次镜像缓存,并删除应该删除的镜像kl.volumeManager.Run(kl.sourcesReady, wait.NeverStop) 监听pod ,当新pod触发事件后,会获取里面的容器卷配置然后进行attch与mount操作syncNodeStat
2022-12-06 15:45:00 470
原创 kubelet源码分析-创建
kubelet是k8s单独部署的应用,它是一个节点的监视器,管理器。 我们操作的所有资源信息最后的最后都是由kubelet呈现出来的,比如创建pod。所以它是k8s的核心(我认为)。![image.png](https://img-blog.csdnimg.cn/img_convert/f434af953e0b87be12f27be40ddf1509.png#clientId=u5956da4a-678f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=43
2022-12-06 11:23:20 1002
原创 kubelet存储插件初入
最初的存储插件都需要集成到k8s内部去使用,也就是编译并随核心 kubernetes 二进制文件一起提供。这意味着,如果他们希望添加对新存储系统的支持,则需要存储提供商将其签入核心 k8s 代码库。为了对其进行解耦,所以采用Out-tree模式开发了Flexvolume。
2022-12-02 16:53:09 514
原创 容器卷挂载的秘密
数据卷 (Data Volumes )是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于 Linux 中的 mount 行为。
2022-11-25 16:05:06 1048
原创 Istio-智能DNS
在k8s中,我们可以使用..svc.cluster.local的方式对服务直接访问,该原理是在集群中部署一个kubeDNS,然后修改为默认的DNS服务器!
2022-10-24 11:08:16 949
原创 Istio-sidecar注入原理
Istio的一个亮点就是为每个应用自动添加代理程序,并且采用无代码侵入的方式,这样的好处是,代理与应用进行解耦。
2022-10-18 10:29:32 633
原创 OpenTelemetry-go的SDK使用方法
2019年5月,OpenCensus 和 OpenTracing形成了 OpenTelemetry(简称 OTel)也就是说,我们在使用链路追踪SDK的时候就需要使用OpenTelemetry的新规范.OpenTelemetry帮我们实现了相应语言的SDK,所以我们只需要进行调用即可.接下来,我们开始对go所对应的SDK进行使用.本文主要根据官方文档实例进行讲解.
2022-09-21 11:26:53 3351
原创 istio-k8singress使用istio-ingressgateway实战
k8singress可以被istio中的ingressgateway使用,其原理是,istiod会将ingress资源转换成gateway与virtualservice资源(这两个是istio中的资源).到这里k8s原生ingress暴露实战就结束了,想必还有一个大大的疑问,为什么它监听的是8080端口,为什么不是8082端口或者80端口那?通过上面的信息,我们能够了解到port为80端口,targetPort为8080,当我们创建完上面的资源后,我们可以使用命令查看生成的监听端口信息。
2022-08-24 15:03:03 1353
原创 Istio服务发现-资源事件
通过前面几篇文章,我们已经知道了istio服务注册的一个大体流程,但是对于每个资源在变动的时候是如何进行处理的,比如创建一个k8s原生service,istio在监听到事件后该怎么处理,是否需要对其进行转换然后推送到envoy中?让我们带着这些疑问开始对istio中的资源事件进行一一分析....
2022-08-10 10:18:37 851
原创 Istio-PilotAgent源码分析
至此agnet流程分析结束,本文还有主要分析了证书的使用,对于status判断,审计,日志等没有进行分析.本文感觉agent的配置有些混乱有些用法重复.可能有同学观察到,SDSserver中有xdsserver,它与xdsproxy有什么不一样的地方嘛?...
2022-07-29 13:38:42 1053
原创 Istio-PilotDiscovery服务的启动
istio的代码有些绕,主要表现在handler,它会时不时add一下,所以最后都不知道handler具体调用了哪些.本文对增量更新与全量更新没有分析,能力有限!
2022-07-25 17:21:47 641
原创 Istio-PilotDiscovery服务的创建
info在本文中,将对pilotDiscovery服务创建流程进行源码分析具体代码注释请移至pilot-discovery是istio的注册发现中心,可以说它相当于k8s中的kube-apiserver与协调各个组件,相当于指挥部的存在.那么它具体有什么功能那?让我们来罗列一下(内容可能不全,还请补充)我们可以看到返回值是一个Server结构体,它包含了整个discovery运行过程中所需要的服务,配置信息,那么就让我们看一下它都有哪些属性!.........
2022-07-18 16:55:23 704
原创 Istio-配置规则监听分发原理
我们对于istio的操作基本上都是通过修改CRD资源来进行实现,无论是istio服务的配置(istiooperators.install.istio.io) 还是流量规则(virtualservices、serviceentries…)接下来让我们走进源码去看看istio对资源是如何进行监听、转换并推送给envoy的.下面是创建virtualservices资源后,istio对其进行响应流程图.:::infoistio中的规则资源对应envoy中的配置是一对多的关系,也就是说istio中的一个规则
2022-07-14 16:36:58 700
原创 Envoy学习笔记
根据上面的流程图,我们开始对每个模块进行详解。在讲解之间,我们先了解一下他们的基本意思:支持以下 v3 xDS 资源类型:typeURL的概念 出现在下面,并采用以下形式——例如, 对于资源。在来自 Envoy 的各种请求和管理服务器的响应中,都说明了资源类型 URL。type.googleapis.com/type.googleapis.com/envoy.config.cluster.v3.ClusterCluster比如 type.googleapis.com/envoy.extensions.fi
2022-07-11 15:16:59 1245
原创 istio系列:第六章-Telemetry遥测配置
遥测配置可以对mesh网络流量追踪量进行配置,可以过滤特定的应用,可以对遥测后的数据标签进行添加和修改,可以根据选择器禁用某个应用的遥测功能。注意:如果配置命名空间为istio-system,那么使用与所有的命名空间。该命名空间称之为父配置,如果配置中的信息与父配置的信息重叠则优先使用配置中的信息。接下来直接上结构体进行讲解接下来我们一一讲解tracing可以进行配置采样率,过滤工作负载,指定报告发送插件比如zipkin-alternate。Match配置在流量经过应用的何种方向时使用遥测策略有三种方
2022-07-06 15:52:29 743
原创 Istio资源修改流程源码分析
在使用过程中,注册中心一般都使用k8s,那么对于istio中的资源是如何进行管理的那?下面让我们一一探索基于K8s的云原生软件最大的特点就是采用CRD的方式将配置注入到K8s中,istio也不例外,比如VirtualService、DestinationRule等。istio对路由规则等实现的原理是,监听K8s中的CRD资源,将其转化为Envoy能够识别的配置信息,发送给envoy这样就能实现路由转发等一系列功能。接下来让我们进入源码阶段进行一一探索该方法由NewServer()->initControll
2022-07-04 17:26:04 377
原创 istio系列:第六章-Sidecar代理规则配置
在前面我们学习了流量的转发、过滤等规则,但是这些都是根据host、客户端请求维度对流量进行管理的,在istio1.1版本以后,添加了新的规则Sidecar,该规则在Sidecar的维度对请求进行管理,接下来就让我们看看它到底是什么吧!有一个Sidecar资源时1.1版本后添加的,用来配置Sidecar组件中的规则。另一个是Sidecar组件,由envoy实现,这里希望不要弄混说白了就是,在Sidecar组件上配置一些规则,比如可以设置某个host下的端口为3302的请求全部允许转发,这就相当于,我们配置路由
2022-06-27 09:56:37 1043
原创 istio系列:第五章-ServiceEntry内到外的通讯配置
在isito中,我们一般都是通过服务名去注册中心寻找服务,原理类似于springcloud中的nacos。对于服务注册一般都是采用自动发现与注册的方式,但是istio提供了ServiceEntry资源让我们可以手动对服务进行注册。在这里我们想到了一个问题就是那可不可以将外部服务也注册到istio中去哪?答案是可以。接下来就让我们了解一下ServiceEntry的各个属性Hosts定义服务名称,可以是DNS、前缀模糊匹配,用于virtual service中的host等使用表示与服务关联的虚拟IP地址,可
2022-06-24 10:42:57 812
原创 istio系列:番外二 内网到外网访问配置实例
上一篇番外我们讲解了外网到内网的访问问题,这节让我们掌握一下内网访问外网。为了方便请求,我们采用gateway的方式先请求内网、内网服务再请求外网服务的流程向注册中心注册外部服务,让路由规则等可以像使用内部服务那样使用外部服务number为向注册中心注册的端口号,targetPort为向www.baidu.com请求的端口号这里我们可以看到number配置为8083,含义是请求www.baidu.com这个服务的8083端口这样就完成了一个外网到内网、内网又访问外网的请求。......
2022-06-24 10:42:15 490
原创 istio系列:番外一 外网到内网访问配置实例
由于istio使用envoy进行流量转发、控制的操作,服务A访问服务B时,A将数据发出,Envoy拦截然后根据规则进行转发到B服务,B服务上的Envoy拦截判断然后发送给B。从这里我们可以看到Envoy在通讯中起到了巨大的作用,但是我们想象一下如果一个服务没有Envoy那又该怎么样与有Envoy的服务进行通讯那?在istio中,给我们创建了两个服务,IngressGateway与EgressGateway,这两个服务就是用来完成外部到内部、内部到外部访问的功能。接下来让我们讲解一下IngressGatewa
2022-06-23 13:43:40 741
原创 istio系列:第四章-Ingress网关配置
在istio中,同注入pod之间通讯是通过envoy进行路由的,但是普通pod与istio.pod、外网与istio.pod之间的通讯,有该如何进行那?如果使用k8s原生的service可以进行通讯,但是就无法使用istio中的路由转发、流量限制等功能。那么我们既想可以外网访问又可以使用istio中的功能,该怎么办那?Gatway解决了这个问题。Gatway的原理与ingress基本类似,都是在内部部署了一个类似于nginx的组件,解析请求hosts然后转发到POD上。接下来让我们看一下它的具体配置结构S
2022-06-22 17:42:38 2342 2
原创 istio系列:第三章-目的地规则
下面是DestinationRule的具体属性让我们对属性一一分析服务注册表中的服务名称应用的流量策略(负载平衡策略、连接池大小、异常值检测)我们重点关注前两个属性对于负载均衡里的LoadBalancerSettings_Simple有以下集中策略对于LoadBalancerSettings_ConsistentHashLB要复杂一些可以使用基于一致性哈希的负载均衡来提供软基于 HTTP 标头、cookie 或其他的会话亲和性特性。对于LocalityLbSetting来说,我们可以设置错误转移策略
2022-06-21 14:35:56 429
原创 istio系列:第二章-流量路由转发配置详解
下面是VirtualService.yaml对应的结构体接下来让我们细细讲解每个属性的作用标明目的地址,可以是IP、DNS也可以是短域名、服务名(仅用于k8s) 例如reviews(短域名)、reviews.default.svc.cluster.local。对于短域名来说,VirtualService会自动添加后面的服务信息,比如添加命名空间。注意:VirtualService 的 hosts 的短域名填充到的完整域名时,补齐的 Namespace 是VirtualService的Namespace
2022-06-20 16:25:13 1519
原创 istio系列:第一章-核心概念与原理
istio是一个产品,那么这个产品肯定提供了一些功能让用户使用。因为Istio与k8s的高度结合,所以对于这些功能的使用,采用了CRD的方式。用户只需要创建相应的规则资源,istio监听到资源后会进行一些系列的操作比如创建一个路由规则VirtualService,istio监听到该资源后,会将规则解析成Sidecar识别的配置,然后推送给POD中的Sidecar。接下来让我们对Sidecar进行讲解。Sidecar存在于每个POD当中,它有两种安装方式,一种是通过istioctl命令行工具手动注入,另一种是
2022-06-17 16:26:30 505
原创 Kube-Scheduler配置与源码分析
在kubernetes中,组件的配置文件格式都推荐使用yaml格式,scheduler也不例外。下面是scheduler启动时所需要的全局配置类。源码分析请牢记上面的配置信息,这样便于在阅读代码时知其所以然。在启动时,第一步必然是对配置信息进行解析,校验,填充等工作。我们重点关注newDefaultComponentConfig(),该方法会创建KubeSchedulerConfiguration类以及对其进行初始化操作,该操作会创建只是指定了调度器的名称,但是通过该名称就可以检索出需要的调度
2022-06-13 17:00:19 702
原创 Gorm查询原理与注意事项
##Gorm使用手册连接数据库对于数据库的操作肯定第一步就是连接它了让我们先进行一个简单的查询操作这里使用了Debug() 它的作用是将使用的SQL语句打印出来。Model方法的作用是标识结果集的类型。在传统业务中,查询操作占了大多数,所以我们开始对查询操作进行探究。对于简单的语句调用请访问https://gorm.io/zh_CN/docs/query.html接下来讲解几个常用的方法SQL生成原理对于sql的生成,比较简单,我们调用的Where()还是Select()都实现type Expr
2022-06-09 17:09:54 4126
原创 golang-jwt使用
1.在使用之前我们应该对它进行安装与导入2.既然导入成功那就开始使用吧3.逐步讲解首先我们先查看第一步newWithClaims会返回一个Token结构体,而这个token结构体有以下属性我们可以通过该结构体获取到加密后的字符串信息。接下来我们需要讲解一下Claims该结构体存储了token字符串的超时时间等信息以及在解析时的Token校验工作。就是一个map集合,但是它实现了上面Valid()方法,该方法里面实现了对token过期日期校验、发布时间、生效时间的校验工作。所以在map里面有三个固
2022-06-07 11:01:10 3968
原创 Protoc与GRPC的使用
Protobuf与GRPC安装https://github.com/protocolbuffers/protobuf/releases已经有构建好的运行文件,可以下载压缩包在bin/目录下找到,如果想自己构建请访问https://github.com/protocolbuffers/protobuf/blob/main/src/README.md安装完成后运行protoc --version查看是否成功。protoc作用是将.proto文件转换,至于转换成什么语言需要我们指定参数,比如Go语言需要
2022-05-27 14:54:34 4638
原创 Go使用Etcd
Go使用Etcdclientv3.New(clientv3.Config{})创建etcd客户端,在使用etcd客户端中具体操作与配置与etcdctl中的指令,参数类似,所以非常容易理解每个配置的含义。cli, err := clientv3.New(clientv3.Config{})下面将讲解一下clientv3.Config类type Config struct { // 配置etcd ip Endpoints []string `json:"endpoints"` //
2022-05-25 17:17:43 1790
原创 etcdctl使用手册
etcdctl使用手册我们通过 etcdctl -help可以查看etcd客户端的一些指令与参数,下面让我们分析使用方式COMMANDS基本运行命令主要功能有,创建键、删除键、更新、监视等getetcdctl get [options] [range_end]etcdctl --endpoints=$ENDPOINTS get web例子意思为获取键位web的值–prefix 前缀匹配键来查询值 (比如 key有web1,web2,web3,那么可以get web --prefix)
2022-05-25 14:52:54 2184
原创 KubeApiserver源码分析
KubeApiserver流程分析kube-apiserver底层原理使用go-restful框架对路径进行映射,然后通过etcd客户端对etcd进行请求。我们需要注意kube-apiserver的几个功能:TLS认证、权限验证、webhook。kube-apiserver使用http2.0作为传输协议所以对请求进行采用TLS认证,在认证完成后会通过类似于过滤链的形式对请求进行调用。接下来让我们先看一下kube-apiserver是如何创建go-restful以及添加资源映射的。//创建go-re
2022-05-24 17:06:09 348
空空如也
iptables对于响应的处理是怎么走向的
2022-10-20
kubernetes apiserver版本转换,内部版本并不是internal
2022-08-31
iptables从postrouting出来后的操作
2022-07-05
kubelet 单独启动失败
2022-03-21
mysql源码编译报 Regular expression
2021-04-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人