自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 CI/CD平台,部署中空格引发的两个血案

1. 前端static部署 微服务前端js,编译打包成的tar包,在部署阶段,需要解压缩到与这个微服务对应的location,这个过程分别在流水线的“代码打包”和“部署”这两个阶段完成。 代码打包: 通过下面的命令完成: cd xxx-yyy&& yarn --update-checksums && yarn && yarn build_test &...

2021-02-19 16:08:11 259

原创 k8s部署环境,蓝绿发布的两种实现方法

蓝绿发布,是部署过程中并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量全部切换到新版本上。新版本验证通过,删除老版本,否则流量重新切换到旧版本。过程中新旧两版本同时部署,需要考虑资源的使用情况。 如下图所示,是一种基于现在微服务架构,来实现蓝绿发布。微服务以代理Service提供对外服务,Service通过Selector的标签选择其代理的微服务。微服务通过环境变量发现Service,然后在Eureka上注册Service的服务地址和端口。Service选...

2021-01-21 17:09:15 2145 1

原创 基于k8s Deployment和API网关实现的滚动发布

滚动发布基于Kubernetes原生的Deployment具备的滚动更新、多版本管理和API网关负载均衡能力实现。滚动更新的好处是显而易见的,比如,在升级刚开始的时候,集群里只有1个新版本的容器。如果这时,新版本容器有问题(环境或者程序本身有bug)启动不起来,那么“滚动更新”就会停止。而在这个过程中,由于应用本身还有两个旧版本的容器在线,所以服务并不会受到太大的影响。新版本部署好,测试验证如果不成功,通过回滚机制,可以快速滚动回退到最新的历史版本。 API网关不支持流量转移,所...

2021-01-21 17:05:04 386

原创 一种go协程间内存零拷贝的消息通信机制

1. goroutine介绍2. 协程间消息机制

2020-10-29 19:21:03 1093

原创 应用容器化,微服务架构,以及基础架构的变迁

1. 什么是容器2.基础架构变迁(资源角度)3.基础架构变迁 (服务角度)

2020-08-27 15:59:07 238

原创 API访问etcd, kv对增删改查

package etcdimport ( "context" "fmt" "github.com/golang/glog" "go.etcd.io/etcd/clientv3" "go.etcd.io/etcd/pkg/transport" "sync" "time")type ThreadSafeEtcd struct { client *clientv3.Client lock sync.Mutex certdir string endpoints []strin.

2020-08-06 16:35:20 390

原创 cicd平台,升级gitlab带来的一些配置、接口变化

gitlab软件版本需要从GitLab Community Edition8.9.11升级到GitLab Community Edition12.10.11,记录下本次升级所做的改动以及遇到的坑。 涉及到的各个服务见下图:1. 版本跨度太大,没有采用软件更新升级的方式;同样也没有采用备份/还原的方式。2. 安装部署了一新的gitlab服务器,从旧gitlab服务器迁移项目到新gitlab服务器。3. 更新"通过API方式访问gitlab"的认证方式和接口版本...

2020-07-16 15:00:30 403

原创 runtime error: invalid memory address or nil defrference goroutine

go routine panic with:invalid memory address or nil defrference goroutine查看源代码:正确的写法是:

2020-06-21 15:39:16 670

原创 go panic (runtime error: slice bounds out of range) 分析

如图,go程序出现panic下面来看看这个导致panic的方法:1)定义了一个nil的切片 var job []string定义的是一个分配了却未初始化的对象,它的值是nil,上面的方法,如果 if strings.Contains(subName, env) 这个条件一直不成立,返回的jobs就是nil ...

2019-12-11 18:18:37 12850

原创 k8s环境下etcd分布式数据库集群配置,数据存储与发现

1. 什么是etcd? etcd是一个分布式一致性键值存储系统,用于共享配置和服务发现, etcd基于raft协议实现数据同步(K-V数据),集群由多个节点组成。 raft协议理解起来相比paxos并没有简单到哪里,因为都很难理解,所以我简单描述一下: 每次写入都是在一个事务(tx)中完成的。 一个事务(tx)可以包含若干put(写入k-v键值对)操作...

2019-06-25 16:13:04 1145

原创 Docker容器的capability

