- 博客(63)
- 收藏
- 关注

原创 大白话netfilter
背景最近在看k8s源码,读到了kube proxy,网络应该是k8s里重要的一章节,看着看着发现还是之前学的又给忘了,所以先来一波技术储备。netfilternet+filter,filter是过滤的意思,那我们从字面分析就是过滤数据包从而达到防火墙的目的。上面说netfilter位于内核空间,那也就是说netfilter在内核空间设立了一个个检测点(HOOK)。NF_IP_PRE_ROUTING刚刚进入网络层的数据包通过此点NF_IP_LOCAL_IN经路由查找后,送往本机的通过此检查点
2022-03-16 18:06:28
9963
原创 kube-prometheus+kube-thanos
本次我是打算用两个集群来搭建,一个集群安装thanos,另外一个集群安装prometheus,这个也符合真实的生产环境。当然你只是为了学习做实验也可以都放在一个集群内。如果一切正常你就可以在grafana看到如下的数据了。
2023-12-11 14:55:10
1209
原创 client-go controller-runtime kubebuilder
具体的可以边用边看,但是思路一定要理清,不然上来就用kubebuilder出了问题真的不知道发生了什么。
2023-11-10 09:05:41
998
3
原创 arm架构docker安装mysql5.7
很久没有写博客了,写一个困扰了我一个下午的问题,arm架构下docker安装mysql5.7无法启动的问题。https://github.com/biarms/mysql,这个是官方镜像的一个分支。加上–ulimit nofile=262144:262144。
2023-09-12 09:59:24
1325
原创 traefik作为istio网关
其实我在参考官方blog前也在网上看了几个文章,说实话我没太懂,可能是比较菜,但是我从那几个文章里稍微等看到他们还是在网关那里加了一个sidecar,我觉得可能没什么必要,有可能我说的不对,未来Api gateway和istio融合了我也还是喜欢现在的模式,解耦。
2023-01-05 18:28:52
661
原创 大白话之 Iptables
剩下的就是一些命令了,我就不写了,那个教程很多,用的时候自己查就好,我一般都喜欢先把框架捋清楚再去纠结细节。你可以想象成A城到B城中间有5个监测点,这五个监测点的功能不完全一样,比如监测点A有过滤功能、转发功能、美容功能,每个功能都是一个链,比如过滤功能,记录者A城的良民a可以通过、良民b拒绝,良民c直接给杀了,再比如美容功能、良民a来了给换一身漂亮的衣服,良民d来了给衣服扒光。再比如转发功能,良民a来了直接送往某个神秘的地方就是这么个事情。
2022-11-10 19:04:54
479
原创 大白话之 从netty的到gent
什么是event loop呢,中文翻译为事件循环,怎么讲呢,你雇了一个看门大爷,让他一直在门口巡逻,有事情就通知你来处理,这就是event loop,我理解把这种不断监听事件、有事件就通知别人处理(自己不处理)的工作模式就叫做event loop,比如多路复用的select,他就需要不断监听accept、read、write事件的到来,来了再通知别人处理,这种工作模式就是event loop,简单点你就理解就是一个看门大爷。另一个是 workerGroup, 用于处理与各个客户端连接的 IO 操作。
2022-10-12 16:52:49
1525
原创 大白话paxos raft
其实mutil 和 paxos已经很接近了,我这里只是说一下区别吧。最大的区别是日志Paxos的日志Raft的日志其实就是raft的日志更整齐一些,当需要重新选举leader的时候直接选择日志最完整的就可以了,但是paxos存在所谓的日志空洞,当重新选举leader的时候需要通过计算补齐一下日志。这就比raft在选择leader时候理论上慢了一些。
2022-09-26 17:49:18
550
原创 tekton+argocd 部署golang项目
这里我只是想做一个v1.0版本,后期逐步的进化。我这里是最近单的docker in docker的方式打包镜像,正确的方式可以使用sidecar的方式或者kaniko的方式后面去实现,这里直接build完推送到镜像仓库。argocd的原理就是再k8s里面有一个控制器一直监听git的变化,然后对比集群中实际的状态,所以你也要先有一个git仓库,这里就是helm的仓库。ci无非就是从 gitlab拉取代码,然后进行测试,编译,打包,然后将镜像推送到镜像仓库,最后修改helm的values.yaml。
2022-09-15 15:58:40
2858
1
原创 helm 部署golang应用
helm 其实就是一个模板引擎,就跟以前写php时候有很多模板标签会根据参数渲染成最终想要的html,而helm则是根据参数宣称成想要的k8s yaml文件,使用的模板叫做 Golang Template,里面有一些语法,根据学习的深入都会遇到,这里只是写一个最简单的入门。新增targetPort,这里的name是chart的中定义的一个name,如果想定制也可以在value.yaml中定义变量。修改镜像的地址,修改拉取镜像策略为always,修改镜像的tag。先看看nginx-ingress的ip。
2022-09-09 16:27:37
688
原创 tekton 和 Argocd的区别
Operator 会周期性地监控目标环境的实际状态,并与 Git 仓库中的期望状态进行比较,如果实际状态不符合期望状态,Operator 就会更新基础设施的实际状态以匹配期望状态。在我看来最主要的就是没有办法感知部署状态,一锤子买卖部署完就不管了,Argo CD 不仅会监控 Git 仓库中声明的期望状态,还会监控集群中应用的实际状态,并将两种状态进行对比,只要实际状态不符合期望状态,实际状态就会被修正与期望状态一致。这就真正确保了 Git 仓库中的编排文件可以作为集群状态的唯一真实来源。...
2022-08-29 18:23:33
2375
原创 大白话之golang context
还是一个请求过来,调用了服务A,服务A又调用了服务B,B又调用了C…,如果当请求调用到A、B、C还没有得到结果时就关闭了请求,那么再调用A、B、C就是没有任何意义的,那么就可以利用ctx, cancel := context.WithCancel(context.Background()),让服务A、B、C都。比如一个请求过来后,调用了服务A,服务A又调用了服务B,B又调用了C…监听ctx.done(), 当在请求调用cancel()时,A、B、C服务看到请求取消了调用,就不在继续执行,省的浪费资源。...
2022-08-11 18:29:51
472
原创 大白话reactor
有一个东西叫io模型、还一个东西叫线程模型。io主要讲的是通过多路复用技术通过一个进程或者线程接受成千上万请求,你接受到了请求怎么处理就是我们今天聊到的线程模型。你到底是只有一个进程/线程,还是多个进程/线程就看你自己的。reactor叫反应堆,还一个外号叫dispatcher。dispatcher分配的意思,分配什么啊?当然是你有事件来了我给你分配啊,这里的事件不就是io请求么,通过多路复用来了一个io事件,我给你分配一个方法处理一下。说白了就是又当爹又当妈,爹妈是一个进程,通过select获取到事件后
2022-07-07 16:10:47
332
原创 大白话高并发(二)
这是三高专题的第二篇,我想了很久应该怎么去串联这个专题,后来我觉得就按照流量的方向来聊吧,从用户请求到服务端再到用户。我们一台服务器能承受住200万个请求么?答,可以,但是有条件只能是三次握手后的空链接,我们知道linux中一切皆文件,因此一个请求对一个linux来说也是一个文件fd,那只要我的linux文件数量足够大就可以接收200万个请求,一个请求默认为4k,200w * 4k 不过8M左右的内存是没有问题的,但是前提这些都是空链接,如果客户端发送了大量的数据到服务端,服务端又需要通过做cpu做大量的计
2022-07-05 17:58:29
2062
原创 大白话高并发(一)
虽然日常curd boy,但是也要有点追求,没有场景我们自己造场景,那我就定一个200万并发秒杀的场景吧。就是来了多少人啊,比如618,xxx直播间某件商品有100万人秒杀,那并发量就100万,但是不是说你来了100万我就能同一时间全给你处理了,咱们可以10万10万的处理。吞吐量是单位时间内系统处理客户请求的数量。说白了就是1秒内能处理多少。在并发量较低的情况下,吞吐量与并发量成正比,此时后台处理能力充足。当并发量到达一定的数量后,服务器处理能力不足(线程切换),吞吐量反而降低。比如刚开始并发是10个,每个
2022-06-23 12:59:34
1422
原创 从零单排冲kubebuilder(二)
背景总觉干什么事要把基础打好,尤其是k8s,概念多,杂,而且国内真的把这玩意玩的特别透彻的感觉人也不多,更多的还是使用层面。下面说一说几个关键词,这在后面会经常提起。关键词GET /api/v1/namespaces/test/pods---200 OKContent-Type: application/json{ "kind": "PodList", "apiVersion": "v1", "metadata": {"resourceVersion":"10245"}, "
2022-05-22 00:30:38
289
原创 从零单排冲kubebuilder(一)
背景一直觉得这种脚手架的东西虽然方便,但是不好掌握它,调教它,归根结底还是不够了解,因此打算从最基础开始了解kubebuilder。解决什么事?首先你想使用一个东西前你肯定要知道这东西帮你解决什么事。那现在就是有这么一个需求。说开发同学不太懂k8s,最好的办法就是开发扔给k8s一个yaml,直接就来一个全套,什么pod、ingress、pvc全给你一条龙弄好,应用直接就跑了起来。相当于有一个中间人他读懂了开发扔过来的yaml并根据yaml的要求去工作。需要什么?想要完成这件事,首先我要一个中间人。
2022-05-10 13:54:05
202
原创 k8s flannel
flannel网络总结一下啊,其实就是三层网络,flannel就是路由器,cni0网桥就是交换机,flannel.1他的作用就是和其他的节点通信,每个节点容器的ip都绑定到网桥cni0上,但是如何给每个容器分配ip呢?如何创建cni0网桥呢?如何让k8s知道容器的信息等等?交给一个cni插件来做,这个插件不行就换一个插件,插来插去的总能行,说白了就是解放你的双手,让你的双手做去做别的。。。...
2022-04-07 12:54:30
626
2
原创 大白话LVS之DR背地里的事
背景一直对lvs的dr模式模模糊糊,感觉似懂非懂的感觉,那今天就扒开他。ARPARP是地址解析协议(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。简单点就是根据ip获取mac地址。步骤如下(1)主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-(2)主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192
2022-03-17 21:30:08
176
原创 golang channel到底好在哪?
背景我们公司总是在推golang,最扯淡的一个同事回答说因为公司都在用所以用,你可以用,但我觉得语言是最没有价值的,最重要的是你要知道他解决了什么事。并发编程1并发编程的痛点问:并发会引发什么?答:并发会引发线程安全。问:为什么会引发线程安全?答:原子性,可见性,有序性。问:具体说说,原子性,可见性,有序性?答:原子性是因为线程切换导致,可见性是共享变量,有序性是因为指令重排序。问:再具体点?答:cnm。。。大白话翻译一下:说白了就是一夫多妻制引发的惨案,一夫是要共享给多个妻的,所
2022-03-10 12:26:01
267
原创 大白话之istio gateway、virtual service 、destination rule
老王开了一家家娱乐场所,天上人间,为了气派老王花重金百万打造了一个青铜大门istio-ingressgateway 类似一个nginx。这么气派的大门必须找两个180以上的保安gateway看门,保安的指责比较的简单明了,按摩(anmo.com)的放进来,洗浴(xiyu.com)的放进来,白嫖(baipiao.com)的请出去。在这里插入代码片迷茫的客人进来后需要有指路人,大堂经理virtual service客客气气的安排着。每个客人都有自己喜欢的技师,以前k8s的service不支持客户挑选技师
2021-12-21 15:23:54
4061
7
原创 k8s ingress、istio网关
k8s ingressingress 三大组件1负载均衡器nginx,Haproxy之类的2ingress controllerngress Controller实质上可以理解为是个监视器,Ingress Controller通过不断地跟Kubernetes API打交道,实时的感知后端Service、Pod等变化,然后更新反向代理负载均衡器。3ingress配置文件,哪个域名对应哪个服务。apiVersion: extensions/v1beta1kind: Ingressmetad
2021-12-16 18:33:42
7909
原创 大白话 同步阻塞、同步非阻塞、异步非阻塞
同步阻塞(屌丝)我去找小丽、小丽在忙,我就一直等着、直到她忙完了我再把她接走同步非阻塞(玩家)我去找小丽、小丽在忙,我不等着、等她忙完了给我发信息,我再把她接走异步非阻塞(超级玩家)别管小丽忙不忙,我一个电话过去他就自己上门服务总结同步异步说的是地位,同步您就屁颠颠给人接走,异步您就在家舒舒服服躺着人自己屁颠颠过来。对比文件io,同步您就自己拷贝过来,异步人家给你把文件放好。阻塞不阻塞说的是态度,阻塞您就傻傻的等着,不阻塞您先忙您的一会再来。对比文件io,阻塞没数据的时候您就那傻等着,非阻塞
2021-11-23 18:11:29
358
原创 大白话 k8s UserAccount ServiceAccount RBAC之间的关系
账户类型User Account(用户账户)Service Account(服务账户)User Account是为人设计的,而Service Account则是为Pod中的进程调用Kubernetes API而设计。大白话,k8s就是一个会所,User Account就是你能不能进会所的凭证,光进会所没用,Service Account是你能不能获取服务的凭证, 你到底能获取什么服务呢?这就要将Service Account 和 rbac进行绑定了。会所有很多的角色role,大玩家,超级大玩家,顶.
2021-10-28 11:40:11
803
原创 大白话之tekton
我很喜欢tekton的logo,我决定用它的原因不是因为他是谷歌的亲儿子,单纯因为和我家柴犬长得很像。流水线在计算机中,流水线是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术,也叫 Pipeline。由于这种工作方式与工厂中的生产流水线十分相似, 因此也被称为流水线技术。从本质上讲,流水线技术是一种时间并行技术。基本概念Tekton 最主要的四个概念为:Task、TaskRun、Pipeline 以及 PipelineRun。Task: Task 为构建任务,是 .
2021-10-27 15:49:13
283
原创 rancher rook-ceph踩坑之旅
安装参考官方文档就行说几个踩的坑:sudo yum install -y lvm2All nodes with available raw devices will be used for the Ceph cluster. At least three nodes are required,这个很重要!我在安装zookeeper的时候就会报莫名其妙的错误,https://github.com/ceph/ceph-csi/issues/1881,我当时用的两个node节点,可能是脑裂了,暂时也不知道
2021-09-17 18:21:34
379
原创 golang rpc protobuf protorpc
原生rpc参考:https://geektutu.com/post/quick-go-rpc.htmlserver.go// server/main.gopackage mainimport ( "log" "net/http" "net/rpc")type Result struct { Num, Ans int}type Cal intfunc (cal *Cal) Square(num int, result *Result) error { result.Nu
2021-08-04 20:59:59
492
原创 golang实现时间轮
什么是时间轮看一下 https://zhuanlan.zhihu.com/p/121483218写的非常清楚。延迟队列DelayQueue如果看完上面,会发现博主在最后提到了延迟队列DelayQueue,DelayQueue使用最小堆实现,把队列里的元素按照过期时间排序。然后开一个协程死循环与队列第一个元素比较。golang实现DelayQueue实现延迟队列DelayQueue要先实现一个优先队列PriorityQueue,PriorityQueue的作用是使用最小堆来找到过期时间最近的元素。
2021-07-15 12:26:47
2277
原创 如何写一个开源的golang项目并使用
自己写了一个golang web、rpc框架,未来想做成一个微服务,公司内部使用,地址https://github.com/yanchendage/ty。把代码提交到github打taggit tag v0.0.2push taggit push origin v0.0.2go get 代码地址go get github.com/yanchendage/ty如果你更新了代码库需要重复2、3并且在go get时加入 -u参数go get -u github.com/yanchendage/
2021-07-06 18:08:53
208
原创 golang arr slice map
数组:1. 声明 var arr [5]int 2. 字面量 arr := [5]int{1,2,3,4,5}slice1. 声明 var slice []int 这是一个空切片 nil2.字面量(常用) silce :=[]int{1,2,3,4,5}3.make(常用) slice := make([]int,len,cap) slice := make([]int,5) slice := make([]int,3,5)map1. 声明 var m map[int]
2021-06-10 11:46:35
153
原创 Failed to start Docker Application Container Engine.
docker.service failed.docker.service holdoff time over, scheduling restart.Stopped Docker Application Container Engine.start request repeated too quickly for docker.serviceFailed to start Docker Application Container Engine.Unit docker.service entered
2021-05-27 14:58:36
158
原创 kubeadm安装k8s 1.18.0
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署:# 创建一个 Master 节点$ kubeadm init# 将一个 Node 节点加入到当前集群中$ kubeadm join <Master节点的IP和端口 >1. 安装要求在开始之前,部署Kubernetes集群机器需要满足以下几个条件:一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2
2021-05-27 12:40:14
451
原创 helm bitnami/redis nodeport模式之坑
集群模式本来想用集群模式redis-cluster,但是无奈发现cluster没有nodeport模式,所以放弃!如果你找到了请告诉我helm install -n lt-redis redis bitnami/redis-cluster --set persistence.storageClass=managed-nfs-storage --set cluster.externalAccess.enabled=true --set cluster.externalAccess.service.ty
2021-04-26 18:42:31
1607
1
原创 helm3 安装kafka、zookeeper
前提你要安装helm3helm pull bitnami/kafkahelm pull bitnami/zookeeper安装zookeeperhelm install -n lt-zoo zookeeper bitnami/zookeeper --set persistence.storageClass=managed-nfs-storage,persistence.size=1Gi,replicaCount=2注意persistence.storageClass 换成你自己的storage
2021-04-22 14:52:20
1176
1
原创 helm踩坑日记
1Error: create: failed to create: Secret “sh.helm.release.v1.ltCar.v1” is invalid: metadata.name: Invalid value: “sh.helm.release.v1.ltCar.v1”: a DNS-1123 subdomain must consist of lower case alphanumeric characters, ‘-’ or ‘.’, and must start and end with
2021-04-21 11:30:56
2370
原创 大白话golang context
什么是context知乎了一下https://www.zhihu.com/question/26387327找到两个比较通俗易懂的答案一般来说是想要有个object来保存状态,想不出好的名字然后就叫context了说白了,把一堆有用的状态信息放一起这两个大佬看样子想表达的意思是一样的,context等于保存状态的object举个例子,小明和小张去面试,面试官拿着他们的简历,先面试小明面试官就拿出来小明的简历,简历上写着小明的各种信息这就是小明的上下文,该面试小张了,面试官拿出来小张的简历,
2021-04-19 16:20:37
128
原创 大白话系列之mmap
mmap英文是memory map,百度百科为再看一下linux man在看一下mmap(2),说明它是一个系统调用我们来分析这句话,“分配内存,或映射文件或设备到内存”,可以看到解释的很清楚。第一步先分配一个内存第二步,映射文件或设备到刚才分配的内存。有什么用呢?...
2021-04-15 11:26:33
291
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人