https://www.gravatar.com/avatar/ca935f89022e585ea1380ef7ef122bf6?s=240&d=mp

好记性不如烂笔头

Python 中的迭代器与生成器

导读 这篇文章主要介绍了 python 当中的迭代器与生成器,在涉及到大数据量的场景应该考虑使用迭代器与生成器。 可迭代对象 如果一个对象实现了 __iter__ 方法,那么我们就称它是一个可迭代对象。如果没有实现 __iter__ 而实现了 __getitem__ 方法,并且其参数是从0开始索引的,这种对象也是可迭代的,比如说序列。

docker 原理之存储驱动

导读 提起 docker 大家应该耳熟能详,如使用 docker 所带来的持续集成、版本控制、可移植性、隔离性、安全性等诸多好处。docker 的使用也很方便,但是其内部原理是什么样的?都有哪些组件?之间是如何相互协作的呢?这是 docker 系列文章,每篇讲解一个知识点,可以更好的消化。 这篇谈谈 docker 的存储驱动。受限作者水平,如有不对之处,欢迎批评之处。

OSCHINA 搬迁申明

导读 我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:russellgao,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply

harbor gc 时遇到的坑

导读 Harbor 是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。 在使用的过程会有 GC 的需求,可以想象下这几种场景: 在 CI 的过程,同一个版本(SNAPSHOT/latest)编译很多次,只有最后一次产生的才有 tag ,那么之前的产生 blob 去哪了,或者还有用吗 ? 镜像的生命周期已经结束,需要从仓库中删除,应该怎么操作?要知道在 Harbor 界面上删除只是标记删除,并不会释放存储空间。 Harbor / Docker 官方已经提供比较完善的 GC 方案,可以解决 80% 的问题,但是 GC 的过程中还可能出现一些奇怪的现象,本文主要记录在 Harbor GC 过程中踩过的坑。

如何利用 golang 操纵 oracle

导读 这篇文章主要介绍如何利用 golang 操作 oracle 数据库,包括基本的增删改查,本地 oracle 环境搭建,以及如何在 docker 中运行。 oracle client 镜像构建并不容易,花了很长时间去踩坑,文中提供了已经构建好的基础镜像,可以直接使用,这里贡献给大家。

kubernetes 中 pod 是如何启动的呢

导读 Pod 应该算是 kubernetes 的基本盘,Pod 是 kubernetes 的最小调度单位,我这里有个问题,说通过 kubectl apply -f 创建一个 Pod ,从执行到 Pod 正常运行 kubernetes 做了什么事情呢?都有哪些组件参与呢?这篇文档主要讲述从提交 Pod 的创建请求到 Pod 的正常运行的这个过程追踪。

openresty 配置文件 (一)

导读 openresty(nginx plus) 在日常工作中用的应该比较多,要想真正了解清楚其原理并不容易。我尝试着从配置的角度去分析 nginx 的基本原理。这篇主要介绍 nginx.conf 这个配置文件,后续再介绍其他的配置文件。 nginx.conf 中主要配置全局配置,配置好之后一般很少改动。

kubectl 常用命令

导读 kubectl 应该是每个接触 kubernetes 的人都会接触的一个组件,它带给我们强大的命令行体验,本篇文章就是介绍 kubectl 中的一些常用命令,在结合一些具体的使用场景说说如何利用 kubectl 实现。好记性不如烂笔头,在这里尽可能全的罗列,方便后续 用的时候查找。如果能帮到您就收藏起来吧(😄)。

markdown中插入表情的方法

导读 markdown 中也是可以插入表情,但并不是所有的markdown 解析器都支持,我本地用的 Goland、MacDown 不支持,但是 hugo 是支持的, 写作的过程可以适当加入一些表情,可以表达当时写作的一个心情。

python中的多线程与多进程(二)

导读 在上一篇“python中的多线程与多进程(一)中介绍了进程、线程的概念、基本用法和在 python 中使用遇到的一些坑, 这在一篇中会介绍一些高级的用法,当然更多的是遇到的坑,换言之这是一片避坑指南。 concurrent.futures 我们都知道在 python 中,多线程的标准库是使用 threading , 如 :

python中的多线程与多进程(一)

导读 在编码的过程,多线程、多进程、并发、并行这些概念肯定不止一次的出现在我们面前。概念理解是一回事,但是能真正用好又是另一回事。不同的编程语言,并发编程难易程度相差还是很大的,正好这几天梳理了他们之间的关系与区别,分享给大家。(基于自己的理解谈谈,如果不对欢迎指出) 灵魂拷问:什么是线程?什么是进程? 进程 进程是资源分配的最小单位。 线程 线程是 cpu 调度的最小调度。线程又分为内核线程,用户线程。

istio中的ELK实践

ELK 这篇文档是由我投稿的云原生社区的文章,节选自 istio-handbook,如果有兴趣可以参考这本书。 ELK 指的是由 Elasticsearch + Logstash + Kibana 组成的日志采集、存储、展示为一体的日志解决方案,简称 “ELK Stack”。ELK Stack 还包含 Beats(如Filebeat、Metricbeat、Heartbeat等)、Kafka等成员,是目前主流的一种日志解决方案。

细谈 Golang 中那些设计优美的细节-defer

背景 在学习和使用 Go 的过程中发现,Go 在语言层面的设计有很多有趣的地方,所以准备用一个系列来细数这些有趣的地方。写这个系列一是为了加深自己的理解,二是愿意分享,分享 Go 中有趣的设计细节。每篇都会通过一个例子讲述一个细节,感兴趣的话可以关注一下哟! Go 介绍 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

自己开源的项目 - toolkit

toolkit 作用 用于提供工作效率的工具箱,里面有各种工具,就比如真实工具箱中里面有扳手,各种大小的起子,钳子等 某些场景下确实可以达到事半功倍的效果 安装 源码安装 有 go 语言环境的可以直接用源码进行编译运行 1 2 3 git clone https://github.

pod 配置文件说明

Pod的定义文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 apiVersion:v1kind:Podmetadata:name:stringnamaspace:stringlabels:- name:stringannotations:- name:stringspec:containers:- name:string# 使用的镜像image:stringimagePullPolicy:[Always | Never | IfNotPresent]command:[string]args:[string]# 工作目录workingDir:stringvolumeMounts:- name:stringmountPath:stringreadOnly:booleanports:- name:stringcontainerPort:inthostPort:intprotocol:stringenv:- name:stringvalue:stringresources:limits:cpu:stringmemory:stringrequests:cpu:stringmemory:stringlivenessProbe:exec:command:[string]httpGet:path:stringport:inthost:stringscheme:stringhttpHeaders:- name:stringvalue:stringtcpSocket:port:int# 多久之后去检查initialDelaySeconds:number# 健康检查超时时间timeoutSeconds:number# 多长时间检查一次periodSeconds:number# 成功的阀值,检查几次成功才算成功successThreshold:0# 失败的阀值,检查几次失败才算失败failureThreshold:0securityContext:# 详细参见 pod_SecurityContext 章节# securityContext 可以配置pod 或者container 级别runAsUser:1000# 运行的用户runAsGroup:3000# 运行的用户组fsGroup:2000privileged:bool# 是否以privileged 权限运行,即这是这个进程拥有特权allowPrivilegeEscalation:bool# 控制一个进程是否能比其父进程获取更多的权限,如果一个容器以privileged权限运行或具有CAP_SYS_ADMIN权限,则AllowPrivilegeEscalation的值将总是truecapabilities:add:["NET_ADMIN","SYS_TIME",".