NOTE

理解 Golang 调度器[转载]

本文是对 tonybai 老师的《也谈goroutine调度器》的理解 G-P-M模型 在Go 1.0版本中,Go team实现了一个简单的调度器。在这个调度器中,goroutine被抽象为G,而os thread作为”物理CPU”被抽象为M,这个模型重要不足:限制了Go并发程序的伸缩性,尤其是对那些有高吞吐或并行计算需求高的服务程序,主要体现在如下几个方面: 单一全局互斥锁...

Golang 使用 channel 进行同步控制

同步控制是指协调多个 goroutine 之间的运行时机,比如想控制两个 goroutine A、B 的执行顺序,A 运行完之后,B 再运行。一个最常见的问题(或者说面试题)是:多个 goroutine 交替打印数字。已知 channel 是 golang 中同步控制的利器,那怎么用 channel 来解决这个问题呢? channel 是一个队列(在学习 golang 时,我先入为主的将 ...

K8s 中的 ReplicaSet 源码解析

学习一下ReplicaSet Controlelr代码,基于的k8s版本为1.9.6 基本要点 ReplicaSet的目的是运行一组固定数量的pod,一般只用来运行固定数量的pod,这些pod是用同一个template生成的,如果pod被意外删除了,RS控制器帮你自动创建等。 也可以使用 kubectl scale rs/frontend --replicas=2 来扩展或者缩小rs中的...

K8s1.9 版本 Scheduler 调度流程概述

目录 初始化 Scheduler scheduleOne schedule priority 过程 k8s 1.9 scheduler概述,因为之前工作中是基于1.9版本的,还没有引入scheduler framework。 初始化 Scheduler 初始化scheduler主要涉及两个结构体: SchedulerServer与Scheduler,也就是构造这个两个...

centos 配置静态 ip

家里有个 windows 台式机,安装了 vmware,通过 vmware 虚拟机搭集群测试时,是不能用 dhcp 的,每次虚拟机重启后,节点 ip 地址变化了,那 K8s 集群就废了。 这里记录下怎么修改 centos ip,并配置为静态 ip。网卡的配置文件在 /etc/sysconfig/network-scripts 目录: [decent@HostGW-Master ~]$ ls...

关于 K8s informer 的基本概念与原理

以SchedulerServer为例 SchedulerServer初始化了一个PodInformer,并启动、等待同步。查看一下这个标准流程。 s.PodInformer = factory.NewPodInformer(client, 0), go s.PodInformer.Informer().Run(stop) controller.WaitForCacheSync("sche...

优先级队列及 Golang 中的实现

优先级队列是常用的数据结构,区别于 FIFO 先进先出队列,优先级队列中的元素都具有优先级关系,出队时需要按照优先级顺序出队。元素的优先级是自定义的,可以按照时间、大小等。 这里还有一个问题,为什么我们需要优先级队列,我们直接把所有元素都排序不就好了吗,按照排序后的顺序进行出队。这么说也没错,但有些场景还是用优先级队列比较合适,比如说我们不需要处理所有的元素。假设我们有 n 个元素(n 非...

K8s Scheduler framework 调度流程概述

目录 概述 扩展点 队列排序(Queue sort) 预过滤(Pre-filter) 过滤 (Filter) Post-filter 计分(Scoring) Normalize scoring 预留(Reserve) Permit Approving a Pod b...

环形链表

leetcode题目: 环形链表 环形链表ii 第一个是判断链表中是否有环,第二个是寻找环的入口,这种题目还是记录一下吧,不然每次想不起来都要翻网页太麻烦了。 判断链表中是否有环 设置快慢指针fast,slow,fast每次走两步,slow每次走一步,如果链表没有环,fast肯定先遇到nil,如果链表有环,那么fast跟slow肯定是会相遇的,并且是在环内相遇(fast进入环之后就会...

Golang 内存管理概述[翻译]

这部分内容是对一篇英文博客的理解,对涉及到的一些知识点进行了拓展,原文地址为: GO MEMORY MANAGEMENT 理解VSZ与RSS 以下面为例,VSZ以及RSS的单位都是KB: root@z-Latitude:~# ps -u --pid 4435 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME ...