kubernetes 之Pod 优先级与抢占
Pods 可以有优先级(Priority)。 优先级体现的是当前 Pod 与其他 Pod 相比的重要程度。如果 Pod 无法被调度,则 调度器会尝试抢占(逐出)低优先级的 Pod,从而使得悬决的 Pod 可被调度。
警告:在一个并非所有用户都可信任的集群中,一个有恶意的用户可能创建优先级最高的 Pod,从而导致其他 Pod 被逐出或者无法调度。 管理员可以使用 ResourceQuota 来避免用户创建高优先级的 Pod。
如何使用优先级与抢占要使用优先级与抢占特性:
添加一个或多个PriorityClass对象
创建Pod或者Deployment对象的时候加上其关联的PriorityClass对象,在模板中添加priorityClassName描述。
说明: Kubernetes 发行时已经带有两个 PriorityClasses:system-cluster-critical 和 system-node-critical。 这些优先级类是公共的,用来 确保关键组件总是能够先被调度.抢占能力是通过 kube-scheduler 的标志 disablePreemption 来控制 ...
kubernetes之kube-scheduler的设计
Kubernetes 是 k8s 核心组件之一,主要目的即为pod选取合适的node进行绑定。整体流程氛围三部分:
获取未调度的podList
通过执行一系列的调度算法进行选取合适的node
提交数据到apiServer然后进行bind123456789101112131415161718192021222324252627282930313233343536For given pod: +---------------------------------------------+ | Schedulable nodes: | | | | +--------+ +--------+ +--------+ | | | node 1 | | node 2 | | node 3 | | | +--------+ +--------+ +--------+ ...
kubernetes之Gang scheduling
此篇为《Gang scheduling in Kubernetes》文档翻译,个人翻译。
动机Kubernetes目前已经成为主流的容器平台编排方案,在服务与存储层面已经取得成功性的大规模应用了,并且原生k8s支持Spark。同时社区也在致力于将ML机器学习框架运行在k8s之上,比如kubeflow/tf-operator,在整合kube-arbitrator期间,我们发现以下需求合并到default-scheduling是更好的措施。
定义Gang Scheduling:任务实例要么全部或全部不执行。如果没有足够的资源来调度所有的pod,那么改任务包含的pod一个都不被调度,即All-or-none模式。如果任务中有任何的pod运行失败或未被调度,那么所有的pod必须能够优雅的终止退出
使用场景
以pod group的方式调度pod,all-or-nothing模式(TensorFlow,MPI)最初的需求来自于TesnsorFlow(以及MPI):运行Tensorflow/MPI任务,一个任务重的所有task单元必须保证能够一起启动,否则不启动其中任何一个task。如果资源充足 ...
git无法添加空的文件夹
最近打算用gitee和PigGO结合起来做个私有的图床,因为之前一直用的微博的插件去上传图片到图床然后引用URL,但是始终感觉毕竟不是自己可控的那天说不定没用了,那么我的图片就都没了,本来考虑用github来托管我的图片的,但是考虑到“墙”的问题 ,国内访问会抽风,所以就打算用gitee和PigGO来构建自己私有的图床了,那么也就引发了此次的问题。
新克隆的git仓库无法添加空文件目录,这里出现空的文件目录是因为我想在图床仓库中建多个path,这个path中的内容专门给我的博客使用,其他的path后续再看情况使用。
诡异的问题git add dir-xx 之后缓存区没有任何内容 ,而且也没有任何异常报错,老实说这是最懵的状态,无从下手,最后还是借助强大的搜索解决.Can I add empty directories?
好吧,那我就在我的新建的文件夹中加个.gitkeep文件吧,至此问题解决。
本地配置多个git-ssh公钥
一般来说我们都会存在至少两个代码仓库,为了实现ssh clone的话,我们需要配置多个ssh公钥,但是默认情况下git只会从.ssh/id_rsa读取配置。
比如我自己,我一般会存在三个代码仓库,gitee,github,以及公司的私有仓库,那么就会触发我现在的这个问题。
生成多个ssh密钥一般情况下,github是我用的最多的,我会将默认的指定到github,默认不需要配置。那么对于gitee以及公司的代码仓库就需要配置了,这里我拿gitee举例。
生成gitee密钥123# 命名最好有辨识度,这里需要指定下文件,不然会以默认文件命名将已经生成的默认的.ssh/id_rsa 进行覆盖了ssh-keygen -t rsa -f ~/.ssh/gitee_id_rsa -C "xxxxx"# 后续的操作就是疯狂的摁回车了
识别新的ssh key密钥我们需要将新的密钥加入到ssh agent中
12ssh-agent bashssh-add ~/.ssh/gitee_id_rsa
多账号配置config文件在~/.ss ...
LeetCode之最大数
题目描述:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。链接
leetcode每日一题代码如下:
12345678910111213141516171819202122class Solution { private class LargerNumberComparator implements Comparator<String> { @Override public int compare(String a, String b) { String order1 = a + b; String order2 = b + a; return order2.compareTo(order1); } } public String largestNumber(int[] nums ...
kubernetes源码分析系列之kube-scheduler-2
继上篇kubernetes源码分析系列之kube-scheduler-1 了解了大概的入口流程之后,此篇文章重点分析下 pkg/scheduler 包中的内容,scheduler初始化及运行流程分析。
在sig-scheduling 中可以了解到关于scheduler设计的目的。
首先我们面对的问题还是如何找到分析的入口,鉴于kubernetes源码分析系列之kube-scheduler-1 得知在 cmd/kube-scheduler/scheduler.go 中关于 scheduler 的创建在setUp函数中,其中有一段代码如下:
1234567891011121314// Create the scheduler.sched, err := scheduler.New(cc.Client, cc.InformerFactory, cc.PodInformer, recorderFactory, ctx.Done(), scheduler.WithProfiles(cc.ComponentConfig.Profiles...), scheduler. ...
kubernetes源码分析系列之kube-scheduler-1
kube-scheduler 源码分析系列重点作为代码流程梳理,对于 kube-scheduler 的文档还请详见kube-scheduler介绍。
如下代码分析对于细节的处理会跳过,只看主干
代码入口分析kubernetes/cmd/kube-scheduler/app/scheduler.go:
12345678910111213141516171819func main() { rand.Seed(time.Now().UnixNano()) // @1 command := app.NewSchedulerCommand() // TODO: once we switch everything over to Cobra commands, we can go back to calling // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the // ...
7天用go从零实现系列之web框架Day1
最近看到一些不错的博客系列文章,包括为@极客兔兔原创的7天从零系列的文章,此系列文章为个人阅读及个人描述记录。
其中序言部分主要描述的是一个web框架大概需要实现的内容,此处借鉴了Gin的设计思想。
启动Web服务使用 net/http 库,封装了http的网络编程的基础的接口。d1-http-v1/main.go
v1版本123456789101112131415161718192021222324252627package mainimport ( "fmt" "log" "net/http")func main() { // 映射路由 http.HandleFunc("/", indexHandler) http.HandleFunc("/hello", helloHandler) // 启动 web 服务 log.Fatal(http.ListenAndServe(":9999 ...
Mac之搭建本地k8s开发环境
Mac搭建本地k8s环境目前网上有N多的博客文章,无非就是minikube、docker-desktop、kubeadm去部署,对于我个人需求,由于后期需要对原生的 scheduler 进行自定义的扩展开发,我需要能够有机会改动静态POD的manifests文件进行改动与配置。
前期通过 minikube 及 docker-desktop 进行过本地k8s集群的部署,但是发现此种沙盒环境无法对静态POD进行配置改动,只能围着k8s做周边的应用测试,没法满足我的需求,最后决定通过kubeadm进行k8s本地环境部署。
所以最终选择: Virtualbox + Centos7 镜像进行单节点k8s部署【此环境只做组件部署及逻辑验证】
VirutalBox安装及Centos 虚拟机安装具体的介绍就不多介绍了,我选用的为 6.1.4 没有选用最新的版本,主要是担心出了问题可能没有最新及时的资料可以参考。
如何创建虚机就不多介绍了,但是以下注意点需要注意:
虚机CPU至少分配2核
虚机网络连接选择为bridge,之前选择的Nat模式无法获取本地ip,虽然能通外网。 此现象比较诡异
Kubea ...