somyjun
码龄12年
关注
提问 私信
  • 博客:128,611
    128,611
    总访问量
  • 49
    原创
  • 578,648
    排名
  • 34
    粉丝
  • 0
    铁粉

个人简介:十多年嵌入式系统,网络通信,虚拟化,云计算相关产品的软件设计开发

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2013-02-19
博客简介:

somyjun的专栏

查看详细资料
个人成就
  • 获得29次点赞
  • 内容获得11次评论
  • 获得153次收藏
创作历程
  • 3篇
    2021年
  • 5篇
    2020年
  • 13篇
    2019年
  • 14篇
    2018年
  • 1篇
    2016年
  • 3篇
    2015年
  • 7篇
    2014年
  • 3篇
    2013年
成就勋章
TA的专栏
  • golang
    4篇
  • gitlab
    1篇
  • Networking, Data Communication
    1篇
  • VDI (虚拟桌面)
    6篇
  • 虚拟化
    13篇
  • C/C++
    12篇
  • Shell脚本
  • Python
    2篇
  • 操作系统 (OS)
    2篇
  • 服务器性能优化
    5篇
  • Networking
    7篇
  • Data Communication
    2篇
  • Virtio驱动安装
    1篇
  • 容器docker
    4篇
  • kubernetes
    12篇
  • docker
    9篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

344人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

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

1. 前端static部署 微服务前端js,编译打包成的tar包,在部署阶段,需要解压缩到与这个微服务对应的location,这个过程分别在流水线的“代码打包”和“部署”这两个阶段完成。 代码打包: 通过下面的命令完成: cd xxx-yyy&& yarn --update-checksums && yarn && yarn build_test &...
原创
发布博客 2021.02.19 ·
304 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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

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

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

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

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

1. goroutine介绍2. 协程间消息机制
原创
发布博客 2020.10.29 ·
1151 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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

1. 什么是容器2.基础架构变迁(资源角度)3.基础架构变迁 (服务角度)
原创
发布博客 2020.08.27 ·
284 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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 ·
430 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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

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

runtime error: invalid memory address or nil defrference goroutine

go routine panic with:invalid memory address or nil defrference goroutine查看源代码:正确的写法是:
原创
发布博客 2020.06.21 ·
706 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

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 ·
13531 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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

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

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 ·
3557 阅读 ·
1 点赞 ·
0 评论 ·
5 收藏

容器Namespace - 2

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

容器Namespace - 1

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

进程 vs 容器 vs 虚拟机

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

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

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

kubernetes容器底层网络要求

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

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 ·
5722 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Calico网络方案

Fannel纯三层路由的方式实现不同宿主机间的容器通信,这种方式工作的前提是宿主机之间是二层连通的。需要注意的是,宿主机之间二层不连通的情况也是广泛存在的,这就不得不提到calico网络方案了。Calico网络方案同时解决了宿主机二层连通和不连通的的场景下,容器之间通过纯三层路由通信的问题。 Fannel通过etcd和宿主机上的fanneld维护路由信息,calico使用了BG...
原创
发布博客 2019.03.22 ·
3626 阅读 ·
3 点赞 ·
0 评论 ·
24 收藏

Flannel网络方案

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

Docker容器及kubernetes网络

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