自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 linux父子进程

(1)父进程先退出 当父进程退出,子进程必须找到父进程才能释放掉子进程占用的进程信息,如果父进程先退出,则子进程首先从当前线程组里寻找适合做父进程的进程,不然就让init 1作为父进程。(2)子进程先退出 子进程先退出,需要父进程进行“收尸”,收尸就是父进程调用wait函数,(或者父进程想内核传递不进行收尸信号)。避免生成僵尸进程。...

2019-05-05 10:09:44 1367

转载 ISTIO中包含有四种流量管理配置资源

Istio 中包含有四种流量管理配置资源,分别是 VirtualService、DestinationRule、ServiceEntry、以及 Gateway。下面会讲一下这几个资源的一些重点。在网络参考中可以获得更多这方面的信息。 在请求被 VirtualService 路由之后,DestinationRule 配置的一系列策略就生效了。这些策略由服务属主编写,包含断路器、负载均衡以及 ...

2019-01-30 19:38:50 1280

转载 kubernets eviction策略

pod eviction当资源使用情况触发了驱逐条件时,kubelet会启动一个任务去轮流停止运行中的pod,直到资源使用状况恢复到阈值以下。以硬驱逐为例,整体流程是:每隔一段时间从cadvisor中获取资源使用情况,发现触发了阈值; 从运行中的pod里找到QoS策略最开放的一个,比如策略为bestEffort的一个pod(即便这个pod没有吃多少内存,大部分内存是另一个策略为burst...

2019-01-15 14:30:11 354

转载 statefulset创建

所有Pod的Volume必须使用PersistentVolume或者是管理员事先创建好 为了保证数据安全,删除StatefulSet时不会删除VolumeStatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现 稳定的网络标志...

2019-01-14 18:05:17 530

转载 cgroup相关

subsystem 一个subsystem就是一个内核模块,他被关联到一颗cgroup树之后,就会在树的每个节点(进程组)上做具体的操作。subsystem经常被称作"resource controller",因为它主要被用来调度或者限制每个进程组的资源,但是这个说法不完全准确,因为有时我们将进程分组只是为了做一些监控,观察一下他们的状态,比如perf_event subsystem。到目前为...

2019-01-04 10:32:25 458

转载 k8s oom

这段代码就是讲的如何计算每个容器的oom score的。首先看这个容器所属的Pod是属于什么级别的,如果是Guaranteed级别的直接返回-998也是最高级最后被Kill掉的,如果是BestEffort级别则直接返回1000是最低级别的,最有可能被杀掉。如果是Burstable则是中间级别需要按照资源的申请量来计算oom score。oomScoreAdjust := 1000 - (1...

2018-12-19 16:27:15 1035

原创 kubernetes dns功能

创建dns记录的必要条件,创建出endpoint,无endpoint无dns记录SVC创建dns记录(1)正常的service创建的dns a记录,通过my-svc.my-namespace.svc.cluster.local与clusterip映射(2)headless service创建dns a记录,通过service的域名(如上),返回的是pod与pod domain对应的dn...

2018-12-13 17:00:32 188

原创 kubernetes service

headless service:使用场景:(1)statefulset中进行pod的网络功能域名的,如创建的pod的名字为web-0,web-1那网络一致性其对应的dns存储就是以web-0,web-1打头(2)进行跨namespace的访问服务(service),只有headless中的pod设置spec.hostname字段的pod才会在dns中单独记录pod的dns值(3)...

2018-12-13 15:19:33 195 3

转载 golang引号

Golang的双引号和反引号都可用于表示一个常量字符串,不同在于: 双引号用来创建可解析的字符串字面量(支持转义,但不能用来引用多行) 反引号用来创建原生的字符串字面量,这些字符串可能由多行组成(不支持任何转义序列),原生的字符串字面量多用于书写多行消息、HTML以及正则表达式 而单引号则用于表示Golang的一个特殊类型:rune,类似其他语言的byte但又不完全一样,是指:...

2018-11-27 17:54:01 131

转载 kubernetes中跨namespace访问服务

问题的场景: kubernetes中的namespace=A中的Pod需要访问namespace=B中的Pod所提供service=service_B解决办法: 在namespace_A中创建一个service_c, service_c里面不指定selector, 采用type=ExternalName的方式,externalName定义成为指向namespace=B中的service_B...

2018-11-24 09:43:35 1556

原创 k8s APIservice

他是通过创建kind:APIservice来创建的;APIserver通过创建APIservice controller来进行监控创建APIservice资源,然后通过注册path转到proxy,proxy通过获取APIservice指定的server,获取其对应endpoint,获取到相应的host。通过将请求发送到对应pod获得返回结果,然后将结果copy到请求的返回结果,完成功能。...

2018-11-23 15:20:07 2318

原创 kubelete对pod中容器的探测分为liveness,失败则重启容器;readiness失败则不作为service的后端pod进行服务,等待;

本文将向展示如何配置容器的存活和可读性探针。Kubelet使用liveness probe(存活探针)来确定何时重启容器。例如,当应用程序处于运行状态但无法做进一步操作,liveness探针将捕获到deadlock,重启处于该状态下的容器,使应用程序在存在bug的情况下依然能够继续运行下去(谁的程序还没几个bug呢)。Kubelet使用readiness probe(就绪探针)来确定容器是...

2018-11-21 11:32:27 1316

原创 通过nsenter进入容器命令

$ sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。$ sudo nsenter --target 3326 --mount --uts --ipc --net --pid如果想用tcpdump,一般docker没有bash所以:由于DNS容器往往不具备ba...

2018-11-20 15:25:19 1625

转载 k8s volumn与配置管理

1pod定义详解下面是一个完整的yaml格式定义的文件,注意格式,子集包含关系,不要有tab,要用空格。不是所有的元素都要写,按照实际应用场景配置即可。apiVersion: v1 //版本kind: pod //类型,podmetadata: //元数据 name: String ...

2018-10-18 11:20:13 484

转载 Docker数据卷 转载自简书

Docker数据卷 岦_ 关注2015.11.11 17:52* 字数 385 阅读 5322评论 2喜欢 5Docker数据管理和网络基础默认情况下,当用户退出容器而容器中又没有非守护进程在运行时,容器会进入关闭状态,同时,数据的修改会保留在层级的可写文件系统内。当用户需要重新开启一个容器时,是无法访问原来所做的修改的,而是恢复到镜像的初始化状态。为了解决数据持久化的问题,Doc...

2018-10-17 23:45:47 98

转载 docker privileged

privileged参数$ docker help run ...--privileged=false         Give extended privileges to this container...大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普...

2018-10-17 23:19:25 5843

原创 k8s认证

RBAC可以设置subject:user,group和serviceaccount.user不是k8s管理的,可以通过具体的服务进行管理。对应k8s中就是secret。serviceaccount是通过k8s管理的。就是每个pod访问api server的权限。 api启动参数分为--client的各种crt,key kubelete各种证书,tls(api srever自己用于客...

2018-10-17 11:12:23 916

转载 k8sproxy原理

pod 访问service服务这里涉及到k8s里面一个重要的概念service。它是一个服务的抽象,通过label(k8s会根据service和pod直接的关系创建endpoint,可以通过kubectl get ep查看)关联到后端的pod容器。Service分配的ip叫cluster ip是一个虚拟ip(相对固定,除非删除service),这个ip只能在k8s集群内部使用,如果serv...

2018-10-16 16:09:53 779

原创 k8s 自定义api注册,controller

自定义api通过aggregator注册进入k8s api系统,内部通过一个proxy转到对应的自定义api进程(放在pod中), 自定义API通过main函数,调用生成的zz_generated.api.register.go中的注册函数,此函数有一个全局变量ApiVersion,apiversion中将我们定义的type(包括其deepcopy函数),还有版本转换函数conversion(...

2018-10-13 19:37:56 871

原创 golang ctx

go的每个request都可以有一个context用于方便进行http处理。ctx.backend()返回是一个空的ctx,其实所有的context的父类,其没有任何值,他是一棵树,类似于进程,删除父,其子也被删。每个request都可以新建一个context,可以向里面传入值,其有个Done chanel,用于终止。比如:func httpDo(ctx context.Cont...

2018-10-12 11:33:51 2266

原创 k8s client-go使用举例

容器中执行命令:https://github.com/appscode/searchlight/blob/22632646424bdd34c98bdaec87553fd182a85945/plugins/check_pod_exec/lib.go#L62创建client和controller:https://zhuanlan.zhihu.com/p/34192361code-gener...

2018-10-10 14:37:20 2212

原创 k8s controller分析

controller数据结构分析,从上往下看type BeeController struct { queue *controller.QueueWorker // Handles messages controller *BeeControllerImpl Name string BeforeReconcile func(key string) A...

2018-10-09 13:17:24 1294

转载 k8s中,通过代码生成工具生成的controller中加入控制逻辑

摘自http://www.infoq.com/cn/articles/kubernetes-status-management-and-extension前文自动生成的代码中为Bee生成了默认的BeeController,如图1.2.2所示。当监听到创建或更新Bee状态的时候,可以通过实现Reconcile中的逻辑来处理对Bee的额外扩展,现在来把Controller部署到集群中去。...

2018-10-08 21:07:23 434

原创 k8s informer

以nodecontroller为例:一、先创建sharedInformers供所有controler使用,是一个工厂Informer.(sharedInformers := informers.NewSharedInformerFactory(versionedClient, ResyncPeriod(s)()))。其成员有[]sharedIndexInformer切片。二、每次创建一个c...

2018-10-08 18:12:00 1457

原创 k8s leaderelection

选主操作就是通过client去etcd获取锁信息,和本地一样,证明是主,开始启动各种controller,然后就更新主的锁的时间戳存入etcd,每过一段时间就更新时间戳等信息存入etcd. 如果发现有新主了,打个log,然后发送event到apiserver.停止master上的各种controller工作。如果不一样就证明是有人是主了,就一直的过一段时间重试,不停的获取。代码如下:...

2018-09-30 20:16:20 1206

原创 k8s api注册

APIserver注册api: api一般有group和version两项,group分为了Core、abac、apps、authtication、authorization、autoscaling、batch、componentconfig、extensions、policy、rbac等,其中core的groupname为空,他是核心的api,就是包括pod、service等.它的代码位于p...

2018-09-21 23:23:35 610

原创 k8s eviction机制

kubelete端:创建eviction manager然后一直的去执行synchronize,synchronize函数会去计算node的是否超过阈值,没有则返回,过一段时间在计算,有超过则killpod.hardEvicthon则过一段时间再去计算节点阈值情况:// determine the set of resources under starvationstarvedRes...

2018-09-20 12:29:20 2360

原创 k8s经常忘记reflect处理watch事件过程

contoler结构有个queue,这个queue是用来控制的,是将读取队列pop,执行process函数的,而controler的成员reflector使用来缓存资源的,他会出发listerandwatche过1s通过lister函数监控一次所有关心的对象(wait.Until会一直执行,等到入参函数执行完成后,peroid时间后再次触发执行,这样不停地一直运行),然后阻塞等待,等待watche...

2018-09-20 00:14:50 696

原创 k8s HorizontalPodAutoscaler

k8s scale其实就是调用apiserver提供的api接口,然后更新replicationcontroller,然后由rc controler进行控制pod的数量。 HorizontalPodAutoscaler:客户端;    通过kubectl创建一个horizontalPodAutoscaler对象,并存储到etcd中服务端:    api server:负责接...

2018-09-19 20:37:19 2011

原创 k8s proxy

K8S 的proxy是运行在每一个node上面的,它主要起到代理作用,分为两种模式:一种用户态:iptable一种内核态iptable:通过调用reflector函数,进行watch,watch service和endpoint资源,如发现有新建或者变动,则进行iptable的同步,proxier.syncProxyRules(),存储servic;endpoint也是如此,同步ipt...

2018-09-19 10:25:05 1218

原创 k8s record.EventRecorder

event对应各类事件,比如删除pod,创建pod,所以如果有类似功能的模块,肯定会有eventrecord数据结构的。比如rc,在发现rc的参数和实际pod数量不一致,则调用kubeclient的api删除pod,并发布eventfunc (r RealPodControl) DeletePod(namespace string, podID string, object runtime....

2018-09-18 19:14:25 1403

原创 rc 控制器监控informer pod

pod是很多控制器都需要监听的资源,所以,pod的informer是一个share的他通过reflector watch监听apiserver pod的crud,然后将pod传入queue中,一个协成不断从队列中pop 出pod,传递个listener处理,我们的rc控制器在初始化时会向pod informer中去挂载处理函数,注册listener,有pod更新,rc控制器就做相应处理。r...

2018-09-18 17:30:45 271

原创 k8s rc 控制器处理

就是在controler manager中创建rc 管理器,数据结构中有pod的存储和controler,pod从podinformer中获取,rc就是通过rc控制器监听apiserver获取,最后进行比较type ReplicationManager struct { kubeClient clientset.Interface podControl controller.Po...

2018-09-18 17:23:13 670

原创 k8s sharedIndexInformer机制

sharedIndexInformer的run函数解析func (s *sharedIndexInformer) Run(stopCh <-chan struct{}) { defer utilruntime.HandleCrash() fifo := cache.NewDeltaFIFO(cache.MetaNamespaceKeyFunc, nil, s.indexe...

2018-09-18 16:26:30 1586

原创 K8S WACHER实现

kube-apiserver会不停的调用etcd接口,查询关心的资源状态(比如pod),将结果发送到incoming管道,最后通过outoutgoing管道发送到store client端一直不停地去apiserver去获取watcher的pod并进行相应处理:先存入cache然后kubelete端进行处理func (r *Reflector) ListAndWatch(stopCh...

2018-09-17 22:00:21 548

原创 k8s CreateAndInitKUbelet

birthcry()----集创建好kubelete后,发出的第一条event消息到所有watcher,告诉watcher Starting kubeletkl.recorder.Eventf(kl.nodeRef, v1.EventTypeNormal, events.StartingKubelet, "Starting kubelet.")------然后启动垃圾手机清理程序...

2018-09-07 12:05:50 134

原创 k8s

kubelete启动会启动docker相应serverds, err := dockershim.NewDockerService(dockerClientConfig, r.PodSandboxImage, streamingConfig, &pluginSettings, f.RuntimeCgroups, c.CgroupDriver, r.DockershimRootD...

2018-09-06 23:31:39 288

原创 k8sEVENT分发

关键函数// loop receives from m.incoming and distributes to all watchers.func (m *Broadcaster) loop() { // Deliberately not catching crashes here. Yes, bring down the process if there's a // bug...

2018-09-05 17:48:08 360

普罗米修斯监控系统部署方式

普罗米修斯监控系统部署方式,基于kubernetes系统进行配置

2019-05-05

avr单片机,流水灯·

avr单片机流水灯,放心使用,可行试试吧

2012-10-15

空空如也

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

TA关注的人

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