博客

xfsquota:一个便捷的管理xfs磁盘配额的命令行工具

#xfs

用golang实现的用于设置xfs磁盘配额的工具

Read more →

April 23, 2022

emptyDir 通过xfs_quota 强制限制大小

#emptyDir#kubernetes

k8s默认的empryDir只是软限制,这里通过hack k8s的代码增加强制的限制

Read more →

October 30, 2021

csi-driver-host-path安装

#csi#host-path

集群 v1.19.0 安装 https://github.com/kubernetes-csi/csi-driver-host-path/blob/master/docs/deploy-1.17-and-later.md VolumeSnapshot CRDs and snapshot controller installation # Apply VolumeSnapshot CRDs version:v2.0.1 kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v2.0.1/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v2.0.1/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v2.0.1/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml # Create snapshot controller kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v2.0.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v2.0.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml Deployment 代码地址:https://github.com/kubernetes-csi/csi-driver-host-path

Read more →

November 28, 2020

如何编写一个CSI插件

#csi

这里以csi-driver-host-path作为例子,来看看是如何实现一个csi插件的? 目标: 支持PV动态创建,并且能够挂载在POD中 volume来自本地目录,主要是模拟volume产生的过程,这样就不依赖于某个特定的存储服务 预备知识 在上一篇文章中,已经对CSI概念有个了解,并且提出了CSI组件需要实现的RPC接口,那我们为什么需要这些接口,这需要从volume要被使用经过了以下流程:

Read more →

November 27, 2020

CSI - 容器存储接口

#csi

容器存储接口(CSI)是用于将任意块和文件存储系统暴露给诸如Kubernetes之类的容器编排系统(CO)上的容器化工作负载的标准。 使用CSI的第三方存储提供商可以编写和部署在Kubernetes中公开新存储系统的插件,而无需接触核心的Kubernetes代码。 具体来说,Kubernetes针对CSI规定了以下内容:

Read more →

November 26, 2020

源码剖析:KEDA是如何工作的?

#keda#kubernetes

KEDA是基于Kubernetes的事件驱动自动缩放组件,它为Kubernetes中运行的任何容器提供了基于事件驱动的扩缩容能力

Read more →

November 8, 2020

源码分析:KEDA是如何工作的?

#keda#源码阅读

文章中源码是基于KEDA 2.0( 50bec80)来进行分析 keda 2.0 要求k8s集群版本 >=1.16 KEDA 在2020年11月4号release了2.0版本,包含了一些新的比较有用的特性,比如ScaledObject/ScaledJob中支持多触发器、支持HPA原始的CPU、Memory scaler等。 具体的安装使用请参考上一篇文章使用keda完成基于事件的弹性伸缩,这篇文章主要深入的看下KEDA内部机制以及是如何工作的。

Read more →

November 4, 2020

KEDA - 一个基于事件驱动的伸缩控制器

#keda

keda是一个基于事件驱动的伸缩控制器,可以实现应用缩容至0,以及从0开始扩容。目前已支持像CPU/Memroy、Mysql、Prometheus、Redis等20多种事件来源(Scaler)。

Read more →

November 4, 2020

使用keda完成基于事件的弹性伸缩

#keda#kubernetes

文章中使用的是keda 1.5版本,2.0还未release 1.5版本支持deployment,job两种资源。而在2.0增加了StatefulSet以及自定义资源

Read more →

September 14, 2020

将镜像tar包通过API直接push到registry仓库

#docker#image

为了实现docker tar包能够直接通过页面上传,调研了一下registry的api,以及如何解析tar包(其实就是docker daemon程序实现的部分)。

Read more →

July 10, 2020

在x86_64机器上构建arm64镜像

#docker#arm64

通过qemu-user-static在x86_64机器上构建arm64镜像

Read more →

June 5, 2020

如何在Kubernetes中创建一个自定义Controller?

#crd#controller#kubernetes#operator

Custom Resource是扩展Kubernetes的一种方式(另外一种就是通过聚合层API apiserver-aggregation),而controller对指定的resource进行监听和执行对应的动作(watch,diff,action)。

Read more →

May 18, 2020

用vim保存文件和echo命令到底有什么不同?

#vim#echo#inotify

调试filebeat程序,发现日志被重复上传。深入验证并对比下使用vim写入文件并保存和使用echo有什么不同?

Read more →

May 13, 2020

postgres入门

#postgres

主要介绍postgres数据库的基本操作以及与mysql的对比

Read more →

May 4, 2020

