自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

polarwu的博客

好记性不如烂笔头

  • 博客(30)
  • 收藏
  • 关注

原创 升级ingress-nginx-controller的nginx版本

线上的k8s使用nginx所在的边缘节点来将外部访问导流到集群内部容器,ingress-nginx-controller是k8s众多ingress controller实现中的一种,以agent+nginx的方式提供服务。agent通过watch k8s的ingress、configmap、endpoint等资源的变化,修改nginx的配置文件,并负责nginx的reload等工作。如果ingre...

2019-02-26 15:27:02 8828

原创 kubelet驱逐与buffer/cache的计算关系

线上的容器出现pod迁移,查看kubelet日志,发现主机内存存在压力,所以导致kubelet驱逐pod。同时查看主机的内存占用,确实发现主机的可用内存小于预留资源,所以发生pod迁移貌似可以理解。同时也发现系统的buffer/cache占用有点多,虽然知道linux在内存紧缺的时候会回收部分buffer/cache,且之前曾分析过《docker内存监控与压测》一文,对docker容器监控做过分析...

2019-01-13 19:20:32 3424 2

原创 通过prometheus实现k8s hpa自定义指标 (四)

在本系列文章的上一节通过prometheus实现k8s hpa自定义指标 (三),我们介绍了编写一个最基础的custom metrics API server所需要的库,该库作为prometheus adapter的基础。在这一节中,我们主要分析prometheus adapter。由于我安装的k8s-prometheus-adapter版本为v0.2.0,这里主要是分析v0.2.0的原理和源码...

2018-11-27 20:29:15 2498

原创 通过prometheus实现k8s hpa自定义指标 (三)

在本系列文章的上一节通过prometheus实现k8s hpa自定义指标 (二),我们从开发者角度理解k8s hpa工作的流程。这节我们将通过一个最基础的custom metrics API server介绍开发一个自定义metrics-apiserver需要完成哪些方面的工作,作为后继分析prometheus-adapter的基础。开发Custom Metrics API Server适配器...

2018-11-27 19:11:39 1367

原创 通过prometheus实现k8s hpa自定义指标 (二)

上一篇通过prometheus实现k8s自定义hpa (一),部署了prometheus和k8s-prometheus-adapter,实现基于prometheus的hpa自定义指标扩缩容。通过安装组件和演示应用podinfo,最后再配置podinfo的hpa yaml文件,再配合我们的压测程序就能实现pod自动扩缩容。虽然k8s的hpa controller能够实现我们的预期,但是在跟着教程验证...

2018-11-26 21:01:48 2162

原创 通过prometheus实现k8s hpa自定义指标 (一)

在前面的k8s controller-manager之hpa源码分析一文中曾经分析了k8s的hpa源码,讲解了hpa的流程,但只是基于传统的hepaster做分析,并没有对分析自定义metric指标,但在实际的应用使用中,基于cpu/内存的自动伸缩指标并不能完全的满足业务需求,因此需要用到自定义metric指标进行自动伸缩,这里使用prometheus作为第三方metric收集器,并通过k8s-p...

2018-11-26 17:51:35 7818 1

原创 nginx-ingress controller简单实现基于http header、cookie、arg的灰度发布

前面讲了一篇使用nginx流量切分的文章做A/B测试,今天讲一下怎么简单使用nginx实现基于http header、cookie、arg实现简单的灰度发布。总的来说实现非常简单,只是在nginx配置里的location块里加入相应的配置即可。假设有个应用的两个版本,分别为old和new,如下面所示:使用$http_ 获取http请求的header,根据配置中是否为完整或者正则匹配,匹配foo...

2018-11-14 17:21:29 6295

原创 使用nginx做A/B测试

通常情况下,我们在开发新版本的代码,并将它发布到集群中,我们会将现网的一小部分用户的访问引流到新版本,用来验证产品的体验以及发现bug第二个。通常我们会做A/B测试,A/B测试能够让我们深入了解用户的行为。由于我的集群是k8s,我使用nginx作为我的ingress controller实现,这里我们主要谈怎么使用nginx实现这个功能。nginx提供了“nginx_http_split_clie...

2018-11-08 15:53:49 1581

原创 kube-proxy工作模式解析(一) -- iptables

我们都知道在创建service资源对象时,会为该服务分配一个虚拟的ip地址,我们访问该ip时,它会将请求转发到具体的后端pod上。service的作用就相当于反向代理,我们需要理解的是这个服务的ip是虚拟的,既然它是虚拟的,那我们是通过什么机制去访问的呢。service在很多情况下只是一个概念,而真正让service发挥作用的其实是kube-proxy组件,我们需要理解kube-proxy的原理和...

2018-09-26 18:55:47 2694

原创 kubelet sandbox创建与calico cni网络配置流程 (三)

