![](https://img-blog.csdnimg.cn/20190325103347550.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kubernetes原理与源码解读
介绍容器docker基础知识以及Kubernetes原理以及进行源码解读
暗夜猎手-大魔王
热爱运动,喜欢跑步
展开
-
Kubernetes37--利用NodeSelector实现Pod定向调度
在k8s中当定义某个Pod对象时,若没有特定调度规则设定,则k8s本身会调用GenericScheduler通过预选优选算法来为该Pod选择一个最优Node节点,即Node节点是不确定的。在实践中可能需要将某个Pod定向调度到某个Node中,可以使用NodeSelector来实现该功能。配置Node标签labelkubectl label nodes ac-private-...原创 2019-02-28 11:29:09 · 4560 阅读 · 0 评论 -
Kubernetes36--Pod.yaml配置解析
Pod yaml文件用来配置k8s中基本Pod对象,其可选的格式以及规范如下:# yaml格式的pod定义文件完整内容:apiVersion: v1 #必选,版本号,例如v1kind: Pod #必选,Podmetadata: #必选,元数据 name: string #必选,Pod名称 namespace: string ...原创 2019-02-24 09:01:06 · 1747 阅读 · 2 评论 -
Goroutine Pool模型
研究一下大神的goroutine pool的实现https://www.cnblogs.com/williamjie/p/9267741.html设计思路启动服务之时先初始化一个 Goroutine Pool 池,这个Pool维护了一个类似栈的LIFO队列 ,里面存放负责处理任务的Worker,然后在client端提交task到Pool中之后,在Pool内部,接收task之后的核心操作...原创 2019-01-04 11:25:30 · 844 阅读 · 0 评论 -
Goroutine模型
进程与线程在现代操作系统中,线程是处理器调度和分配的基本单位,进程则作为资源拥有的基本单位。每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。线程是进程内部的一个执行单元。 每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。 用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。并行与并发在描述程序的并发或者并行时,应该说明从...原创 2018-12-28 14:43:35 · 574 阅读 · 0 评论 -
Kubernetes36--限速器--RateLimiter
研究一下k8s中RateLimiter接口,可以实现限速功能,用于实现限速队列。type RateLimiter interface { // When gets an item and gets to decide how long that item should wait When(item interface{}) time.Duration // Forget indicat...原创 2018-12-28 11:16:47 · 2317 阅读 · 0 评论 -
Kubernetes35--限速队列--RateLimitingInterface
RateLimitingInterfaceRC副本数量控制中ReplicaSetController中queue存储了系统要执行的RC策略队列// Controllers that need to be synced queue workqueue.RateLimitingInterfaceHPA弹性伸缩中HorizontalController中queue存储了系统要执行HPA策...原创 2018-12-26 10:20:08 · 2338 阅读 · 0 评论 -
Kubernetes34--ReplicationController源码--slowStartBatch
在RC数量控制过程中,需要创建一部分Pod对象,调用slowStartBatch方法successfulCreations, err := slowStartBatch(diff, controller.SlowStartInitialBatchSize, func() error { boolPtr := func(b bool) *bool { return &b } ...原创 2018-12-24 15:02:00 · 234 阅读 · 0 评论 -
Kubernetes33--Pod基本操作接口--PodControlInterface
在RC中需要动态调整集群数量,使用PodControlInterface来实现Pod的增删基本操作。// PodControlInterface is an interface that knows how to add or delete pods// created as an interface to allow testing.type PodControlInterface i...原创 2018-12-24 14:18:33 · 834 阅读 · 0 评论 -
Kubernetes32--ReplicationController源码--RC数量控制
RC启动,通过一系列配置,进入核心方法func (rsc *ReplicaSetController) syncReplicaSet(key string) error {获取RS信息rs, err := rsc.rsLister.ReplicaSets(namespace).Get(name)判断RS是否需要同步rsNeedsSync := rsc.expectatio...原创 2018-12-24 11:53:59 · 317 阅读 · 0 评论 -
Kubernetes31--ReplicationController源码--RC执行过程
ReplicationController简介ReplicationController(简称RC)是确保用户定义的Pod副本数保持不变。在用户定义范围内,如果pod增多,则ReplicationController会终止额外的pod,如果减少,RC会创建新的pod,始终保持在定义范围。例如,RC会在Pod维护(例如内核升级)后在节点上重新创建新Pod。ReplicationControlle...原创 2018-12-21 11:20:53 · 501 阅读 · 0 评论 -
Kubernetes30--弹性伸缩总结
前面学习有关弹性伸缩的论文以及k8s HPA的源码,对于云计算中弹性伸缩有了一些认识,总结一下。弹性伸缩简介 伸缩理论关注的问题主要是在面临超出现有集群最大承载能力的时候,如何通过调整集群的规模以提高集群的承载能力,从而保证用户体验和系统服务的稳定性,同时在集群负载很低的时候,尽可能的减少闲置服务器带来的资源浪费。伸缩一般分为应用伸...原创 2018-12-20 10:55:27 · 8092 阅读 · 0 评论 -
Kubernetes29--弹性伸缩--HPA源码--控制算法分析2
HPA执行控制算法,根据设定的指标计算当前需要的副本数量func (a *HorizontalController) reconcileAutoscaler(hpav1Shared *autoscalingv1.HorizontalPodAutoscaler, key string) error获取集群当前的副本数量currentReplicas := scale.Status.R...原创 2018-12-19 14:57:14 · 1315 阅读 · 0 评论 -
Kubernetes27--弹性伸缩--HPA实践
参考链接https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/Horizontal Pod Autoscaler automatically scales the number of pods in a replication controller, deployment or...原创 2018-12-18 15:55:03 · 1003 阅读 · 0 评论 -
Kubernetes28--弹性伸缩--HPA源码--控制算法分析1
代码位置 kubernetes/pkg/controller/podautoscaler/horizontal.goHPA工作机制:构建HorizontalController,启动Run方法func (a *HorizontalController) Run(stopCh <-chan struct{})调用worker方法从hpa队列中取出队首hpa来执行fun...原创 2018-12-18 17:22:25 · 1631 阅读 · 0 评论 -
Kubernetes26--弹性伸缩--HPA源码--HPA执行过程
HPA由HPAController控制实现,启动代码 kubernetes/cmd/kube-controller-manager/app/controllermanager.gofunc NewControllerInitializers(loopMode ControllerLoopMode) map[string]InitFunccontrollers["horizontalpo...原创 2018-12-17 10:50:53 · 953 阅读 · 0 评论 -
Kubernetes25--弹性伸缩--HPA源码--HorizontalController构建
HPA可以根据一定的性能指标自动监测以及控制集群的数量,使其满足一定的预定条件。默认使用cpu利用率来控制集群数量动态变化,同时也可以使用custom metrics来自定义指标。HPA支持的资源类型有replication controller, deployment or replica set ...原创 2018-12-16 11:01:19 · 702 阅读 · 0 评论 -
Kubernetes24--弹性伸缩2
结合论文研究一下云平台中弹性伸缩技术,k8s中提供了HPA策略来实现弹性扩容,基于负载预测的弹性伸缩技术。HPA核心代码kubernetes/pkg/controller/podautoscaler/horizontal.go 伸缩理论关注的问题主要是在面临超出现有集群最大承载能力的时候,如何通过调整集群的规模以提高集群的承...原创 2018-12-14 14:20:45 · 1449 阅读 · 1 评论 -
Kubernetes23--kube-scheduler源码8--优选过程分析
kubernetes/pkg/scheduler/core/generic_scheduler.go优选过程分析优选函数入口priorityList, err := PrioritizeNodes(pod, g.cachedNodeInfoMap, metaPrioritiesInterface, g.prioritizers, filteredNodes, g.extenders)...原创 2018-12-14 10:11:18 · 280 阅读 · 0 评论 -
Kubernetes22--kube-scheduler源码7--预选过程分析
kubernetes/pkg/scheduler/core/generic_scheduler.go从一系列Node列表中为某一Pod选择最合适的Node节点func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister) (string, error)预选过程入口func (g ...原创 2018-12-13 16:25:07 · 264 阅读 · 0 评论 -
Kubernetes21--kube-scheduler源码6--GenericScheduler分析
kube-scheduler调度核心函数:kubernetes/pkg/scheduler/scheduler.gofunc (sched *Scheduler) scheduleOne()为一Pod选定合适的Node节点核心函数:host, err := sched.config.Algorithm.Schedule(pod, sched.config.NodeLister)...原创 2018-12-13 15:00:49 · 440 阅读 · 0 评论 -
Kubernetes20--kube-scheduler源码5--Scheduler算法分析
kube-scheduler启动默认使用DefaultProvider算法,研究一下DefaultProvider的Schedule过程。默认使用DefaultSchedulerName调度器 SchedulerDefaultProviderName调度算法if len(obj.SchedulerName) == 0 { obj.SchedulerName = api.Defaul...原创 2018-12-13 11:27:26 · 494 阅读 · 0 评论 -
Kubernetes19--kube-scheduler源码4--Scheduler算法注册
研究一下kube-scheduler是如何构建Scheduler对象以及如何进行算法插件式注入代码入口kubernetes\cmd\kube-scheduler\scheduler.go首先构建SchedulerCommand对象command := app.NewSchedulerCommand()接下来执行runCommandrunCommand(cmd, args, ...原创 2018-12-12 17:45:32 · 537 阅读 · 0 评论 -
Kubernetes18--kube-scheduler源码3--Scheduler执行过程
由New方法产生Scheduler对象,研究其执行过程Scheduler的启动函数func (sched *Scheduler) Run() { if !sched.config.WaitForCacheSync() { return } go wait.Until(sched.scheduleOne, 0, sched.config.StopEverything)}首...原创 2018-12-12 14:48:22 · 620 阅读 · 0 评论 -
Kubernetes17--kube-scheduler源码2--Scheduler构造
kube-scehduler启动,使用默认的调度算法,调度器监听apiserver,寻找待调度的Pod对象以及可用Node节点,执行调度算法,将Pod调度到某一Node,然后回写apiserver。流程如下: 调度器代码位置:\k8s.io\kubernetes\pkg\scheduler\scheduler.go研...原创 2018-12-11 17:36:15 · 597 阅读 · 0 评论 -
Kubernetes16--kube-scheduler源码1--Cobra.Command启动过程
进行k8s的源码解读,使用Windows环境,首先windows配置GO语言环境,IED使用IntelliJ IDEA,配置go语言开发环境。下载k8s源码:git clone https://github.com/kubernetes/kubernetes.gitGOPATH路径:F:\Go\src工程路径: F:\Go\src\k8s.io\kuberneteskube-s...原创 2018-12-11 11:01:30 · 552 阅读 · 0 评论 -
Kubernetes15--Custom-Metrics自定义监控指标
Metric可以实现对于pod以及node对象cpu,内存指标的监控,要想获取更多的监控指标,可以使用custom-metrics自定义监控指标。部署prometheus监控系统,prometheus采集其它各种指标,使用组件kube-state-metrics,将prometheus的metrics数据格式转换成k8s API接口能识别的格式,转换以后,用Kubernetes aggrega...原创 2018-12-06 17:17:48 · 3829 阅读 · 0 评论 -
Kubernetes14--Kubeadm详解
之前用Kubeadm安装k8s集群遇到了好多问题,后来想扩展CoreDns,Metrics-server等功能发现对于内部机理不太清楚,因此把kubeadm的内部机理学习一下。kubeadm的常见命令:主要学习一下init初始化过程:使用kubeadm来部署集群的一般步骤:kubeadm initexport KUBECONFIG=/etc/kubernetes/admin...原创 2018-12-06 14:49:28 · 1890 阅读 · 1 评论 -
Kubernetes13--Metrics API
参考地址:https://github.com/kubernetes-incubator/metrics-server/metrics-server: 它是一种API Server,提供了核心的Metrics API,就像k8s组件kube-apiserver提供了很多API群组一样,但它不是k8s组成部分,而是托管运行在k8s之上的Pod。为了让用户无缝的使用metrics-server当中...原创 2018-12-05 17:24:38 · 3460 阅读 · 2 评论 -
Kubernetes12--Pod对象相关API
学习有关Pod对象的相关api调用以及返回json数据格式api文档:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#k8s的api更新很快,注意版本,以1.12为例进行详解:K8S API概览资源对象name decription Workloads Workloads ...原创 2018-12-05 16:06:06 · 427 阅读 · 0 评论 -
Kubernetes11--Java访问apiserver
想实现Java访问k8s apiserver接口服务,目前主要Java client 有基于Jersey以及基于Fabric8https://jersey.github.io/https://github.com/fabric8io/kubernetes-clientJersey需要自己实现各种接口调用,Fabric8已经实现主要的api调用,研究了一下Fabric8,决定还是自己模...原创 2018-12-04 16:05:46 · 5478 阅读 · 0 评论 -
Kubernetes10--API访问控制
使用API来访问k8s集群,方便使用第三方客户端来访问和管理k8s集群资源,在此准备使用Java语言来封装API使用。1.API Server 配置文件解析如上图所示,k8s集群中主要使用Api Server来作为系统通信的中心,因此使用api相当于主要与api server来进行信息交互。在此之前使用kubeadm方式来部署k8s集群,查看一下apiserver的yaml文件:...原创 2018-12-03 17:27:34 · 1557 阅读 · 0 评论 -
Kubernetes8--Centos基础镜像使用
目前已经搭建好k8s集群,一个Master节点,4个Node节点。内存资源总共约600G,需要进行虚拟化,资源的隔离与限制方便使用。使用Centos基础镜像虚拟出若干linux镜像,方便服务部署等使用。Centos基础镜像位置:https://hub.docker.com/_/centos/拉取镜像:docker pull centos基础镜像的使用:基础镜像安...原创 2018-12-03 10:22:24 · 3999 阅读 · 0 评论 -
Kubernetes7--Dashboard安装
系统已经搭建好1Master4Node节点,现在安装一下Dashboard面板镜像仓库可以参考如下:https://hub.docker.com/r/keveon/kubernetes-dashboard-amd64/tags/Master节点下载最新的dashboard镜像docker pull keveon/kubernetes-dashboard-amd64:v1.10....原创 2018-11-30 10:03:26 · 505 阅读 · 0 评论 -
Kubernetes6--资源调度
参考论文:[1]杜军. 基于Kubernetes的云端资源调度器改进[D].浙江大学,2016. k8s主要应用Pod这一概念进行应用部署和操作,以后是pod对象的创建时序图,pod对象的创建效率直接影响系统的整体性能。优先级分类与抢占式调度:按照Pod对象的重启策略分为低优先级以及高优先级利用双端循环队列,维护队首指针以及队尾指针Pod对象重启策略为Always加入到...原创 2018-11-27 11:20:30 · 721 阅读 · 0 评论 -
Kubernetes5--弹性伸缩1
参考论文:[1]杨茂. 基于Kubernetes的容器自动伸缩技术的研究[D].西安邮电大学,2018.Kubernetes的弹性伸缩技术 k8s提供了Service虚拟服务概念,对应于实际的服务提供者Pod集群,可以使用ReplicationController来实现Service对应一个Pod集群,服务入口对应于Service端口,通过Service负载到Pod集...原创 2018-11-26 11:26:42 · 2610 阅读 · 4 评论 -
Kubernetes4--动态调度
基于Kubernetes的容器云平台资源调度策略调度,给定的N种系统资源,给定一系列任务列表,如何分配各种资源,使得系统的总资源利用达到某种目标,或者资源利用率最高,资源利用率最高等。容器与物理机的调度,主要是物理机有一定的各种资源限额,容器服务有各种不同的资源需求,如何分配这些容器服务分配到指定的物理机节点实现系统功能,以达到系统的资源利用等目标。调度思想大致分为两种 扩散以及贪心。...原创 2018-11-25 09:58:18 · 4008 阅读 · 0 评论 -
Kubernetes3--资源动态调度
1.基于SLA驱动的资源动态调度算法将应用分为不同类型,将不同应用调度到不同资源状态节点上,减少应用因资源不足带来的问题,根据SLA协议实时监控应用资源使用状况,动态调整应用资源占用率,提高资源使用率。SLA协议:Service-Level Agreement的缩写,意思是服务等级协议。是关于网络服务供应商和客户间的一份合同,其中定义了服务类型、服务质量和客户付款等术语。监控容器在一段...原创 2018-11-24 10:14:18 · 3506 阅读 · 0 评论 -
Kubernetes2--k8s资源调度
研究一下Kubernetes的资源调度器的实现原理以及大神们的改进。k8s的基本架构如下:Scheduler调度器做为Kubernetes三大核心组件之一, 承载着整个集群资源的调度功能,其根据特定调度算法和策略,将Pod调度到最优工作节点上,从而更合理与充分的利用集群计算资源。其作用是根据特定的调度算法和策略将Pod调度到指定的计算节点(Node)上,其做为单独的程序运行,启动之后会...原创 2018-11-23 11:23:19 · 7390 阅读 · 0 评论 -
Kubernetes1--Kubeadm安装
Kubeadm安装Kubernetes环境总结:Kubernetes服务架构采用Mater-Slave,不考虑高可用,一般采用一个Master节点和多个Slave节点,这里采用1Master和2Slave节点首先这里采用Vmware来安装三台Linux操作系统,网络设置为NAT模式操作系统centos7,内核版本:Master和Slave均要操作1.配置好各节点host...原创 2018-11-15 20:00:24 · 1924 阅读 · 1 评论 -
Vmware网络模式--Host-Only
三、Host-Only(仅主机模式)Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。其网络结构如下图所示:通过上图,我们可以发现,如果要使得虚拟机能联网,我们可以将主...转载 2018-11-15 19:50:37 · 347 阅读 · 0 评论