
云计算
文章平均质量分 80
柳清风09
这个作者很懒,什么都没留下…
展开
-
深入理解containerd里面snapshot
先问大家问题,containerd的snapshot是什么鬼? 难道是给容器做快照的吗?答案是: 是也不是为什么说是呢?它的确可以实现部分快照的功能,但他和常规意义的虚拟机快照又不是一回事。我们先看一下containerd是干嘛的?譬如我们拉镜像可以看到snapshot的服务作用是准备rootfs的,就是通过mount各个层,提供容器的rootfs。所有。content只是保存tar和mainfest和config文件的,是OCI那套东西,我们需要将他们逐一解压、mount后提供给容器。所以p原创 2020-12-26 11:41:47 · 4495 阅读 · 0 评论 -
在阿里云神龙上面玩KVM
安装kvm# yum install qemu-kvm libvirt libguestfs-tools virt-install查看网络# virsh net-dumpxml default网卡加入网桥# vi /etc/sysconfig/network-scripts/enp3s0BRIDGE=br0创建网桥 vi /etc/sysconfig/network-scripts/ifcfg-br0DEVICE="br0"# I am getting ip from DHCP s原创 2020-11-24 10:20:28 · 426 阅读 · 0 评论 -
raft算法-顺带处理前任的事-看似随心却是精心
今天在跑raft算法的时候,突然发现一个有意思的细节:如何处理前任未提交的日志。我们都知道raft选举的时候会综合考虑任期(term)和日志索引(index),优先选择具备最新的数据的节点成为master,这个其实非常容易理解,这是为了最大化保持数据。但这里面有个小细节就是,如下图所示,S3在任期7的时候提交了一个日志,但它还没来得及复制就挂了。之后master切换到其他节点。如果此时其他...原创 2020-04-05 14:45:59 · 374 阅读 · 0 评论 -
记录ceph对象存储的一个bug
我们的对象存储是基于ceph的对象存储搭建的,测试环境是N版本的,生产环境是M版本的。业务使用的是doesObjectExist这个API,核心Java代码如下 boolean exists = s3Client.doesObjectExist(bucketName, object+"ss"); if (exists) { System.ou...原创 2020-04-04 12:39:19 · 728 阅读 · 0 评论 -
TCP漫谈之为啥需要timewait状态
tcp的状态状态转化图如下所示,其中Time_awit状态是CLOSED之前的一个状态,等待2个MSL时间。为啥需要time_awit状态呢?为啥不直接进入closed状态呢?这样不就能更快的释放资源给新的连接使用了吗?而是还需要等待2MSL(linux默认)时间。有两个原因,第一个原因是为了防止“迷路的数据包”,如下图所示,如果在第一个连接里面第三个数据包由于底层网络故障延迟送达。等待新的...原创 2020-03-30 16:47:20 · 867 阅读 · 0 评论 -
kubernetes+ prometheus自动伸缩的设计与实现(四)
之前还有一些环境部署上面的事情没有交代,这里补充完毕apiserver参数修改--runtime-config=autoscaling/v2alpha1=true "--requestheader-username-headers=X-Remote-User --requestheader-group-headers=X-Remote-Group --requestheade...原创 2018-04-18 18:29:48 · 1341 阅读 · 0 评论 -
kubelet启动pod的源码分析
如果看过之前的blog,大家都肯定都已经知道kubelet是负责真正启动容器的干活的,其实k8s的代码里面最复杂的其实是kubelet,而不是无脑的大脑apiserver,它基本是依靠etcd完成很多工作。 那么kubelet怎么去启动pod,何时去启动pod呢?我先从kubelet启动的地方说起。 先看上面这张图,这张图详细的介绍了kubelet启动pod的三个来源,分别是apiserve原创 2017-12-18 09:14:47 · 37404 阅读 · 0 评论 -
给prometheus加一个export
prometheus有很多的export,本文先自己写一个export,再介绍一个官方提供的node export。 其实只要返回prometheus能够识别的标准的文本,prometheus就能兼容,这个就是接口的好处。 你首先得提供一个http的server去提供数据,本篇文章主要介绍一个http的监控,可以通过http、tcp等协议做服务监控。 http.HandleFunc("/p原创 2017-12-18 19:20:15 · 42780 阅读 · 0 评论 -
docker 存储驱动之overlay
overlayOverlayFS是一个类似于AUFS 的现代联合文件系统,但更快,实现更简单。Docker为OverlayFS提供了一个存储驱动程序。 * 注:OverlayFS是内核提供的文件系统,overlay和overlay2是docker提供的存储驱动设置存储方式编辑/etc/docker/daemon.json{ "storage-driver": "ove原创 2018-01-31 12:51:07 · 44209 阅读 · 0 评论 -
s3存储分段上传命令行和SDK使用
s3是亚马逊退出的对象存储服务。我之前blog介绍过什么是对象存储,这里普通的对象操作在此略过,如果大家感兴趣可以看aws官网,说的很详细,在此我想介绍的是分段上传的使用方式,先看下面我画的图 文件从分片,到初始化上传,再到逐一上传分片,最后合并组装,完成分片上传的整个过程。 其实如果你直接使用命令行或者SDK,它默认就是支持分段上传的,你默认使用的aws s3 cp它就是一个分段上传。原创 2017-12-12 10:48:25 · 41252 阅读 · 1 评论 -
filebeat源码分析之采集
上面说到是启动,下面接着说日志采集回到启动的地方filebeat/prospector/prospector.go。func (p *Prospector) Run() { // 初始化 prospector 启动 p.prospectorer.Run() // 如果只运行一次就返回 if p.Once { return } for {原创 2017-12-09 18:10:44 · 39709 阅读 · 0 评论 -
filebeat源码分析服务启动
在开始源码分析之前先说一下filebeat是什么?beats是知名的ELK日志分析套件的一部分。它的前身是logstash-forwarder,用于收集日志并转发给后端(logstash、elasticsearch、redis、kafka等等)。filebeat是beats项目中的一种beats,负责收集日志文件的新增内容。当前的代码分支是最新的6.x的代码。 先看我们服务启动配置文件的一个例子,原创 2017-12-08 14:23:18 · 38593 阅读 · 0 评论 -
我也来谈微服务(一)
微服务这个理念已经不能算新了,最近这两年在互联网行业一直被广泛应用,之前说的微信就是基于微服务的架构设计的,那么是什么是微服务呢? 在说微服务之前,还是说一下一些相关的基本概念。微服务本质服务作为组件,每个组件可以独立部署,每个组件也可以有自己的编程语言;围绕业务组织团队,正如康威定律,一个组织的设计成果,其结构往往对应于这个组织中沟通和组织结构;基于产品构建,更倾向让团队去负责整个服务的生命周期原创 2017-05-21 10:54:07 · 662 阅读 · 0 评论 -
用golang编写一个并发工作队列
其实golang用一个函数可以构建一个并发队列,看我之前的blog但那个功能还不够强大,现在编写一个灵活可控的队列程序 先定义一个工作type Worker struct { ID int RepJobs chan int64 SM *SM quit chan bool}包含了workid和执行任务的id,上面的SM只是任务具体内容,这个原创 2017-05-20 17:42:45 · 10526 阅读 · 1 评论 -
Harbor 源码分析之状态机(五)
Harbor里面有很多job,譬如镜像同步,这些job有很多状态,应为job这执行过程中会有很多任务,在每种任务下面会有不同的任务状态,状态之前可以切换并触发动作,这个就是状态机,如果对Hadoop中的YARN调度熟悉可能知道,YARN里面就是通过状态机完成任务的管理和状态切换。下面介绍一下状态机type SM struct { JobID int64 Current原创 2017-05-19 20:34:11 · 1172 阅读 · 0 评论 -
docker 存储驱动之overlay2
overlay2overlay2原生支持128层,这提供docker build和docker commit更好的性能支持 在执行完docker pull ubuntu后,可以看到$ ls -l /var/lib/docker/overlay2total 24drwx------ 5 root root 4096 Jun 20 07:36 223c2864175491657d2原创 2018-01-31 12:52:29 · 51319 阅读 · 0 评论 -
flannel 最新版网络实现解析
我发布在公司网站上,在此连接记录一下:http://college.creditease.cn/#/detail/15/176原创 2018-10-25 08:46:18 · 1130 阅读 · 0 评论 -
kubernetes 问题汇总
invalid容器创建的容器有个创建的时长的选项age,测试环境发现有的容器时间是invalid,通过代码查看原来是时间不对 因为每个kubelet是定时上报的,上报是基于本地当前时间的。wildfly-rc-1l9qv 0/1 ContainerCreating 0 <invalid>解决办法,在每个机器安装ntp服务。保持每个节点...原创 2018-09-12 10:59:28 · 4034 阅读 · 0 评论 -
linux网络hack用法之onlink路由
在单网卡机器上,如果配置eth0的地址为192.168.40.249/32,那么别指望用常规的方式添加任何路由,这是因为链路层直连路由已经不存在了,我们如下的尝试: route add -net 192.168.0.0/16 gw 192.168.40.254 将失败,因为网关地址并不和本地地址同在任何一个网段,那么如何是好呢?Linux的iproute2工具包提供了一个onlink参数,可以...原创 2018-09-12 10:53:54 · 6756 阅读 · 0 评论 -
linux的网络hack用法之arp
arp我们都知道arp协议在网络中重要位置,如果没有arp整个二层和三层的网络将全部瘫痪,那么linux 内核在arp上面有哪些细节和特殊用法吗,下面我们逐一介绍 首先看一下各种状态 这里我们看到arp表所有的状态信息,我特地标注黄色的stale状态是一个最特殊的状态。 然后再看看各个状态的切换图 首先是arp的表的配置在/proc/sys/net/ipv4/neigh/*...原创 2018-09-03 10:23:26 · 1559 阅读 · 1 评论 -
Docker 被重启故障
在生产环境中,docker和flannel都是通过systemd管理的,发生了一个奇怪的事情,当重启网络插件flannel的时候,docker daemon也发生了重启,这个很奇怪,按道理是各自独立运行的。细查日志,当重启flannel时候systemd也把docker重启了。# systemctl list-dependencies docker.service docker.serv...原创 2018-08-23 08:17:41 · 2269 阅读 · 0 评论 -
kubernetes 故障排查之contrack
在kube-proxy日志里面有很多报错E0813 10:47:18.983433 454071 proxier.go:722] conntrack return with error: error looking for path of conntrack: exec: "conntrack": executable file not found in $PATHE0813 10:4...原创 2018-08-16 09:49:39 · 6719 阅读 · 1 评论 -
记一次InfluxDB故障
在一个测试环境中,InfluxDB已经运行了一年多,今天突然发现不能保存监控数据了。我们先回顾一下InfluxDB如何配置的。 生成配置文件,influxd config &amp;amp;gt; /etc/influxdb/influxdb.generated.conf启动服务指定influxd -config influxdb.generated.conf也可用通过环境变量指定e...原创 2018-08-02 17:29:02 · 11783 阅读 · 0 评论 -
一次kafka一直rebalance的定位与处理
前端时间我们自研了一个kafka->elasticsearch导数据的小程序,我们启动了多个副本。由于需要限速,可能会有停止接收消息的时间段,会导致停止和kafka的心跳,导致kafka一直处于rebalance的状态,通过查阅文档发现下面相关的几个参数session.timeout.ms is for heartbeat thread. If coordinator fails t...原创 2018-04-11 13:44:36 · 10451 阅读 · 0 评论 -
kubernetes qos 全解析
kubernetes qos资源分类QOS是kubernetes保证服务质量的一个模块。 先介绍两个基本概览 * 可压缩资源:CPU 在压缩资源部分已经提到CPU属于可压缩资源,当pod使用超过设置的limits值,pod中进程使用cpu会被限制,但不会被kill。不可压缩资源:内存 Kubernetes通过cgroup给pod设置QoS级别,当资源不足时先kill优先级原创 2018-01-16 15:21:33 · 37401 阅读 · 0 评论 -
Harbor 源码分析之仓库同步(五)
Harbor支持分布式的部署,镜像仓库成树状结构。镜像仓库有父子结构,通过定制策略可以实现父子仓库之前的同步,这样可以在多个数据中心之前完成镜像同步,因为每个数据中心内容器的启动肯定是从本数据中心内的镜像仓库去拉取镜像。 由于它是一个多租户的设计,可以设置同步的policy,这样控制哪些镜像去同步。是通过页面创建policy完成的src/ui/api/replication_policy.go原创 2017-05-19 17:24:54 · 3200 阅读 · 0 评论 -
Harbor 源码分析之API(四)
首先看一下harbor的API,harbor代码结构还是比较简单,如果熟悉springmvc的人对此可能更加容易理解。它整个web服务是基于beego的,首先看路由src/ui/router.go。beego.SetStaticPath("/static", "./static") beego.SetStaticPath("/i18n", "./static/i18n") //Page原创 2017-05-19 10:56:23 · 3496 阅读 · 3 评论 -
Prometheus 实战于源码分析之部署
Prometheus是一个通用的监控平台,它可以kubernetes结合,监控容器和主机的性能,由于它是kubernetes之前就已经有了,并不是一个专门设计用来监控kubernetes的,这一点和heapster最大差别。prometheus目标是通用,所以它不和某一个平台绑定。它的设计思想也很有意思,它是通过pull,这种设计好处是最少的降低和被监控对象的耦合,当prometheus挂掉后不会影原创 2017-04-27 18:04:31 · 14971 阅读 · 0 评论 -
云计算的那些事之存储虚拟化
数据在整个计算机系统是最重要的一部分,也是最珍贵的。数据的存储一直是一个热议的话题,在没有云计算之前数据存储已经发展了很久,可以说和云计算没有特别关系,我这边将的云计算存储通常指的是亚马逊的S3存储或者EBS存储等,将统一的资源池划分给多个用户。SAN那就先从存储说起,现在高端存储应该EMC、IBM和HDS的天下,这些年外置存储跟随着廉价磁盘不断提升容量和性能,推动了SAN网络、主机FC接口不断成熟原创 2017-04-29 23:12:29 · 35158 阅读 · 0 评论 -
云主机挂盘步骤
在IAAS管理平台中,云主机挂数据盘是一个常规操作,在页面把数据盘挂载之后fdisk -l磁盘 /dev/vda:21.5 GB, 21474836480 字节,41943040 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识原创 2017-04-14 19:12:25 · 1103 阅读 · 0 评论 -
Prometheus 实战于源码分析之storage
prometheus不仅支持本地存储还支持远端存储,先从远端存储说起,他是通过一个发送队列queue完成数据发送的。先看一下队列的定义:func NewQueueManager(cfg QueueManagerConfig) *QueueManager { if cfg.QueueCapacity == 0 { cfg.QueueCapacity = defaultQueue原创 2017-04-29 19:33:36 · 14470 阅读 · 0 评论 -
Prometheus 实战于源码分析之alert
prometheus不仅可以提供数据采集功能,而且还可以做告警服务,通过匹配的性能参数,发出告警,先看看alert配置。rule_files: [ - <filepath_glob> ... ]# A list of scrape configurations.scrape_configs: [ - <scrape_config> ... ]# Alerting specifies set原创 2017-04-29 13:49:27 · 14584 阅读 · 0 评论 -
Prometheus 实战于源码分析之scrape
上一篇介绍了tagert管理和发现discovery,那个这些targets是怎样采集的呢?下面就介绍scrape,它是数据采集器。type scrapePool struct { appender storage.SampleAppender ctx context.Context mtx sync.RWMutex config *config.ScrapeCon原创 2017-04-29 10:44:35 · 11983 阅读 · 0 评论 -
Prometheus 实战于源码分析之discovery
prometheus与时俱进在现在各种容器管理平台流行的当下,能够对各种容器管理平台进行数据采集和处理,并且能够自动发现监控对象,这个就是今天要说的discovery。他是一个资源发现的组件,能够根据资源变化调整监控对象。目前已经支持的discovery主要有DNS、kubernetes、marathon、zk、consul、file等,我们先从这个kubernetes的服务发现开始讲解吧 先是创原创 2017-04-29 08:14:19 · 12788 阅读 · 0 评论 -
Prometheus 实战于源码分析之webHandler
上一篇介绍了服务启动基本流程,但里面有几个点没有展开,这里还是要分析一下,首先介绍这个webHandler,它是一个web http请求的服务端。先看初始func New(o *Options) *Handler { router := route.New(func(r *http.Request) (context.Context, error) { return o.Co原创 2017-04-28 16:34:17 · 10937 阅读 · 0 评论 -
kubenetes源码分析之DNS(二)
在进行DNS源码解析前我还行讲解一些DNS的基础知识。这个是以后代码讲解需要用到的这些知识。先介绍一下DNS数据包的组成部分如下图 Header ID 请求客户端设置的16位标示,服务器给出应答的时候会带相同的标示字段回来,这样请求客户端就可以区分不同的请求应答了。 QR 1个比特位用来区分是请求(0)还是应答(1)。 OPCODE 4个比特位用来设置查询的种类,应答的时候原创 2017-04-13 20:18:02 · 56616 阅读 · 0 评论 -
Prometheus 实战于源码分析之服务启动
在之前的铺垫后下面进行prometheus的源码分析,首先要看的是服务启动。在cmd/prometheus/main.go中main方法,由于太长了,所以这里分段解说一下: 先是启动本地存储 var localStorage local.Storage switch cfg.localStorageEngine { case "persisted": loca原创 2017-04-28 15:36:43 · 12856 阅读 · 0 评论 -
Prometheus 实战于源码分析之API与联邦
在进行源码讲解关于prometheus还有一些配置和使用,需要解释一下。首先是API的使用,prometheus提供了一套HTTP的接口curl http://localhost:9090/api/v1/query?query=go_goroutines|python -m json.tool{ "data": { "result": [ {原创 2017-04-28 11:19:34 · 16187 阅读 · 5 评论 -
基于OpenFlow的容器SDN网络互通方案
基于OpenFlow的容器SDN网络互通方案原创 2017-04-15 16:22:05 · 59829 阅读 · 0 评论 -
云计算的那些事儿之计算虚拟化
上一篇介绍了虚拟化分别从计算虚拟化、存储虚拟化和网络虚拟化几个角度总体说了一下。下面就主意进行讲解,本篇先介绍计算虚拟化,其实我觉得用计算虚拟化可能比较狭隘,我个人更偏向另个一个更大的概念,软件定义的计算。计算虚拟化分类计算虚拟化就是在虚拟系统和底层硬件之间抽象出CPU和内存等,以供虚拟机使用。计算虚拟化技术需要模拟出一套操作系统的运行环境,在这个环境你可以安装window也是可以按照linux,这原创 2017-04-16 11:23:29 · 58018 阅读 · 4 评论