自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(18)
  • 收藏
  • 关注

原创 对flannel实现的overlay网络以及iproute2

这是它的源码,没有思路直接看源码是徒劳无效的,所以先搞清楚flannel背后的设计思路以及相关的其他一些理论知识点。1、动态路由,如果是一个小网络,比如一家公司,几百号人,隔离出三五个、十来个网段,那么直接在路由器上配置静态路由就行了,大不了网管员辛苦一些,手动telnet到路由器上,敲命令,把一条一条路由规则敲进去呗,但是网络大了以后,或者说网络调整比较频繁的时候,靠人手动敲命令就不现实了,此时动态路由登场,比如OSPF,BGP,每个路由器只需要知道自己连着哪些网段即可,然后路由器之间交换信息,...

2021-09-22 11:33:26 455

原创 ip netns命令和veth pair

vethpair的思路很重要,本身ip netnsadd net1、ipnetns add net2,这个创建网络命名空间是很简单的,让不同的docker容器都关联到不同的netns,就实现了网络的隔离。但是同一个物理主机上的docker容器IP地址不一样,分属不同的netns,怎么互相通信,就要靠veth,ip link add type veth这个命令就是创建vethpair的,一对嘛[root@localhost ~]# ip link add type veth[root@lo...

2021-09-21 15:46:12 1118

原创 使用netlink golang库操作linux网络,控制内核行为

GitHub - vishvananda/netlink: Simple netlink library for go.netlink:1.添加删除网络接口,就是eth0、eth12.配置IP地址和路由3.配置ipsec这个netlink库被flannel使用了,forkfromhttps://github.com/docker-archive/libcontainer要学习好docker网络,这个libcontainer要好好学习的。https://github....

2021-09-21 15:32:47 3675

原创 Kubersphere安装好以后使用的是calico网络插件,兼容CNI

这玩意怎么理解?目的是:1、让跨主机的POD互通2、必须高效,但是背后的实现机制还要简单,不要搞的太复杂,比如隧道、比如vxlan、比如linuxbridge、veth等,好多一大堆的东西,理解起来很费劲,整个链路很长,理解就难Calico网络模型主要工作组件:1.Felix:运行在每一台 Host 的 agent 进程,主要负责网络接口管理和监听、路由、ARP 管理、ACL 管理和同步、状态上报等。2.etcd:分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态.

2021-09-17 17:34:22 540

原创 http2究竟何方神圣?大白话总结

http1.1的弱点http2的优点1.不再像http1那样用字符串的方式来传送数据,而是直接用二进制的方式打包成帧这句话很多书或者博客都是这样写,其实根本就没有点透,比如你说http1.1是用字符串的方式传递数据,那么就算是字符串,真正到了底层,通过网卡、通过以太网水晶头网线,通过wifi射频信号,那特么不还是高低电平二进制嘛,怎么就说http2是二进制方式打包呢?本质上是这样的,字符串确实在http1.1中也是二进制发送出去,但是呢,要看是怎么样的编码方式,举个最简单的例子,比如要.

2021-09-16 22:11:36 153

原创 golang里面的select是专门用来检测通道上能否写入、能否读取数据的机制