linux capability是啥?资料来源:http://man7.org/linux/man-pages/man7/capabilities.7.html“For the purpose of performing permission checks, traditional UNIXimplementations distinguish two catego...

2019-04-26 17:33:12 3362

原创 容器Namespace - 2

容器通过namespace建立属于自己的一个相对隔离的环境,从上一篇《容器Namespace - 1》我们知道centos7默认没有启用user namespace。 上图显示容器的user namespace与宿主机是同一个ID:4026531837,接下来简单分析下docker创建namespace的代码。vendor/github.com/...

2019-04-26 16:47:21 325

原创 容器Namespace - 1

Namespace是怎么回事? Linux namespace,可以理解为将全局的操作系统资源,逻辑上划分成功能独立的单元。如进程号PID,这些个单元有各自独立的PID空间,还比如网络栈,这些个独立的单元有各自独立的路由表,网络接口。linux实现了mount、UTS、IPC、network、pid、user这六种namespace。下面先用unshare来测试实验梳理一...

2019-04-26 14:19:11 1845 1

原创 进程 vs 容器 vs 虚拟机

进程: 互相隔离的虚拟地址空间 运行中的程序,由操作系统调度执行 共享操作系统管理的资源(内存、网络栈、I/O) 版本管理、可移植性差容器: 命名空间实现资源隔离(UTS、IPC、PID、Network、Mount、User) 运行中的镜像,以服务的形式呈现,由操作系...

2019-04-19 17:25:25 278

原创 raw格式的镜像,如何在网络传输、备份时减少拷贝

raw 格式的镜像,不带matadata,就像一块空白的磁盘,读写效率比qcow2快近10~30%。 本文探讨下,在将这个镜像进行网络传输备份时,如何减少数据拷贝。如果一个近50G大小的文件在网络中进行传输的话,即占用带宽,拷贝花的时间也是比较漫长的。1. 看看创建raw镜像的一些参数root@test:~# qemu-img create -f raw a.img...

2019-04-03 10:52:30 1579

原创 kubernetes容器底层网络要求

容器可能部署在云上(公有云或者私有云),也可能部署在数据中心物理宿主机上。云的场景涉及到虚拟网络,数据中心场景就是传统的物理网络,这些环境的网络架构以及底层技术有着很大的差异,这一节分析下。 不管是云的场景还是传统的数据中心场景,部署容器的宿主机之间的网络,抽象归纳起来需要具备下面的两个条件:可以通过二层交换机、或者三层路由器互相访问。 源容器的“原始IP包”,经...

2019-03-22 17:35:22 734

原创 socket收包函数 buffer大小的设置

Ip_ssize_t recv(Ip_fd sock, void *buf, Ip_size_t len, int flags);Ip_ssize_t recvfrom(Ip_fd fd, void *buf, Ip_size_t len, int flags,struct Ip_sockaddr *from, Ip_socklen_t *fromlen);这个buf大小需要考虑啥,有啥...

2019-03-22 16:57:25 5489

原创 Calico网络方案

Fannel纯三层路由的方式实现不同宿主机间的容器通信,这种方式工作的前提是宿主机之间是二层连通的。需要注意的是,宿主机之间二层不连通的情况也是广泛存在的,这就不得不提到calico网络方案了。Calico网络方案同时解决了宿主机二层连通和不连通的的场景下,容器之间通过纯三层路由通信的问题。 Fannel通过etcd和宿主机上的fanneld维护路由信息,calico使用了BG...

2019-03-22 14:39:29 3558

原创 Flannel网络方案

这里讲一下Flannel网络方案,梳理下其工作方式,各个环节配置,以及转发包流程。Fannel项目是CoreOS公司主推的容器网络方案。目前实现的技术有三种,分别是:UDP Vxlan Host-GW1. UDP方式 Udp方式是Flannel项目最早支持的,也是性能最差的一种。目前已经被弃用,不过,这种方式最直接、也是最容易理解的跨主机实现。...

2019-03-22 11:48:37 1705

原创 Docker容器及kubernetes网络

