
个人
文章平均质量分 83
高兴的才哥
啦啦啦,啦啦啦,我是卖报的小行家。
展开
-
Pod 中运行 gvisor tcp 三次握手失败问题分析
前言最近在用 gvisor 这个优秀的 project 重构我的项目,在使用过程中出现了一个诡异的问题,发现 gvisor 之后,tcp 的握手失败了。很奇怪,这里简单追踪记录一下环境Pod 基础镜像:ubuntu:latestGvisor 版本:gvisor.dev/gvisor v0.0.0-20220208035940-56a131734b85复现步骤使用 tun2socks 绑定在 tun 上,tun2socks -device tun://utun9 -proxy socks:原创 2022-03-27 13:40:32 · 4431 阅读 · 0 评论 -
Kubernetes 云原生开发工具
前言好久没有写文章了,主要是好像没啥进步,这里就来简单介绍一下我长期在做的一个项目吧,KubeVPN,一个可以连通 K8s 集群网络和本地网络的一个小工具初衷一直在想如果上了 K8s 的话,如何才能快速进行业务开发呢。其实这里还有一个开源项目 nocalhost,这个项目是公司项目,成功的进入了 CNCF sandbox ,这里尝试探索了在云端开发和在本地开发两种模式。下面就来简单来说一说这两类模式。云端开发将远端容器的启动命令修改为 tail -f /dev/null,任意一个挂起且不退出的命令原创 2022-03-09 18:01:13 · 255 阅读 · 0 评论 -
修复在 k8s runtime 为 containerd 时,端口转发不稳定问题
修复在 k8s runtime 为 containerd 时,端口转发不稳定问题抛出问题我们在开发nocalhost项目,此项目中有个功能叫做端口转发,内部使用了 k8s 的端口转发,在上面主动加了 heartbeat 心跳检查。 有用户反馈使用了 containerd 之后,端口转发不稳定,总是失败。复现步骤使用 Containerd 作为 k8s runtime, 并部署一个 PodPod 中监听业务端口开发端口转发请求正常,得到正确结果,愈合预期Pod 中关闭业务监听的端口请求失败原创 2021-10-02 09:57:58 · 2208 阅读 · 0 评论 -
k8s clientset 出现 Throttling request took 限流的解决方法
前言又是一个月的忙忙碌碌,但是没啥很大的收获。但是在忙碌过程中,还是出现了一些小问题,特此记录一下。由于我们是做nocalhost开发的,也就是开发一个k8s开发工具, 所以不断的和k8s打交道,然后有个需求是获取资源树结构,也就是- cluster - namespace - application - workloads - pod - deployment - statefulset - replicaset原创 2021-08-28 10:33:21 · 5314 阅读 · 0 评论 -
bridge to kubernetes使用以及和Telepresence的区别
Bridge to kubernetes特点下载volume,将配置的volume会全量下载在本地,代码中没有看到下载volume内容的信息配置链接version: 0.1env: - name: ALLOW_LIST_PATH value: $(volumeMounts:testvolume)这里会将volume名为testvolume的卷下载到本地,放在临时目录下,然后ALLOW_LIST_PATH这个value的值,就是零时目录的路径,可以在代码中,使用ioutil.Rea原创 2021-08-03 08:30:18 · 2139 阅读 · 0 评论 -
k8s pod terminal 断线重连
前言很久没有写博客了,貌似最近没有学到什么新知识,都是运用已知的知识,解决各种问题和功能。没办法了,那就把最近做的一个简简单单的功能,拿出来说说吧,功能很简单,需要支持 k8s pod terminal 断开重连。分析我们知道,使用命令kubectl exec -it pods/PODNAME -- bash [--kubeconfig /PATH/TO/KUBECONFIG] [--namespace NAMESPACE]也就是exec可以执行命令的方式获取到terminal,这样就可以在本地原创 2021-07-24 20:19:04 · 1597 阅读 · 0 评论 -
prometheus PromSQL使用小技巧
前言这个礼拜一面在找那个CrashLoopBackoff的原因,另一个是在尝试修复es报错Data too large的问题,还有一个任务就是解析告警规则了,因为新需求加了很多类型的告警,支持的维度也更多了,我们的告警使用的Prometheus + Alertmanager,之前的几篇博客也提到过,这里主要想记录一下我在解析规则这里,遇到的一些问题以及解法。抛出问题Counter类型计算过去一个时间段内的增量举例问题:计算revision_request_count过去五分钟的请求次数?问题分析:原创 2021-02-27 17:22:35 · 3683 阅读 · 0 评论 -
记录一次尝试修复elasticsearch Data too large问题
前言这周三,一边调试api crashloopbackoff的问题,一边准备写promSQL语句,然后开发小伙伴说环境3的es又挂了,表现就是查询数据报错:circuit_breaking_exception[[parent] Data too large, data for [<transport_request>] would be [1318476937/1.2gb], which is larger than the limit of [1237372108/1.1gb], real原创 2021-02-27 12:38:36 · 15537 阅读 · 2 评论 -
记录一次修复k8s pod长时间处于CrashLoopBackOff状态问题
前言这周一,新年后上班第一个完整周,年前一波需求已经评审过了,方案也已经制定好,所以年后就开始了如火如荼的写bug阶段,正在写go bug,突然企业微信,tapd弹出一条消息,提了一个缺陷单,处理人是我,顿时预感不妙,果然5秒后,测试同学那微笑的头像弹出来,嗯,完蛋,bug来了。测试同学告诉我,有一个node组件,使用chao注入故障,频繁杀掉主线程,大概会在第七轮杀掉主进程,pod会长时间处于crashloopbackoff阶段,很久才恢复正常。当时很疑惑,为什么第七轮会长时间处于crashloopba原创 2021-02-26 23:51:19 · 9229 阅读 · 1 评论 -
记录一次knative中按照header tag 切分流量不生效的问题
前言它来了它来了,它带着需求过来了,终于新需求方案评审来了,在这之前产品拉着我们看了许多需求,都是公有云对齐的需求,我们这里需要跟进的。然后由于在方案评审之前的做好方案,因此这里简单记录一下一个需求是需要按照用户配置的kv对来进行不同revision之前的流量切分。需求分析由于我们的云原生是基于knative做的,然后之前也有看过一些书介绍过knative,因此我记得kantive是原生支持header tag 流量切分的,链接,所以这里需要做实验验证一下,这是其一,其二是需求是一个revison可原创 2021-02-06 19:11:18 · 455 阅读 · 0 评论 -
动手实现一个定时器
前言很久没有写博客了,那是因为的确没有什么有意思的新知识可以拿来写写,感觉好像有点儿变懒了,倦怠了,没有之前那么有劲儿了,哎,可恶啊,这可是技术博客来着,你在这里抒发什么心情尼。好吧,其实也并不是一无所获,比如最近自己写着玩的任务定时器,就可以拿来水一篇博客的啊。简介事出有因,因为之前同事说他那边自己实现了一个时间轮,用于执行定时任务来着,就是kafka里边的timewheel,不过原版的时间轮是用来执行延时任务的(应该是一个类似于java.util.concurrent.DelayQueue的玩意儿原创 2021-01-08 21:18:15 · 444 阅读 · 0 评论 -
k8s中hpa使用问题记录
前言之前说了,hpa没有生效的问题,现在来说说hpa使用的问题。问题那么是个什么问题尼?问题就是hpa的百分比设置的太大了,例如:apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata: name: istio-ingressgateway namespace: istio-systemspec: maxReplicas: 5 minReplicas: 1 scaleTargetRef: api原创 2020-12-15 08:50:10 · 1597 阅读 · 0 评论 -
解决kubernetes中hpa没生效问题
前言今天我正在专心致志的敲go代码的bug,突然同事问到我们现在的服务数量太多了,同一个服务的实例pod数可能达到了十几个,能不能放在一个pod中,跑多个container的形式运行。当时我想了一下,就回答了:放在一个pod里边,这些container管理起来可能比较复杂一些,pod挂掉,所有的container都卒了,粒度太大。然后正准备继续写bug的时候,突然想到同事这么问的目的可能是性能优化,自然而然的就想到hpa了,联想到istio和knative的hpa问题还没解决,卒,好吧,来解决问题吧。问原创 2020-12-09 22:34:50 · 5411 阅读 · 0 评论 -
在mac主机上访问docker中运行的kubernetnes的pod容器(宿主机访问容器pod)
# 前原创 2020-12-03 18:50:22 · 1360 阅读 · 0 评论 -
kubernetes原生CI/CD工具Tekton
前言最近都是在做云原生相关的业务,所以对kubernetes自带的ci/cd工具tekton有一定的了解,所以和大家分享一下。介绍简单介绍一下tekton中的几个概念PipelineResource定义资源,例如输入输出参数等。Task/ClusterTask定义任务,也就是我们要执行的某一个或多个步骤构成的任务,任务模版。PipelineRun/TaskRun执行任务,也就是调用任务模版,并且传入PipelineResource资源,执行结束后,状态变为completed。演示这里展原创 2020-12-02 23:47:56 · 580 阅读 · 2 评论 -
k8s搭建私有docker registry仓库
前言因为要测试knative,所以需要使用到docker私有仓库,所以需要自建一个docker registry,主要步骤都是遵循docker hub官方文档来的,只不过我这里使用的是k8s而不是docker compose。存储由于私有仓库需要用到存储,因此使用local storage的方式存储数据。定义namespace,如下:apiVersion: v1kind: Namespacemetadata: name: docker-registry需要自定义storageclass原创 2020-11-30 21:37:11 · 5167 阅读 · 0 评论 -
knative revison创建pod报错x509问题记录
前言今天遇到一个问题,那就是knative创建的revision报错,x509,不信任的证书,但是在主机上,docker pull是没有问题的。现状用户上传含Dockerfile的源码 -->上传到到三方存储 -->使用tekton 添加一步kaniko构建镜像–>kaniko docker push到私有registry仓库 -->使用knative的revision,创建不同的版本(作用类似于deployment) -->revision创建pod由于使用原创 2020-11-16 21:13:05 · 697 阅读 · 0 评论 -
使用webshell链接kubernetes pods
websocket链接kubernetes pods前言分析实践注意总结后记前言这个周一fetch到一个任务,前端需要使用webshell的方式,链接到正在使用中的kubernetes pods,实现这样的效果kubectl exec -it podName -c containerName -n namespaceName [bash,sh]分析ok,任务来了,怎么实现尼?然后就在Google了一下websocket kubernetes pods关键字,原来kubernetes早就想到可能会原创 2020-11-15 16:42:21 · 2157 阅读 · 0 评论 -
云原生之云函数云应用实现
前言最近在做云原生相关的业务,简单梳理了一下项目中的实现,所以特地记录一下用到的技术以及知识点。云函数/云应用云函数/云应用都是使用knative实现的,配合istio进行流量控制,具体体现出来就是这样的伪代码:import(metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "knative.dev/serving/pkg/apis/autoscaling/v1alpha1"servingv1 "knative.dev/serving/pkg/apis原创 2020-11-10 22:53:39 · 767 阅读 · 0 评论 -
记一次使用ycsb工具对mongodb进行性能测试过程
前言最近在做性能测试,目的是要优化mongodb的性能,要求5w qps,mongodb已经做了分片,三台mongo shard存储,三台mongos 路由,三台configserver,用于记录路由和存储的对应关系。YCSB简介ycsb是一款性能测试工具,用Java写的,并且什么都可以压,像是mongodb,redis,mysql,hbase,等等,感觉还是很厉害的。并且是有apache2.0的认证的,官网在github上,有讲如何安装和使用,个人建议放到pod中执行,比较方便。其中mongodb原创 2020-10-27 21:22:26 · 1589 阅读 · 3 评论 -
SpringBoot中优雅统一回包格式
前言之前有写过博客简单过了一下,如果修改回包格式的。现在又找到一种新的方法,并且这样的方式好像更加合理。所以特地记录一下。需求其实需求很简单,就是对回包格式经行统一的封装。比如:public class Response { private int code; private String requestId; private T data;}而我们的业务,一般都是回复Modle对象,比如:@RestControllerpublic class HelloContr原创 2020-10-25 18:48:46 · 440 阅读 · 0 评论 -
在Spring中实现使用mybatis执行原生字符串SQL语句功能
前言这其实很早之前就应该写一写的,也就是在项目重构过程中,需要将原来的基于Spring JdbcTemplate执行拼接语句的sql写法,移植到mybatis上去。分析其实需要已经很明确了,之前使用的是abstract Dao的方式,在abstract dao中,持有一个JdbcTemplate,...原创 2020-10-18 20:48:57 · 2338 阅读 · 0 评论 -
kubernetes中Prometheus使用本地存储储存数据
1,前言入职大概有四个月了,中间一直在做监控告警相关的任务,使用到的三方组件是,Prometheus和alertmanager,在整个使用过程中,对Prometheus和kubernetes都有了一定了解,今天打算说说在k8s集群中使用local storage存储数据的问题。2,抛出问题。在k8s集群中,pod是可以在各个node之间调度的,当某个node的资源不够用的时候,pod就有可能被调度到别的node上去。那么问题来了,如果使用本地存储的Prometheus被调度到别的node上,使用新节点原创 2020-10-11 22:15:21 · 1267 阅读 · 0 评论 -
解决alertmanager重复发送消息的问题
1,问题在前一篇博客中有讲到说使用alertmanager,即便设置了repeat_interval,但还是收到了两条告警,且间隔时间是for标签的时间alertmanager片段示例:routes: - receiver: message match: xxxx:xxxx repeat_interval: 3600s continue: truereceivers:- name: message webhook_configs: - send_re原创 2020-10-11 13:10:56 · 11463 阅读 · 7 评论 -
解决上次遗留的问题-Prometheus
0,前言在上篇博客中有提到的问题,统计一段时间内,按照一定的step切分,然后每一个小段汇聚(avg, max, min, sum…),之前使用的是_over_time(),每一个小段一次请求,感觉这样有问题,所以先记录了下。1,方案使用query_range配合_over_time(),query_range使用start、end、step参数,将时间序列上切分成一段段,然后每一段,使用_over_time()统计方法进行聚合。2,分析2.1 之前失败的原因之前是知道有query和query_原创 2020-10-06 19:12:25 · 542 阅读 · 0 评论 -
kubernetes client for java使用踩坑记录(io.kubernetes.client.ApiException: Forbidden)
0,前言之前说的,使用k8s client 在pod内部操作外部k8s集群,curd configmap,但是在这里遇到一个问题,就是k8s client需要提供/root/.kube/config文件作为参数,如何提供这个配置文件呢?1,想到的解决方案1,代码写死。缺点:(1)当node为master节点时,master:127.0.0.1:6443,需要把这个本地地址改为ip v4地址.(2)如果node挂掉,pod需要调度到别的node上时,提供的master地址需要随之变化。2,dock原创 2020-09-21 23:25:08 · 10930 阅读 · 10 评论 -
Kubernetes和prometheus以及alert manager使用总结
Kubernetes和prometheus已经alert manager使用总结0,前言1,背景:2,方案:1,可行性分析1,configmap可以支持挂在到pod内,并且删除configmap的时候,并不会将挂载到pod内的文件删除,因此可以在规则变化后,删除configmap,并创建一个新的,这时会将新的文件挂载到pod内。2,在pod内支持使用kubernetes client,这里可以直接使用kubernetes提供的官方client,在容器内操作容器外的集群。3,使用kubernetes clie原创 2020-09-21 22:10:11 · 732 阅读 · 0 评论 -
ZGC占位
reference:https://wiki.openjdk.java.net/display/zgc/Main#Main-EnablingZGChttps://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-collector1.html#GUID-A5A42691-095E-47BA-B6DC-FB4E5FAA43D0有时间再看,先占个位,大家有兴趣的可以直接去官网看。...原创 2020-05-24 11:41:03 · 247 阅读 · 0 评论 -
G1垃圾回收器的补充1
话说我这是直接从Oracle拷贝下来的文档,希望不会有版权问题。(侵删)Oracle官方链接:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html 10 Garbage-First Garbage Collector Tuning This section describes how to adapt and tune the Garbage-First garbage c翻译 2020-05-24 11:32:58 · 845 阅读 · 0 评论 -
G1垃圾回收器的补充
话说我这是直接从Oracle拷贝下来的文档,希望不会有版权问题。(侵删)Oracle官方链接:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc.html#garbage_first_garbage_collection9 Garbage-First Garbage Collector The Garbage-First (G1) garbage collector is a server-st..翻译 2020-05-24 10:43:20 · 506 阅读 · 0 评论 -
JVM内存和GC相关
这里简单的回顾了一下JVM内存模型和GC回收器相关的知识点。由于画图的时候比较青睐Office的Visio,所以可能贴图不打清晰。为什么写这篇文章呢,主要是懂了JVM内存模型,就可以在不自觉中写出优良代码,比如使用DirectByteBuffer,因为这个是在stack上分配的,栈帧弹出就消失了,还有就是Thread Local Allocation Buffer,也都是分配内存的时候,首先在...原创 2020-05-06 20:38:06 · 969 阅读 · 0 评论 -
HashMap内部维护的是一颗树还是多棵树?
答案:bin(bucket)个数颗树。先给出答案,然后说为什么?我们都知道HashMap为了解决hash冲突,使用了数组+链表的方法,同时也引入了红黑树。当有key的hash值冲突的时候,会放进链表中。那么什么时候会进行树形化,变成多棵树呢?答案是链表的长度超过8,也就是每一个桶中hash冲突的个数为8。测试代码:public class HashMapTreeifyTest {...原创 2020-05-04 17:00:06 · 286 阅读 · 0 评论 -
记一次socketchannel在write ByteBuffer是总是write=0的问题
要做一个nio通信模型,使用java.nio包做,但是在socketchannel写出的是时候,写出总是0。我们知道socketchannel的写出是ByteBuffer。当时的写法为public static ByteBuffer write(Object object) { FSTObjectOutput objectOutput = util.FSTUtil.get...原创 2020-05-01 11:19:31 · 1190 阅读 · 0 评论 -
MySQL闭包表
测试数据来自于博客:https://www.cnblogs.com/linjiqin/p/9523033.html闭包表是为了解决在数据库中存储树形数据而引出的解决方案。通常闭包表会有两个表,一个记录节点信息,一个记录关系。举例如下:# 示例树# root(0)# |# |____a(1)# | |____a1(2)# | |____a2(3)...原创 2020-02-29 18:36:01 · 3443 阅读 · 0 评论 -
奇闻轶事之一
问题描述:项目(使用jdk1.8)中有个方法用到了PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);但是编译mvn clean install -Dmaven.test.skip=true总是失败,报错信息如下:cannot access com.sun.beans.intro...原创 2019-11-04 15:58:04 · 714 阅读 · 0 评论 -
Virtualbox虚拟机之Ubuntu扩容
circumstance:根分区不够用了。原因是创建虚拟机的时候,创建的磁盘太小了,导致根磁盘太小。solution:step1:d:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd D:\mooc-os-2014\mooc-os\mooc-os.vdi --resize 300000%...10%...20%......原创 2019-10-12 10:49:10 · 869 阅读 · 0 评论 -
Mongodb使用小记1之@DBRef
今天帮同事解决了一个@Dbref引用出错的问题。Cannot create a reference to an object with a NULL id.找了半天,在Stack Overflow上边有篇文章,深得我意。还原场景:Document@TypeAlias("user")public class User { @DBRef private Billing bi...原创 2018-07-09 11:38:04 · 2143 阅读 · 0 评论 -
Mongodb使用小记2之elemMatch匹配
匹配查询数据类型如图其中@Documentpublic class GroupBuy extends AbstractEntity { private String bookTitle; private String bookId; private Double bookPrice; private JFile bookCover; private Double pr...原创 2018-07-24 12:25:17 · 4958 阅读 · 0 评论 -
Nagios php调用bash shell获取服务器状态
<?phprequire_once(dirname(__FILE__) . '/../componenthelper.inc.php');nagiosxicustomendpoints_component_init();function nagiosxicustomendpoints_component_init(){ $args = array( ...原创 2018-05-06 17:03:43 · 166 阅读 · 0 评论 -
mongo使用小记0之Query和Criteria查询语句
1,查询列值最大Query query = new Query();query.addCriteria(Criteria.where("phoneOrEmail").is(phoneNum));query.with(new Sort(Direction.DESC, "expiry"));VerificationCode verificationCode = mongoTemplate....原创 2018-05-06 17:01:24 · 4766 阅读 · 0 评论