Golang 使用 channel 进行同步控制
同步控制是指协调多个 goroutine 之间的运行时机,比如想控制两个 goroutine A、B 的执行顺序,A 运行完之后,B 再运行。一个最常见的问题(或者说面试题)是:多个 goroutine 交替打印数字。已知 channel 是 golang 中同步控制的利器,那怎么用 channel 来解决这个问题呢? channel 是一个队列(在学习 golang 时,我先入为主的将 ...
同步控制是指协调多个 goroutine 之间的运行时机,比如想控制两个 goroutine A、B 的执行顺序,A 运行完之后,B 再运行。一个最常见的问题(或者说面试题)是:多个 goroutine 交替打印数字。已知 channel 是 golang 中同步控制的利器,那怎么用 channel 来解决这个问题呢? channel 是一个队列(在学习 golang 时,我先入为主的将 ...
学习一下ReplicaSet Controlelr代码,基于的k8s版本为1.9.6 基本要点 ReplicaSet的目的是运行一组固定数量的pod,一般只用来运行固定数量的pod,这些pod是用同一个template生成的,如果pod被意外删除了,RS控制器帮你自动创建等。 也可以使用 kubectl scale rs/frontend --replicas=2 来扩展或者缩小rs中的...
目录 初始化 Scheduler scheduleOne schedule priority 过程 k8s 1.9 scheduler概述,因为之前工作中是基于1.9版本的,还没有引入scheduler framework。 初始化 Scheduler 初始化scheduler主要涉及两个结构体: SchedulerServer与Scheduler,也就是构造这个两个...
家里有个 windows 台式机,安装了 vmware,通过 vmware 虚拟机搭集群测试时,是不能用 dhcp 的,每次虚拟机重启后,节点 ip 地址变化了,那 K8s 集群就废了。 这里记录下怎么修改 centos ip,并配置为静态 ip。网卡的配置文件在 /etc/sysconfig/network-scripts 目录: [decent@HostGW-Master ~]$ ls...
以SchedulerServer为例 SchedulerServer初始化了一个PodInformer,并启动、等待同步。查看一下这个标准流程。 s.PodInformer = factory.NewPodInformer(client, 0), go s.PodInformer.Informer().Run(stop) controller.WaitForCacheSync("sche...
优先级队列是常用的数据结构,区别于 FIFO 先进先出队列,优先级队列中的元素都具有优先级关系,出队时需要按照优先级顺序出队。元素的优先级是自定义的,可以按照时间、大小等。 这里还有一个问题,为什么我们需要优先级队列,我们直接把所有元素都排序不就好了吗,按照排序后的顺序进行出队。这么说也没错,但有些场景还是用优先级队列比较合适,比如说我们不需要处理所有的元素。假设我们有 n 个元素(n 非...
目录 概述 扩展点 队列排序(Queue sort) 预过滤(Pre-filter) 过滤 (Filter) Post-filter 计分(Scoring) Normalize scoring 预留(Reserve) Permit Approving a Pod b...
这部分内容是对一篇英文博客的理解,对涉及到的一些知识点进行了拓展,原文地址为: 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 ...
这部分关注三个问题 K8s 是如何对 cpu 和 mem 做资源限制的,涉及到的是 cgroup 的东西 pod 层面的 cgroup 存在的意义,可能是除 container 以外的本 pod 使用的资源 best effort/burstable/guaranteed 三者存在的意义 首先从观察现象出发,然后试图解释现象 分别介绍这三部分 K8s是如何做资源限制的 这...
K8s 默认调度器 genericscheduler 中判断每个 node 是否符合调度条件是并行执行的,具体是通过下面函数: workqueue.Parallelize(16, len(nodes), checkNode) 该函数第一个参数是并行粒度,最多起的 goroutine 的数目;第二个参数是所有节点的个数(理解为任务数),第三个参数是对每个 node 执行的函数,即具体的任务,...