上一篇文章分析了calico cni的调用流程,通过分析calcio cni的代码,我们知道kubelet在创建sandbox容器后对该容器的网络配置其实是通过调用calico cni的二进制文件进行配置的,而上一节的代码中我们遗留了calico-ipam没有深入分析。作为整个操作的一部分,CNI插件需要给interface分配并维护一个IP地址,并且还要安装一些和该interface有关的必要的...

2018-09-14 18:03:22 2075

原创 kubelet sandbox创建与calico cni网络配置流程 (二)

上一篇文章分析了kubelet创建pod时首先需要创建一个sandbox容器,该容器保证了k8s的pod中多个容器使用同一个网络命名空间,每个容器能够像访问本地端口一样访问对端容器端口。虽然sandbox的创建流程和运行时参数配置的代码我们都一一分析过了,实际的容器网络也是调用cni插件配置,但是cni插件是怎么工作的呢,这一节我们着重从cni(以caliclo为例)插件一端分析网络配置过程。...

2018-09-13 12:50:57 1936

原创 kubelet sandbox创建与calico cni网络配置流程 (一)

本文基于k8s release 1.9分析kubelet sanbox穿件与cni网络配置流程。 首先谈下docker的四种网络模式,它们分别为: - bridge模式:使–net =bridge指定,默认设置;bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将并将一个主机上的Docker容器连接到一个虚拟网桥上。 ...

2018-09-10 12:42:09 4136

翻译 理解kubernetes’ tools/cache包: part 7

在本系列的part 6中(如果需要,可以从头开始),我们得到了一个相当完整的sharedIndexInformer结构视图及其导致的所有概念。现在是时候看看这一切的行为方面了。WordPress似乎可以扩展所有图片上传,因此您将不得不眯着眼睛。 我还创建了一个Dropbox链接到全尺寸图像。在下图中,我使用了UML 2.0构造。 具体来说,填充箭头表示同步调用,实线上的空心箭头表示异步...

2018-08-23 17:25:43 575

翻译 理解kubernetes’ tools/cache包: part 6

在本系列的part 5中(如果您愿意,可以从头开始),我们将工具/缓存包的所有结构部分放在一起。 但是,我意识到我犯了一个错误,并没有涵盖sharedProcessor和processorListener结构! 在继续研究包的行为方面之前,我会在这里做。 我们先来看看processorListener: 首先,让我们同意processorListener是程序中的糟糕名称。同意不? OK,...

2018-08-23 17:24:42 576

翻译 理解kubernetes’ tools/cache包: part 5

在part 4中,我们在DeltaFIFO结构中单独查看了一些细节,它将逻辑“将此对象添加到请求”请求转换为“添加表示对象添加的事件”操作。 这结束了我们对tools/cache包的结构演练。 从行为的角度来看,显然还有很多东西要看,但是现在值得停下来展示全局。 在下图中,您将看到一个毫无歉意的粗糙和简单混合的,UML,一些Java概念,一些Go类型名称 - 简而言之,一个大杂烩的符号应该证明有...

2018-08-23 17:22:42 558 1

翻译 理解kubernetes’ tools/cache包: part 4

在part 3中,我们深入研究了Controller实现必须遵守的实际规约,并研究了什么是informers和SharedIndexInformers。 在这篇文章中,我们将看看DeltaFIFO,因为它是很多内容的核心。 我们主要是孤立地做这件事,然后可能会在后来的文章中尝试“将其重新插入”,这样我们就可以在更大的背景下理解它。 从DeltaFIFO名称来看,我们可以猜测我们将在某种程度上讨...

2018-08-23 17:22:07 537

翻译 理解Kubernetes’ tools/cache包: part 3

在part 2中,我们谈到了Controller概念,探讨了它是怎么使用到了Reclector提供的功能。如果你没还有关注并了解它的全部内容,建议你从part 1开始阅读。 在这一节中,我们将详细介绍一下亮点: 1.controller类型的标准实现(严格来讲,这只是众多可能性的一种,但不幸的是,它对Controller概念的期望添加了色彩); 2.informer和SharedInform...

2018-08-23 17:21:34 468

翻译 理解kubernetes’ tools/cache包: part 2

在上一篇文章中,我们研究了k8s controller的一些基础,并开始研究tools/cache包背后的概念,特别是ListerWatcher,Store和Reflector。在这篇文章中,我们健康到Controller的实际概念。 我想说,我写过”Kubernetes controller”,不是”Kubernetes Controller”或”Kubernetes controller”“...

2018-08-23 17:21:01 634

翻译 理解kubernetes tools/cache包: part 1

想知道如何编写k8s controller(例如我的案例),在java中,我们必须知道时间的真实来源。如果k8s可以被看作是一个分布式消息传递系统,你想要获得的是消息的specifications状态,那么“消息”来自何处呢? 在任意时刻,kubectl创建应用或者是删除某些内容,都需要发布消息。这些消息包括kubernetes想要创建,更新或删除的资源。这些消息由3部分组成:kind,表示消息...