记一次问题排查:为什么在POD无法通过Service访问自己?

#hairpin#kubernetes

记一次问题排查:为什么在POD无法通过Service访问自己?,主要介绍分析过程

Read more →

April 30, 2020

singleflight包原理解析

#singleflight#并发控制

singleflight包主要是用来做并发控制,常见的比如防止 缓存击穿,我们来介绍一下其使用以及原理

Read more →

March 8, 2020

分析kubernetes中的事件机制

#kubernetes#event

Kubernetes源码阅读:event是如何写入和处理的

Read more →

March 3, 2020

利用Kubernetes中的leaderelection实现组件高可用

#go#kubernetes

如何使用leaderelection以及对其源码进行分析

Read more →

February 15, 2020

如何在Go项目中输出版本信息?

#go

这篇文章主要描述如何在构建Go项目的时候通过ldflags参数对变量进行动态赋值

Read more →

January 10, 2020

Kubernetes容器日志收集方案

#k8s#filebeat#log-pilot

容器日志收集方案对比,以及对log-pilot组件原理分析

Read more →

October 22, 2019

Cluster Autoscaler:集群自动扩缩容

#k8s#ca

CA 组件可以实现集群节点的自动增删,关于基本使用以及原理部分介绍

Read more →

July 2, 2019

k8s网络组件:calico

#flannel

前提已经安装好k8s集群 安装calico 安装其实很简单,已经集成在两个yaml文件中 calico 版本: v3.2.3 安装必看 如果安装过flannel组件,需要先去除docker启动项中 $DOCKER_NETWORK_OPTIONS参数 删除已有的/etc/cni/net.d,/opt/cni/bin文件 kubelet和kube-apiserver启动项中需要加上--allow-privileged=true,保证calico-node需要以特权模式运行 这里calico文件采用了CrossSubnet模式 指定k8s使用CNI插件 在kubelet启动参数中加入以下参数:

Read more →

October 12, 2018

k8s网络组件:flannel

#flannel

Flannel是一个专门为k8s定制的网络解决方案,主要解决POD跨主机通信问题,这里主要讲述Flannel是如何实现的。 安装集成在k8s上有两种方式,一种是利用etcd存储整个集群的网络配置,另外一种是利用kubernetes的api 获取网络配置信息,分别如下:

Read more →

September 26, 2018

k8s源码阅读(一):源码结构

#k8s

k8s源码包的作用,手动编译k8s源码以及如何阅读k8s源代码

Read more →

September 12, 2018

docker pull 翻墙下载镜像

#docker

通过修改docker service文件,使得在docker pull的时候使用代理

Read more →

September 9, 2018

在CentOS上搭建Kubernetes集群

#k8s

主要是自己在搭建过程中整理的文档,如果来构建一个多节点的kubernetes集群,以服务的方式,注册到系统

Read more →

September 7, 2018

聊聊连接池

#go#pool

以下主要使用Golang作为编程语言 为什么需要连接池我觉得使用连接池最大的一个好处就是减少连接的创建和关闭,增加系统负载能力, 之前就有遇到一个问题:TCP TIME_WAIT连接数过多导致服务不可用,因为未开启数据库连接池,再加上mysql并发较大,导致需要频繁的创建链接,最终产生了上万的TIME_WAIT的tcp链接,影响了系统性能。

Read more →

November 20, 2016

开源项目:wechat sdk

#wechat#go

一直很想自己用golang写个微信的sdk,目标是简单好用,所以利用闲暇时间(周末,中秋😁),就做出来。 项目地址:https://github.com/silenceper/wechat 目前实现了消息管理,微信网页授权,菜单管理,素材管理几个接口,看下他的基本使用:

Read more →

September 16, 2016

dcmp

#dcmp#etcd#confd

Distributed Configuration Management Platform 提供了一个etcd的管理界面,可通过界面修改配置信息,借助confd可实现配置文件的同步。 GITHUB:https://github.com/silenceper/dcmp API采用的是Gin Framework,写起api应用来非常方便,前端尝试了一下react。

Read more →

August 2, 2016

Golang中http包默认路由匹配规则阅读笔记

#wechat#go

一、执行流程构建一个简单http server: package main import ( "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) }) log.Fatal(http.ListenAndServe(":8080", nil)) } 使用http://127.0.0.1:8080/ 就可以看到输出了

Read more →

May 28, 2016

tcp time_wait问题

#tcp#mysql#go

time_wait 连接数过多

Read more →

January 3, 2016