本文讲述下docker容器以及k8s部署环境下,与网络相关的知识。读者需要对tcp/ip网络,交换/路由,网络虚拟化以及容器技术需要有一定的基础。1. 浅谈容器网络 容器container,就是一个被隔离的环境(Namespace)下,同时限制了访问权限(Cgroup)的进程运行时,它配置了属于自己的网卡,网络栈,就像物理机一样,可以访问外部网络,同时外...

2019-03-22 11:20:59 979 4

原创 Docker -- 一种基于Linux的容器技术,平台,解决方案

2019-03-08 11:38:34 302

原创 PF_PACKET说开去

什么PF_PACKET类型的socket PF_PACKET类型socket应用场合 数据层面:驱动程序怎么把报文送到相应的socket buffer 数据层面:内核驱动可以与用户态零拷贝吗? 1. 什么PF_PACKET类型的socket 创建socket的函数如下: fd = socket(int domain, int type, int prot...

2018-11-28 18:10:54 6986

原创 Socket Conception

       N年前写的一篇旧文,讲了socket的基本概念,socket地址,编程模型,各种API的使用。对初学者可以起到入门的作用,想进一步学习的,可以看看TCP/IP协议栈,Socket本身的实现。(阻塞是用信号量实现的,select用到的fd_set是怎么回事,epoll对比select的优越性,libevent是怎么dispatch的,socket buffer大小会引起任务等待,多线程...

2018-11-20 15:51:57 685

原创 gdb适用场景和不适用场景

工程中,经常用gdb调试bug,谈谈其适用性和不适用性。适合的场景:1)验证程序的逻辑             给定条件,得到正确的结果2)查看现场             各种全局、局部变量,对象的值              寄存器、内存              调用栈 不适合的场景:1)每次crack现象不一样的场景,即异常产生的场景不能反映导致异常...

2018-11-14 11:36:17 653

原创 gdb调试中两种令人费解的情况解释

gdb这个调试工具怎么使用,在于相关的命令的使用(break、watch、print、continue、next、step等),gdb如何调试,需要结合程序的设计,代码的逻辑,多实践总结。这里解释两个在实践中遇到的令初学者费解的问题: 1)为啥设置了断点 b write_pipe,gdb调试中,在断点处没有停下?      设想下面的情况,一个进程在后台运行过程中CPU占有率1...

2018-11-13 17:47:49 420

原创 Docker的容器镜像和存储驱动

 Docker作为一种容器技术,已经在工程实践中被广泛的应用,这里讲讲其镜像的管理和后端的存储驱动。 1. 什么是Docker镜像    镜像,英文单词为image,在计算机世界的很多领域里都曾经出现,常见的image有下面这些:Linux内核镜像(vmlinuz) 各种iso文件 虚拟机磁盘镜像(有qcow2、raw格式的文件,或者ceph块镜像)      这...

2018-11-05 10:17:27 1524

原创 Python实现网络爬虫

#!/usr/bin/env python# -*- coding: UTF-8 -*-# Author: GuangJun.Lv# Date: 2018/07/06import urllib2import jsonimport osimport timeimport datetimeimport csvts = '\t'Non = 'N/A'Date_CST = ...

2018-08-07 11:29:58 372

原创 Python脚本实现bonding,bridge管理(创建,端口Join/Leave)和配置(IP地址...)

#!/usr/bin/env python## author: guangjun.lv# V 1.0## bonding interface, bridge interface management utility# bonding create, destroy, port join bonding, leave bonding# bridge create, destroy,...

2018-08-07 11:28:44 443

原创 C++,实现Vector类,Vector实现Stack

#include <iostream>#include <cassert>#include <string.h>using namespace std;template <class Type>class vector{    public:        vector();        vector(int i);     ...

2018-08-06 11:30:33 1022

原创 Vmware虚拟机 静态手动迁移到Kvm

分别迁移了Guest OS基于CentOS和Window的VM,过程中,遇到的磁盘驱动问题:虚拟化磁盘控制有基于IDE、Virtio、SCSI诸如这些,不同虚拟化平台有差异,导致VM迁移后,虚拟机磁盘不能识别,系统蓝屏的现象。解决步骤:1)修改虚拟机模板,虚拟磁盘总线为IDE后,启动虚拟机      在/etc/sysconfig/modules/目录下,添加一个文件virti...

