自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

柳清风的专栏

行者程序员

  • 博客(56)
  • 资源 (8)
  • 收藏
  • 关注

原创 云计算的那些事之存储虚拟化

数据在整个计算机系统是最重要的一部分,也是最珍贵的。数据的存储一直是一个热议的话题,在没有云计算之前数据存储已经发展了很久,可以说和云计算没有特别关系,我这边将的云计算存储通常指的是亚马逊的S3存储或者EBS存储等,将统一的资源池划分给多个用户。SAN那就先从存储说起,现在高端存储应该EMC、IBM和HDS的天下,这些年外置存储跟随着廉价磁盘不断提升容量和性能,推动了SAN网络、主机FC接口不断成熟

2017-04-29 23:12:29 35116

原创 Prometheus 实战于源码分析之storage

prometheus不仅支持本地存储还支持远端存储,先从远端存储说起,他是通过一个发送队列queue完成数据发送的。先看一下队列的定义:func NewQueueManager(cfg QueueManagerConfig) *QueueManager { if cfg.QueueCapacity == 0 { cfg.QueueCapacity = defaultQueue

2017-04-29 19:33:36 14359

原创 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 14515

原创 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 11908

原创 Prometheus 实战于源码分析之discovery

prometheus与时俱进在现在各种容器管理平台流行的当下,能够对各种容器管理平台进行数据采集和处理,并且能够自动发现监控对象,这个就是今天要说的discovery。他是一个资源发现的组件,能够根据资源变化调整监控对象。目前已经支持的discovery主要有DNS、kubernetes、marathon、zk、consul、file等,我们先从这个kubernetes的服务发现开始讲解吧 先是创

2017-04-29 08:14:19 12749

原创 Prometheus 实战于源码分析之collector

在prometheus里面有很多的exporter,每个exporter里面的都有一个collector,我在这里先写分析一下prometheus自身的监控系统,采集自己的监控数据。 先看接口type Collector interface { Describe(chan<- *Desc) Collect(chan<- Metric)}有很多数据类型实现了这个接口Gaugetype

2017-04-28 18:06:00 16952 1

原创 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 10882

原创 Prometheus 实战于源码分析之服务启动

在之前的铺垫后下面进行prometheus的源码分析,首先要看的是服务启动。在cmd/prometheus/main.go中main方法,由于太长了,所以这里分段解说一下: 先是启动本地存储 var localStorage local.Storage switch cfg.localStorageEngine { case "persisted": loca

2017-04-28 15:36:43 12801

原创 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 15988 5

原创 Prometheus 实战于源码分析之部署

Prometheus是一个通用的监控平台,它可以kubernetes结合,监控容器和主机的性能,由于它是kubernetes之前就已经有了,并不是一个专门设计用来监控kubernetes的,这一点和heapster最大差别。prometheus目标是通用,所以它不和某一个平台绑定。它的设计思想也很有意思,它是通过pull,这种设计好处是最少的降低和被监控对象的耦合,当prometheus挂掉后不会影

2017-04-27 18:04:31 14931

原创 flannel 实战与源码分析(七)

这是flannel最后一篇,我原本不准备介绍UDP,因为这种方案的网络损耗实在是太多,大约一半损耗,vxlan大约是30%损耗。但基本的UDP使用我还是想和大家分享一下的,主要是tun设备的使用。 像UDP的RegisterNetwork和VXLAN一样,我就不单独说了backend/udp/udp_network.go。func (n *network) Run(ctx context.Con

2017-04-26 19:19:28 18771

原创 flannel 实战与源码分析(六)

其实flannel的东西基本都说完了,还有一个功能点由于和kubernetes紧密结合的,所以在这里解释一下。相信大家都还记得之前写的创建SubnetManagerfunc newSubnetManager() (subnet.Manager, error) { if opts.kubeSubnetMgr { return kube.NewSubnetManager()

2017-04-26 17:33:28 20344

原创 flannel 实战与源码分析(五)

上一篇介绍的vxlan模式,本篇还想介绍一个host-gw模式,顾名思义,就是主机网关模式。这个和calico的路由模式中主机网关是一样的,只不过没有BGP罢了。 先介绍一下怎么使用,然后分析了源码。先设置一下网络模式etcdctl set /flannel/network/config '{"Network": "192.168.0.0/16","SubnetLen": 24,"Subnet

2017-04-26 15:07:40 21672

原创 flannel 实战与源码分析(四)

上一篇介绍了flannel服务的启动。下面看看flanneld怎个进程是怎样运行的。设计到backend部分已vxlan为例。 每个节点的网段分配是上一篇说的RegisterNetwork,但具体怎么做的呢?这样确定自己网段呢?subnetAttrs, err := newSubnetAttrs(be.extIface.ExtAddr, dev.MACAddr()) if err != n

2017-04-25 19:48:08 22843

原创 flannel 实战与源码分析(三)

之前一直介绍flannel的使用,现在正是进入代码讲解,看看flannel是如何实现的,先看启动func main() { flag.Set("logtostderr", "true") // 解析参数 flag.Parse() if flag.NArg() > 0 || opts.help { fmt.Fprintf(os.Stderr, "Usage

2017-04-25 10:06:35 21937

原创 flannel 实战与源码分析(二)

上一篇介绍了基本使用,这一篇我想详细介绍一下flannel网络包的是怎样传输的,应为这些基本东西没有解释清楚,只看代码是没法理解的。先看看一张经典图: 这个是flannel官方提供的一个数据包图,从这个图片里面里面可以看出docker0分别处于不同的段:10.1.20.1/24 和 10.1.15.1/24 现在从上面的一个pod(10.1.15.2)去连接另一台主机上的pod(10.1.20

2017-04-24 15:27:03 22195 1

原创 flannel 实战与源码分析(一)

Flannel 是由 CoreOS 维护的一个虚拟网络方案。目前是kubernetes默认的网络,它有golang编写,在源码分析之前还是先看看怎样使用。这里不得不提一下kubernetes网络约束: 1. 所有容器之间都可以无须SNAT即可相互直接以IP通信。 2. 所有主机与容器之间都可以无须SNAT即可相互直接以IP通信。 3. 容器看到的自身IP与其他容器看到的容器IP相同。

2017-04-24 14:16:09 42985

原创 go-restful实战与深入分析之源码篇

上一篇分析了go 原生的http服务。下面开始介绍go restful源码分析,有了上一篇的铺垫这篇文章讲解起来就很简单了。和go 的http一样启动监听: wsContainer := restful.NewContainer() server := &http.Server{Addr: ":8080", Handler: wsContainer}不用多说这个wsContainer

2017-04-23 13:37:30 38505

原创 go-restful实战与深入分析之基础篇

如果想分析清楚go-restful的工作原理我们这篇先介绍一些go http的基本知识,我将通过多个例子把故事串起来,先看一个最基本的helloworld的例子:func HelloServer(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n")}func main() {

2017-04-23 12:15:16 40052

原创 go-restful实战与深入分析之使用篇

go的rest框架很多国内最著名应该是beego,但这个框架设计思想比较老套而且很笨重,如果需要一个轻量级的框架我个人挺喜欢go-restful先看看怎么使用,如果有过Flask或者springMVC的经验,这个很容易上手,所以我个人觉得语言是想通的,先学好一门语言其它的按照套路来就可以了,先看代码例子:package mainimport ( "log" "net/http"

2017-04-23 09:13:28 52079 1

原创 go template基本使用

基本使用package mainimport ( "text/template" "os")type Friend struct { Fname string}type Person struct { UserName string Emails []string Friends []*Friend}func main() { f1

2017-04-22 16:04:59 38536 1

原创 云计算的那些事之网络虚拟化

网络虚拟化是一种重要的网络技术,该技术可在物理网络上虚拟多个相互隔离的虚拟网络,从而使得不同用户之间使用独立的网络资源切片,从而提高网络资源利用率,实现弹性的网络。其实很早之前就有的一个网络隔离方法vlan,vlan就是一种网络虚拟化,在原有网络基础上通过vlan tag划分出多个广播域。关于网络虚拟化,这里面有很多概念需要搞清楚网络虚拟化和SDN有些人认为SDN和网络虚拟化是同一个层面的,然而这是

2017-04-22 13:56:18 44468

原创 用Python编写一个kubernetes调度器

kubernetes的组件在之前的blog都已经阐述,其中scheduler负责pod的调度,确定pod所在的宿主机节点,由于scheduler通过kubernetes的api调度pod,那么我们当然也可以自己的编写一个scheduler,完成和kubernetes对接。先看下面代码:# -*- coding:utf-8 -*-import randomimport jsonfrom kubern

2017-04-22 12:47:19 44631 3

原创 kubernetes 源码分析之ingress(三)

经过实战了一下,用户也大概知道ingress是怎样使用的,下面接着深入讲解内部结构 上图展示了一个nginx ingress controller的部署架构图,ingress controller通过轮询监听apiserver的方式来获取ingress资源的变化,将ingress资源存储到本地缓存,并通知nginx进行相应的配置修改的加载。 ingress controller监控了ingr

2017-04-21 10:37:03 59462

原创 kubernetes 源码分析之ingress(二)

经过实战了一下,用户也大概知道ingress是怎样使用的,下面接着深入讲解内部结构 上图展示了一个nginx ingress controller的部署架构图,ingress controller通过轮询监听apiserver的方式来获取ingress资源的变化,将ingress资源存储到本地缓存,并通知nginx进行相应的配置修改的加载。 ingress controller监控了ingr

2017-04-21 09:53:12 57996

原创 kubernetes 源码分析之ingress(一)

kubernetes的服务对外暴露通常有三种方式分别为nodeport、loadbalancer和ingress。nodeport很容易理解就是在每个主机上面启动一个服务端口暴露出去,这样弊端是造成端口浪费;loadbalancer这种方式目前只能在gce的平台跑的很好,就是在集群之外对接云平台的负载均衡;还有从kubernetes1.2出来的ingress,他是通过在计算结算启动一个软负载均衡(N

2017-04-20 11:05:06 63481 2

原创 kubernetes 源码分析之kubeadm(三)

上一篇介绍了kubeadm的init这篇主要讲解join,它们我们用kubeadm最常用的两个组件。 和init的一样,首先还是配置解析参数,创建join结构体func NewJoin(cfgPath string, args []string, cfg *kubeadmapi.NodeConfiguration, skipPreFlight bool) (*Join, error) {

2017-04-18 17:24:05 35938

原创 kubernetes 源码分析之kubeadm(二)

上一篇通过kubeadm去部署kubernetes集群。这篇进入代码进行讲解。先看kubeadm init这个创建master的命令是怎样运行的cmd/kubeadm/app/cmd/cmd.go。 cmds.AddCommand(NewCmdCompletion(out, "")) cmds.AddCommand(NewCmdInit(out)) cmds.AddComman

2017-04-18 10:32:38 36485

原创 kubernetes 源码分析之kubeadm(一)

在进行源码分析之前,我想在第一篇介绍一下这个东西怎么用的,对于不太熟悉这个工具的人可能不太了解。好了,我们先实战一下。yum install -y kubelet kubectl kubernetes-cni kubeadm先安装基本组件,国内有阿里yum源还有下面这个源也可以tee /etc/yum.repos.d/mritd.repo << EOF[mritdrepo]name=Mritd

2017-04-17 18:48:23 38398

原创 kubenetes源码分析之DNS(八)

之前的的7篇blog详细分析了kubernetes DNS服务。下面做一下总结,kubedns● listwatch k8s api,监控Service和Endpoint资源并更新DNS记录● 替换etcd,使用TreeCache数据结构保存DNS记录并实现SkyDNS的Backend接口,这样直接从内存取数据相对etcd加快速度。● 接入SkyDNS,对dnsmasq提供DNS查询服务dnsm

2017-04-17 14:47:44 56296

原创 kubenetes源码分析之DNS(七)

第一篇说的DNS三剑客,已经介绍两个了。还差最后一个组件sidecar,它负责其他两个组件的监控服务。之所以叫sidecar:做轻快的双轮马车,是应为以前的exechealth只监控dnsmaq服务,而现在监控其它两个组件。代码相对不叫简单,先看服务启动:func main() { options := sidecar.NewOptions() configureFlags(opti

2017-04-17 14:09:55 56287

原创 kubenetes源码分析之DNS(六)

上一篇介绍了kubends相关代码,但他并不是直接提供服务的,而是dnsmasq-nanny。nanny这个单词是保姆的意思,就是一个dns服务的保姆,挺形象的,那么我们看看这个保姆是如何服务的。 首先看服务启动:func main() { parseFlags() glog.V(0).Infof("opts: %v", opts) sync := config.NewFil

2017-04-17 13:44:55 55706

原创 kubenetes源码分析之DNS(五)

上一篇介绍服务怎样存储和同步,现在说一下怎样提供DNS服务的。startSkyDNSServer启动DNS域名解析服务func (d *KubeDNSServer) startSkyDNSServer() { glog.V(0).Infof("Starting SkyDNS server (%v:%v)", d.dnsBindAddress, d.dnsPort) skydnsCon

2017-04-17 09:46:36 55834

原创 云计算的那些事儿之计算虚拟化

上一篇介绍了虚拟化分别从计算虚拟化、存储虚拟化和网络虚拟化几个角度总体说了一下。下面就主意进行讲解,本篇先介绍计算虚拟化,其实我觉得用计算虚拟化可能比较狭隘,我个人更偏向另个一个更大的概念,软件定义的计算。计算虚拟化分类计算虚拟化就是在虚拟系统和底层硬件之间抽象出CPU和内存等,以供虚拟机使用。计算虚拟化技术需要模拟出一套操作系统的运行环境,在这个环境你可以安装window也是可以按照linux,这

2017-04-16 11:23:29 57943 4

原创 基于OpenFlow的容器SDN网络互通方案

基于OpenFlow的容器SDN网络互通方案

2017-04-15 16:22:05 59776

原创 云主机挂盘步骤

在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 1066

原创 kubenetes源码分析之DNS(四)

上一篇 介绍了kubedns服务启动过程,现在看服务怎样运行。分为两个主要部分,第一个是怎么提供DNS解析服务,第二是怎样同步更新sevice信息。那下面开始讲解。 服务怎么同步呢?必须是listwatch,继承kubernetes一套API体系,我以后要说的ingress同步,也是这样的。下面看代码://servicekcache.ResourceEventHandlerFuncs{

2017-04-14 16:37:08 57638

原创 kubenetes源码分析之DNS(三)

之前做了一些基础知识,下面开始kubedns源码阅读,这个字项目的结构和kubernetes的代码结构是一样的:首先看cmd/kube-dns/dns.go,他是项目起点:func main() { config := options.NewKubeDNSConfig() config.AddFlags(pflag.CommandLine) flag.InitFlags()

2017-04-14 10:27:15 64662

原创 kubenetes源码分析之DNS(二)

在进行DNS源码解析前我还行讲解一些DNS的基础知识。这个是以后代码讲解需要用到的这些知识。先介绍一下DNS数据包的组成部分如下图 Header ID 请求客户端设置的16位标示,服务器给出应答的时候会带相同的标示字段回来,这样请求客户端就可以区分不同的请求应答了。 QR 1个比特位用来区分是请求(0)还是应答(1)。 OPCODE 4个比特位用来设置查询的种类,应答的时候

2017-04-13 20:18:02 56585

原创 kubenetes源码分析之DNS(一)

kubernetes服务发现有两个机制,一个是环境变量另一个则是域名解析,而提供域名解析的正是今天要说的主题kube-dns。这篇文章我先介绍一下dns的发展历程接下来的blog会继续进行源码阅读分享。我把发展定义了三个阶段:阶段一如果使用过kubernetes 1.2的应该都会知道dns的四件套:kube2sky、etcd、skydns和exechealthz。Kube2sky通过K8S API监

2017-04-13 14:46:11 73449

kustomize_v4.2.0_darwin_amd64.tar.gz

kustomize_v4.2.0_darwin_amd64.tar.gz

2021-08-26

helm-v3.6.3-linux-amd64.tar.gz

linux helm 二进制

2021-08-26

helm-v3.6.3-darwin-amd64.tar.gz

mac helm 二进制

2021-08-26

go1.16.7.linux-amd64.tar.gz

go1.16.7.linux-amd64.tar.gz

2021-08-17

linux网络实现分析

linux操作系统网络实现

2016-07-27

pygame msi安装包

基于win64位 python2.7的pygame包,可以用于python音乐游戏开发

2016-07-27

zookeeper安装包

zookeeper安装,在linux环境下部署安装zookeeper

2014-12-24

CSS编辑器 TopStylePortable.exe

最实用CSS开发工具不仅有各个浏览器支持说明而且还有很多提示。非常实用

2013-04-13

空空如也

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

TA关注的人

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