云计算
暗夜猎手-大魔王
热爱运动,喜欢跑步
展开
-
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 · 1765 阅读 · 2 评论 -
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 · 965 阅读 · 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 · 2373 阅读 · 0 评论 -
Kubernetes31--ReplicationController源码--RC执行过程
ReplicationController简介ReplicationController(简称RC)是确保用户定义的Pod副本数保持不变。在用户定义范围内,如果pod增多,则ReplicationController会终止额外的pod,如果减少,RC会创建新的pod,始终保持在定义范围。例如,RC会在Pod维护(例如内核升级)后在节点上重新创建新Pod。ReplicationControlle...原创 2018-12-21 11:20:53 · 508 阅读 · 0 评论 -
Kubernetes25--弹性伸缩--HPA源码--HorizontalController构建
HPA可以根据一定的性能指标自动监测以及控制集群的数量,使其满足一定的预定条件。默认使用cpu利用率来控制集群数量动态变化,同时也可以使用custom metrics来自定义指标。HPA支持的资源类型有replication controller, deployment or replica set ...原创 2018-12-16 11:01:19 · 707 阅读 · 0 评论 -
Kubernetes30--弹性伸缩总结
前面学习有关弹性伸缩的论文以及k8s HPA的源码,对于云计算中弹性伸缩有了一些认识,总结一下。弹性伸缩简介 伸缩理论关注的问题主要是在面临超出现有集群最大承载能力的时候,如何通过调整集群的规模以提高集群的承载能力,从而保证用户体验和系统服务的稳定性,同时在集群负载很低的时候,尽可能的减少闲置服务器带来的资源浪费。伸缩一般分为应用伸...原创 2018-12-20 10:55:27 · 8115 阅读 · 0 评论 -
Kubernetes24--弹性伸缩2
结合论文研究一下云平台中弹性伸缩技术,k8s中提供了HPA策略来实现弹性扩容,基于负载预测的弹性伸缩技术。HPA核心代码kubernetes/pkg/controller/podautoscaler/horizontal.go 伸缩理论关注的问题主要是在面临超出现有集群最大承载能力的时候,如何通过调整集群的规模以提高集群的承...原创 2018-12-14 14:20:45 · 1457 阅读 · 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 · 284 阅读 · 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 · 272 阅读 · 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 · 3864 阅读 · 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 · 446 阅读 · 0 评论 -
Kubernetes14--Kubeadm详解
之前用Kubeadm安装k8s集群遇到了好多问题,后来想扩展CoreDns,Metrics-server等功能发现对于内部机理不太清楚,因此把kubeadm的内部机理学习一下。kubeadm的常见命令:主要学习一下init初始化过程:使用kubeadm来部署集群的一般步骤:kubeadm initexport KUBECONFIG=/etc/kubernetes/admin...原创 2018-12-06 14:49:28 · 1904 阅读 · 1 评论 -
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 · 557 阅读 · 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 · 598 阅读 · 0 评论 -
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 · 4584 阅读 · 0 评论 -
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 · 878 阅读 · 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 · 2376 阅读 · 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 · 1329 阅读 · 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 · 240 阅读 · 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 · 850 阅读 · 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 · 323 阅读 · 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 · 1052 阅读 · 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 · 635 阅读 · 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 · 1642 阅读 · 0 评论 -
Goroutine模型
进程与线程在现代操作系统中,线程是处理器调度和分配的基本单位,进程则作为资源拥有的基本单位。每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。线程是进程内部的一个执行单元。 每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。 用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。并行与并发在描述程序的并发或者并行时,应该说明从...原创 2018-12-28 14:43:35 · 584 阅读 · 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 · 498 阅读 · 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 · 541 阅读 · 0 评论 -
Vmware网络模式--NAT
二、NAT(地址转换模式)如果网络ip资源紧缺,这时候NAT模式是最好的选择。NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。其网络结构如下图所示:在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。VMware Network Adapter VMnet8虚拟网卡主要...转载 2018-11-15 19:47:40 · 1413 阅读 · 0 评论 -
Vmware网络模式--Bridged(桥接模式)
vmware提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。vmware虚拟机,可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式)。VMnet0表示的是用于桥接模式下的虚拟交换机;VMnet1表示的是用于仅主机模式下的虚拟交换机;VMne...转载 2018-11-15 19:40:23 · 693 阅读 · 0 评论 -
使用docker搭建高并发网站架构实践9--Tomcat证书部署及域名绑定
1 获取证书如果申请证书时有填写私钥密码,下载可获得Tomcat文件夹,其中有密钥库 www.domain.com.jks;如果没有填写私钥密码,不提供Tomcat证书文件的下载,需要用户手动转换格式生成。可以通过 Nginx 文件夹内证书文件和私钥文件生成jks格式证书转换工具:https://www.trustasia.com/tools/cert-converter.htm...原创 2018-10-19 09:05:24 · 503 阅读 · 0 评论 -
使用docker搭建高并发网站架构实践8--Docker+Solr搜索使用
Docker +Solr搜索引擎Docker search solrDocker pull solrDocker run –name solr_test –d –p 8983:8983 –t solrhttp://192.168.238.131:8983Docker exec –it solr_test /bin/bashDocker exec –it –user=so...原创 2018-10-18 21:14:36 · 1053 阅读 · 0 评论 -
使用docker搭建高并发网站架构实践7--Mysql主从同步+读写分离+读负载均衡
6. Mysql主从同步+读写分离+读负载均衡目标:搭建mysql一主两从同步 搭建从mysql读负载均衡 结合web工程实现mysql读写分离整体示意图:如图所示:192.168.238.129:负载均衡服务器192.168.238.128: mysql-slave1服务器 mysql-master服务器192.168.238.131: mysql-slave2...原创 2018-10-18 21:07:58 · 1285 阅读 · 2 评论 -
使用docker搭建高并发网站架构实践6--Keepalived+Nginx实现热备份
Keepalived+Nginx实现热备份思路说明:1. 利用linux镜像容器,在其中安装keepalived和nginx, 制作新镜像支持热备份,这样便于直接使用,但在linux镜像中安装keepalived无法实现虚拟IP,也可能是网卡等设置不对。2. 在linux主机内,启动keepalived容器和nginx容器,实现热备份。实现难点:如何利用keepalived容器来监测n...原创 2018-10-18 21:00:45 · 1344 阅读 · 1 评论 -
使用docker搭建高并发网站架构实践5--Docker实现Nginx+tomcat动静分离
Docker+Nginx+Tomcat实现动静分离整体结构示意图:如上所示:docker启动5个容器,dynamic-nginx动态nginx服务器和static-nginx1, static_nginx2两个静态nginx服务器,tomcat1和tomcat2服务器,分别映射到主机的80,38080,48080,18080,28080端口。当dynamic-nginx服务器收到请求时...原创 2018-10-18 20:56:11 · 1160 阅读 · 0 评论 -
使用docker搭建高并发网站架构实践4--NFS文件共享搭建
NFS文件共享系统搭建 一. 整体结构示意:如图所示:安装NFS-server,新建/data/testfile/nfs作为分享目录,设置配置文件/etc/exports; 在tomcat1和tomcat2的主机上安装NFS-client,将服务器共享目录挂载到tomcat1的/data/tomcat1-temp目录下,将服务器共享目录挂载到tomcat2的/data/tomcat...原创 2018-10-18 20:52:18 · 2220 阅读 · 1 评论 -
使用docker搭建高并发网站架构实践3--Docker实现web集群共享Session
实现web集群共享session以后给出两种实现方案,一种是tomcat服务器层面实现,一种是代码层面实现。一. Docker+Ngnix+Redis+Tomcat实现共享session整体结构 如图所示:服务器启动4个docker容器nginx,tomcat1,tomcat2,redis,分别映射到服务器的80,18080,28080,6379端口。Tomcat /co...原创 2018-10-18 20:38:40 · 4080 阅读 · 0 评论 -
使用docker搭建高并发网站架构实践2--Docker实现Nginx和Tomcat负载均衡
Docker实现Nginx和Tomcat负载均衡一.1. 安装Docker整体结构示意图在Linux操作系统(ip:10.104.15.62)上启动三个容器,Ngnix,Tomcat1,Tomcat2容器,分别映射到主机的80,18080,28080端口;Ngnix配置文件如上所示,监听10.104.15.62:80端口,配置转发服务器10.104.15.62:18080和10.104...原创 2018-10-18 20:26:58 · 5416 阅读 · 1 评论 -
使用docker搭建高并发网站架构实践1--Docker简介以及私有仓库搭建
1.Docker简介 Docker是一种操作系统容器虚拟化技术,可以理解为在操作系统的级别上虚拟出更多的虚拟主机来打包以及部署应用等。具体Docker的实现与LXC支持有很大关系,主要技术有命名空间,控制组以及文件联合系统等。主要架构如下所示: Docker采用C/...原创 2018-10-18 20:21:31 · 694 阅读 · 0 评论 -
Vmware网络模式--Host-Only
三、Host-Only(仅主机模式)Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。其网络结构如下图所示:通过上图,我们可以发现,如果要使得虚拟机能联网,我们可以将主...转载 2018-11-15 19:50:37 · 357 阅读 · 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 · 1928 阅读 · 1 评论