2018-08-03 17:00:07 1577

原创 C语言,用数组实现stack,用stack实现pipe

#include <stdio.h>#include <string.h>#include <stdlib.h>#define TRUE  1#define FALSE 0#define STACK_SIZE 1024typedef int bool;struct istack{    unsigned int top;    unsi...

2018-08-02 11:50:03 453

原创 P2v, V2v 实践

P2V(物理机转虚拟机)p2v,就是physical machine to virtual machine,物理机转换成虚拟机,物理机有硬件和软件资源两部分,虚拟机同样也有硬件和软件资源,只是硬件是虚拟出来的。p2v是把物理机的软件资源(操作系统,数据等)迁移到虚拟机,虚拟机的物理资源(CPU、内存、磁盘等),根据现场情况分配创建。 p2v,一般会通过转换整个物理磁盘,或者某个分区成某种格式的镜像...

2018-03-21 15:04:45 9299

原创 windows虚拟机对应的qemu进程cpu占有率116%

1.1 现象   在公有云平台,openstack计算节点上,如图Figure-1所示,一台windows虚拟机的qemu-kvm进程116%的占用cpu资源,如果Figure-2所示,该虚拟机仅有一个vcpu,因此该虚拟机已经满负荷的运行。                            Figure-1              Figure-21.2 分析步骤   通过下面步骤的分...

2018-03-16 17:53:30 6779 1

原创 openstack计算节点,CPU占用率100%

1.1 现象在openstack计算节点上,如Figure-1所示,使用top工具发现某些个虚拟机的进程占用cpu核一直在100%,系统的负载load average:5.32,表明有5个task处于(可运行+不可中断阻塞状态);使用sar -q 2,如果Figure-2所示,runq-sz(Run queue length (number of tasks waiting for run ti...

2018-03-16 17:26:54 3306

原创 网卡中断平衡,网卡多队列

分析网络的工具1)发包程序    内核源代码在 net/core/pktgen.c,make menuconfig,make -j 8    编译出pktgen工具,编译好的程序在目录samples/pktgen2)执行发包   执行脚本 ./pktgen_sample03_burst_single_flow.sh,会列出相关的帮助信息   下面两个命令是具体的执行发包命令   ./pktgen_...

2018-03-16 15:58:27 3181

原创 qemu cracks when shutdown vm

如上图,Qemu创建的XP虚拟机,用spicec连接到该虚拟机的桌面,关闭该虚拟机时,Qemu的主线程异常。(qemu版本:1.3.1,spice版本:0.12.5)用gdb 查看crash dump文件,发现是非法访问内存地址0x100000000导致,'Cannot access memory at address 0x100000000',该地址已经超过进程可以访问的范围根据

2016-02-14 17:59:35 608

原创 C语言,数的表示(整数)

编写test.c#include int main(){    long int a,b;    printf("sizeof int is %lu, sizeof long int is %lu\n", sizeof(int), sizeof(long int));    // the size of long int in 64bit machine is 8byt

2015-03-13 18:57:27 2331

原创 字符串倒序

编写测试程序,test.c#include char *reverse_str1(char *s){    int i;    unsigned int len;    char ch;    if (NULL == s)        return NULL;    len = strlen(s);    for(i=0; i    {

2015-03-10 11:20:03 521

原创 C语言,数组,数组名,数组地址

编写test.c#include #include typedef struct STUDENT_S{    char name[12];    int grade;    int score;} __attribute__ ((__packed__))STUDENT_T;int main(){    STUDENT_T *p;    S

2015-03-04 17:21:39 925

原创 usbredir client设计实现

介绍关于usbredir client功能的描述,可以参考文档《usbredir client 功能说明书》,这个文档,分析了在不同操作系统平台,如何实现这个功能。跨平台支持基于不同操作系统平台Windows和Linux,对于支持分门别类众多的usb外设,重定向都会用到libusb这个库来访问usb设备,也可以说重定向usb设备的驱动程序是基于libusb实现的。在仔细分析阅读了lib

2014-09-15 18:23:18 4175

容器和Docker

容器概念,实现原理、操作系统机制;Docker概念、整体架构,镜像机制等等

2018-09-10

空空如也

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

TA关注的人

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