2018-08-23 17:19:12 1064 1

原创 谈谈k8s的leader选举--分布式资源锁

由于k8s ingress功能相对有限,因此目前写了套k8s的自定义资源extendIngress的代码去替代ingress。对于k8s集群流量入口,需要考虑多副本运行去分流,但在代码中,每个副本在watch自定义extendIngress增改操作后要去更新extendIngress对象的status状态。更新操作只需要一个副本去执行即可,如果不给副本加锁,每个副本都要去更新资源对象,导致一些不必...

2018-08-20 21:12:36 11217 6

原创 k8s scheduler pod调度分析

源码基于k8s 1.9 release源码目录结构plugin/cmd/kube-scheduler├── app │ ├── BUILD│ ├── server.go //schedule初始化以及运行启动函数├── BUILD├── OWNERS├── scheduler.go //schedule main函数plugin/pkg├── plugi...

2018-08-15 17:31:17 5972

原创 kube-proxy conntracker设置

1. conntracker是什么conntracker跟踪并且记录连接状态。Linux为每一个经过网络堆栈的数据包,生成一个新的连接记录项 (Connection entry)。此后,所有属于此连接的数据包都被唯一地分配给这个连接,并标识连接的状态。连接跟踪是防火墙模块的状态检测的基础,同时也是地址转换中实 现SNAT和DNAT的前提。 那么Netfilter又是如何生成连接记录项的呢?每...

2018-08-13 21:43:13 2008

原创 k8s controller-manager之daemonset源码分析

源码基于k8s 1.9 release源码目录结构cmd/kube-controller-manager/app/core.go // service Controller的启动代码,包含很多其它controller的启动/pkg/controller/daemon.├── BUILD├── doc.go├── daemon_controller.go // dae...

2018-08-09 14:36:33 891

原创 k8s controller-manager之service源码分析

源码基于k8s 1.9 releasecmd/kube-controller-manager/app/core.go // service Controller的启动代码,包含很多其它controller的启动/pkg/controller/service.├── BUILD├── doc.go├── service_controller.go // service的核心代...

2018-08-06 20:19:29 3377

原创 k8s controller-manager之endpoint源码分析

基于k8s release-1.9源码目录结构cmd/kube-controller-manager/app/core.go // Endpoint Controller的启动代码/pkg/controller/endpoint.├── BUILD├── OWNERS├── doc.go├── endpoints_controller.go // endp...

2018-08-06 17:16:02 1441

原创 通过kubernetes release制作k8s rpm包

安装k8s集群组件最舒适的方法是通过yum install去安装,这种安装方法简单,一般也都能够正常安装。自己在尝试安装k8s集群时,首先要去寻找yum源,制作repo文件,才能安装指定k8s版本。但是即使我们这一通操作下来还是会存在各种各样的问题,最经典的问题是被“墙”,好吧,求人不如求己,我们可以通过kubernetes release制作k8s 的kubelet、kubeadm、kubect...

2018-06-20 10:18:05 2373 1

原创 通过阿里云容器镜像服务下载gcr.io镜像

通过kubeadm部署k8s集群,在执行kubeadm init命令时,默认生成的manifests文件夹下yaml文件的镜像都是gcr.io上的,在国内由于被墙而不能正常下载,也就导致了集群不能正常安装。那么问题来了,要怎样才能下载这些镜像呢?我们可以够买vpn,但是这个要带来一定的费用,所以我们要寻找免费下载gcr.io镜像的途径,阿里云就提供了这一服务。本文通过github设置代码源下载所需...

2018-06-19 21:29:19 10274

原创 k8s controller-manager之podGc源码分析

源码基于k8s 1.9 release源码目录结构cmd/kube-controller-manager/app/core.go:237 // PodGc Controller的启动代码,包含很多其它controller的启动/pkg/controller/podgc.├── BUILD├── OWNERS├── doc.go├── gc_controller....

2018-06-08 23:41:44 510

原创 k8s controller-manager之hpa源码分析

基于kubernetes release-1.9源码目录结构cmd/kube-controller-manager/app/autoscaling.go // HPA Controller的启动代码/pkg/controller/podautoscaler.├── metrics│ ├── BUILD│ ├── interfaces.go│ ├── ...

2018-06-05 17:04:58 2365 1

原创 docker内存监控与压测

一直运行的docker容器显示内存已经耗尽,并且容器内存耗尽也没出现重启情况,通过后台查看发现进程没有占用多少内存。内存的监控使用的是cadvisor,计算方式也是使用cadvisor的页面计算方式,所以决定对docker的内存计算做下研究。1.创建pod yaml文件,使用busybox镜像做测试,对镜像设定2核2G内存的限制。[docker@k8s busybox]$ cat busybox....

2018-06-01 10:55:18 7929

空空如也

空空如也

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

TA关注的人

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