select { case <-chan1: // 如果chan1成功读到数据,则进行该case处理语句 case chan2 <- 1: // 如果成功向chan2写入数据,则进行该case处理语句 default: // 如果上面都没有成功,则进入default处理流程 }*/只要是想要在多个通道上读取或者写入数据,就用select,但是注意,select和switch-case是一样的,整个select代码段只执行一次,比如下面的代码段,jobChan和resu..

2021-09-16 17:27:46 623

原创 实际案例解读golang的context机制

一些处理http请求的库,或者涉及到网络IO的库比如rpc的库,都会涉及到golang里面的context,这玩意究竟干啥的?在golang源码包中src/context/context.go中,一共也没几个方法,核心就是WithXXXX函数和Context接口type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error

2021-09-16 13:48:10 574

原创 golang的reflect包

1.判断任意一个interface{}对象的类型kind := reflect.TypeOf(nic).Kind()// TypeOf returns the reflection Type that represents the dynamic type of i.// If i is a nil interface value, TypeOf returns nil.func TypeOf(i interface{}) Type { eface := *(*emptyInterfac.

2021-09-15 17:38:46 413

原创 golang里面的枚举值进行或操作后,如何实现它的String()方法?

参考了一些代码,研究了一下,我们举出一个实际的例子,用网卡的属性来做枚举演示,一个网卡可以有up状态、广播状态、本地loopback状态、点对点pointToPoint、multicast多播状态,一共5个,当然了,还可以定义更多,比如down状态等等golang本身并没有enum关键字,没有办法直接声明一个枚举类型,但是枚举肯定是必须要的,枚举在写程序的时候还是很方便的,而且可以起到编译期检查的作用,比如你用一个int作为参数,和用一个枚举作为参数传递进去,用枚举的话,直接编译器就可以检查参数的合法性

2021-09-15 10:19:05 1624

原创 创建Deployment时指定hostnetwork是干啥的?

注意看spec.hostNetwork =true这个是干啥的?apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: nginxspec: template: metadata: labels: app: nginx spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet c..

2021-09-14 10:30:54 3491

原创 自己搭建的k8s集群,怎么做负载均衡?

nginx天然是做反向代理的,https://porterlb.io/zh/,这个是KubeSphere提供的LB,

2021-09-14 09:47:53 4431

原创 记录一下docker network命令和macvlan技术

docker network lsNETWORK ID NAME DRIVER SCOPE6dbe26dc7d0c bridge bridge local581ad0a5ce75 host host local0a451b66cef2 none null local[root@linux4 andycui]# docker network inspect bridge[ { "Na.

2021-09-13 14:20:41 795

原创 Keepalived + HAproxy实现HA

Keepalived 提供 VRPP 实现,并允许您配置 Linux 机器使负载均衡,预防单点故障。HAProxy 提供可靠、高性能的负载均衡,能与 Keepalived 完美配合yum install keepalived haproxy psmisc -y配置HAProxyvi /etc/haproxy/haproxy.cfgglobal log /dev/log local0 warning chroot /var/lib/haproxy ...

2021-09-10 17:27:12 169

原创 多机对象存储的实现机制

特点:1.多机同时运行2.当客户端提交一个大文件的时候,服务端要判断这个文件的大小,然后把这个文件分割,并执行一些调度逻辑,假设分成4份,调度逻辑要调度出这份文件的4个子集,分别应该放到哪个具体的data-server上,并向客户端返回这4个data-server的IP地址3.服务端记录下这个文件和这4个dataserver的对应关系,这些就叫元数据,比如类似这样的结构化形式:id、filename、storage_path、total_size、splits、data_servers...

2021-09-10 13:57:52 245

原创 SSL和TLS

1、现在都是tls,ssl已经退出历史舞台2、x509是一套标准,就是一些规范文件,主要是说明一个tls证书里面应该包含哪些东西,x509并不是什么具体的实现3、csr,证书请求文件,是一个具体的文件,不是证书也不是公钥,也不是私钥,它是公钥和一些组织结构信息的综合体,把这个csr给CA公司,CA公司用这个csr制作出证书,所以CRS文件不是证书,它只不过是一个申请文件,本质上它和你写一个入党申请书,是一回事,它就是一个申请书4、说到证书,都是包含2份文件:一个是后缀是crt或者cer结尾的证书

2021-09-10 09:48:08 214

原创 K8S之StatefulSet是个什么玩意?

大家都喜欢无状态的应用,因为存在随意停止、负载均衡,扩容、缩容等巨大优点,但是世界没有那么美好,都是无状态,那数据存放在哪里?所以和Deployment差不多,K8S又搞了一个kind: StatefulSet来帮忙保存应用程序的数据,本质上在K8S上跑的是容器,容器本质是操作系统的进程,进程产生的数据就要保存下来,但是呢,因为K8S里面把容器又用POD包了一层,而POD是随时可能在集群的物理节点上漂移的。如果我们让POD(也就是指POD里面的容器进程)的数据存放在它所在的物理主机,那么必然当漂移的

2021-09-09 14:52:21 426 1

原创 Kubernetes从私有镜像仓库拉取镜像创建POD

使用的是Kubersphere可视化管理工具,所以比起在命令行下面敲命令要方便不少。通过图形化界面生成的Secret密钥对象Yaml文件如下,核心是type: kubernetes.io/dockerconfigjson以及kind: Secretkind: SecretapiVersion: v1metadata: name: aliyun-docker-image-registry namespace: default annotations: kubesph.

2021-09-09 10:05:18 1525

原创 阿里云DRDS使用点滴

2017年的时候使用阿里云DRDS服务的总结记录,当时的数据量比较大,如果不分库分表,就会导致单张车辆表超过1亿,未来还会持续增加,所以在规划系统的时候就考虑到了如果上亿,MySQL根本没法支撑,速度会慢的要死,这让我们在设计的时候就要考虑解决的方案。另外一个细节是车辆的字段很多,用户需要支持多条件查询,而且查询的条件互相组合没有规律,这就导致不好直接通过在数据库层面使用索引来解决查询问题,所以当时准备分2步走来解决:上分库分表 条件查询时,不用数据库查询,而是通过阿里云的opensearch服务

2021-09-07 13:44:42 1040

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除