配置多个调度器
Kubernetes自带了一个默认调度器。如果默认调度器不适合你的需求,你可以实现自己的调度器。而且,你甚至可以和默认调度器一起同时运行多个调度器,并告诉Kubernetes为每个Pod使用哪个调度器。让我们通过一个例子讲述如何在Kubernetes中运行多个调度器。
关于实现调度器的具体细节描述超出了本文范围。请参考kube-scheduler的实现,规范示例代码位于pkg/scheduler。
在开始之前
你必须拥有一个Kubernetes的集群,同时你的Kubernetes集群必须带有kubectl命令行工具。建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。如果你还没有集群,你可以通过Minikube构建一个你自己的集群,或者你可以使用下面任意一个Kubernetes工具构建:
要获知版本信息,请输入
kubectlversion
。
打包调度器
将调度器可执行文件打包到容器镜像中。出于示例目的,可以使用默认调度器(kube-scheduler)作为第二个调度器。克隆GitHub上Kubernetes源代码,并编译构建源代码。
git clonekubernetesmake
创建一个包含kube-scheduler二进制文件的容器镜像。用于构建镜像的
Dockerfile
内容如下:
FROM busyboxADD ./_output/local/bin/linux/amd64/kube-scheduler /usr/local/bin/kube-scheduler
将文件保存为
Dockerfile
,构建镜像并将其推送到镜像仓库。此示例将镜像推送到Google容器镜像仓库(GCR)。有关详细信息,请阅读GCR文档。
docker build -t gcr.io/my-gcp-project/my-kube-scheduler:1.0 .gcloud docker -- push gcr.io/my-gcp-project/my-kube-scheduler:1.0
为调度器定义KubernetesDeployment
现在将调度器放在容器镜像中,为它创建一个Pod配置,并在Kubernetes集群中运行它。但是与其在集群中直接创建一个Pod,不如使用Deployment。Deployment管理一个ReplicaSet,ReplicaSet再管理Pod,从而使调度器能够免受一些故障的影响。以下是Deployment配置,将其保存为
my-scheduler.yaml
:
apiVersion: v1kind: ServiceAccountmetadata:name: my-schedulernamespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: my-scheduler-as-kube-schedulersubjects:- kind: ServiceAccountname: my-schedulernamespace: kube-systemroleRef:kind: ClusterRolename: system:kube-schedulerapiGroup: rbac.authorization.k8s.io---apiVersion: v1kind: ConfigMapmetadata:name: my-scheduler-confignamespace: kube-systemdata:my-scheduler-config.yaml: |apiVersion: kubescheduler.config.k8s.io/v1beta2kind: KubeSchedulerConfigurationprofiles:- schedulerName: my-schedulerleaderElection:leaderElect: false---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: my-scheduler-as-volume-schedulersubjects:- kind: ServiceAccountname: my-schedulernamespace: kube-systemroleRef:kind: ClusterRolename: system:volume-schedulerapiGroup: rbac.authorization.k8s.io---apiVersion: apps/v1kind: Deploymentmetadata:labels:component: schedulertier: control-planename: my-schedulernamespace: kube-systemspec:selector:matchLabels:component: schedulertier: control-planereplicas: 1template:metadata:labels:component: schedulertier: control-planeversion: secondspec:serviceAccountName: my-schedulercontainers:- command:- /usr/local/bin/kube-scheduler- --config=/etc/kubernetes/my-scheduler/my-scheduler-config.yamlimage: gcr.io/my-gcp-project/my-kube-scheduler:1.0livenessProbe:httpGet:path: /healthzport: 10259scheme: HTTPSinitialDelaySeconds: 15name: kube-second-schedulerreadinessProbe:httpGet:path: /healthzport: 10259scheme: HTTPSresources:requests:cpu: '0.1'secURItyContext:privileged: falsevolumeMounts:- name: config-volumemountPath: /etc/kubernetes/my-schedulerhostNetwork: falsehostPID: falsevolumes:- name: config-volumeconfigMap:name: my-scheduler-config
在以上的清单中,你使用
KubeSchedulerConfiguration
来自定义调度器实现的行为。当使用选项进行初始化时,该配置被传递到
kube-scheduler
。
my-scheduler-config
ConfigMap存储配置数据。
my-scheduler
Deployment的Pod将
my-scheduler-config
ConfigMap挂载为一个卷。
在前面提到的调度器配置中,你的调度器通过
KubeSchedulerProfile
进行实现。
还要注意,我们创建了一个专用服务账号
my-scheduler
并将集群角色
system:kube-scheduler
绑定到它,以便它可以获得与
kube-scheduler
相同的权限。
在集群中运行第二个调度器
为了在Kubernetes集群中运行我们的第二个调度器,在Kubernetes集群中创建上面配置中指定的Deployment:
kubectl create -f my-scheduler.yaml
验证调度器Pod正在运行:
kubectl get pods --namespace=kube-system
输出类似于:
NAMEREADYSTATUSRESTARTSAGE....my-scheduler-lnf4s-4744f1/1Running02m...
此列表中,除了默认的
kube-scheduler
Pod之外,你应该还能看到处于“Running”状态的
my-scheduler
Pod。
启用领导者选举
要在启用了leader选举的情况下运行多调度器,你必须执行以下操作:
更新你的YAML文件中的
my-scheduler-config
ConfigMap里的KubeSchedulerConfiguration相关字段如下:
如果在集群上启用了RBAC,则必须更新
system:kube-scheduler
集群角色。将调度器名称添加到应用了和资源的规则的resourceNames中,如以下示例所示:
kubectl edit clusterrole system:kube-scheduler
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:annotations:rbac.authorization.kubernetes.io/autoupdate: "true"labels:kubernetes.io/bootstrapping: rbac-defaultsname: system:kube-schedulerrules:- apiGroups:- coordination.k8s.ioresources:- leasesverbs:- create- apiGroups:- coordination.k8s.ioresourceNames:- kube-scheduler- my-schedulerresources:- leasesverbs:- get- update- apiGroups:- ""resourceNames:- kube-scheduler- my-schedulerresources:- endpointsverbs:- delete- get- patch- update
为Pod指定调度器
现在第二个调度器正在运行,创建一些Pod,并指定它们由默认调度器或部署的调度器进行调度。为了使用特定的调度器调度给定的Pod,在那个Pod的spec中指定调度器的名称。让我们看看三个例子。
确认所有三个pod都在运行。
kubectl get pods
验证是否使用所需的调度器调度了pod
为了更容易地完成这些示例,我们没有验证Pod实际上是使用所需的调度程序调度的。我们可以通过更改Pod的顺序和上面的部署配置提交来验证这一点。如果我们在提交调度器部署配置之前将所有Pod配置提交给Kubernetes集群,我们将看到注解了
annotation-second-scheduler
的Pod始终处于“Pending”状态,而其他两个Pod被调度。一旦我们提交调度器部署配置并且我们的新调度器开始运行,注解了
annotation-second-scheduler
的pod就能被调度。
或者,可以查看事件日志中的“Scheduled”条目,以验证是否由所需的调度器调度了Pod。
kubectl get events
你也可以使用自定义调度器配置或自定义容器镜像,用于集群的主调度器,方法是在相关控制平面节点上修改其静态pod清单。
铁路信号具体怎么操作
以标志物、灯具、仪表和音响等向铁路行车人员传送机车车辆运行条件、行车设备状态和行车有关指示的技术与设备。 其作用是保证机车车辆安全有序地行车与调车作业。 铁路信号随着第一列列车在英国出现而出现。 早期的信号是十分简陋的。 现代信号借助电子工业的发展,使行车指挥系统走上自动化,列车运行也向着自动驾驶与自动控制发展。 中国于1907年在大连至长春的铁路上开始安装了臂板式信号机,1951年自行设计与制造的进路继电式集中联锁设备装在衡阳铁路车站。 此后在各铁路线上逐步配置了自动闭塞、集中联锁、调度集中控制等设备。 分类 铁路信号按其作用可分为指挥列车运行的行车信号和指挥调车作业的调车信号;按信号设置的处所可分为车站信号、区间信号,以及行车指挥和列车运行自动化等;按信号显示制式可分为选路制信号和速差制信号;按结构可分为臂板信号和色灯、灯列信号。 铁路信号设备可分为三大类:一是信号机,其原始形式是手灯、手旗、明火、声笛等,现代信号机主要有进、出站信号机,通过信号机,进路信号机,驼峰信号机,驼峰辅助信号机,接近信号机,遮断信号机,调车信号机,防护信号机,减速信号机和停车信号机等,以及其他复示信号机等辅助性信号机;二是标志,主要有预告标、站界标、警冲标、鸣笛标、作业标、减速地点标及机车停止位置标等;三是表示器,其作用是补充说明信号的意义,主要有发车表示器、发车线路表示器、进路表示器、调车表示器、道岔表示器等。 技术和设备 包括车站信号、区间信号 、行车指挥自动化、列车运行自动化、驼峰调车控制等项。 ①铁路车站信号。 在车站范围内,指示列车或机车运行条件以保证行车和调车安全的信号,其内容主要包括车站联锁、平面调车控制、车站信号遥控遥信等。 通常在站内股道很多,进路交叉也复杂,因此信号必须与道岔、进路保持一定的操作顺序,形成联锁。 现代已广泛使用继电集中联锁,以及允许车列溜放、保持退路安全的平面调车控制和节省电缆、人力的车站信号遥控遥信系统。 ②铁路区间信号。 用以保护区间内列车行车安全,主要包括区间闭塞、车内信号、铁路道口防护、防护报警和轴温探测等。 区间闭塞是为了防止在区间运行的列车发生对撞和追尾事故。 当区间采用半自动或自动闭塞后,区间信号得到了很大完善,同时可将地面信号引入机车驾驶室中,形成易见的车内信号;而和公路相交的道口,可设置面向公路的道口防护和防护报警。 ③铁路行车指挥自动化是应用计算机等设备自动收集信号设备状况和列车运行的信息并进行处理,及时发出指挥列车运行的命令,以实现调度集中控制。 行车指挥自动化的设备是在现有设备的基础上增加车次跟踪和计算机系统、通信设备以及故障检测设备等。 系统应用的主要软件有列车追踪、进路控制和运行调整。 ④铁路列车运行自动化是利用计算机对列车起动、行驶、调度和停车实行自动监督、控制和调整,由此提高行车的安全性,提高运行效率,改善司机的工作条件。 ⑤驼峰调车控制是在驼峰调车场上,为控制货车溜放进路和溜放速度,实现列车的分类、解体和编组控制。 控制方法可分为非机械化、机械化、半自动化和自动化的驼峰调车控制。 铁路信号发展的方向主要是实现高度自动化、智能化,以便保证行车和各种作业的安全、准确,提高效率。 道口遮断信号(highway crossing mono-indication obstruction signal) 当道口发生危及行车安全的情况时,用以向列车发出停车指示的信号。 在繁忙的有人看守道口,根据需要装设遮断信号机,该信号机距道口不得少于50m,并在遮断信号机前方不少于800m处安装遮断信号机的预告信号机。
工具库管理有什么好的办法?
第一条 目的为了加强对工具库日常工作的管理,保证公司对工具、量具、刀具发放的顺畅和有效控制,防止超额发放。 在满足生产经营需求条件下,尽可能的减少消耗,以提高库存周转率,降低消耗成本。 第二条 适用范围本办法适用于北京南车时代制动技术有限公司制造部工具库。 第三条 职责库管员:①根据存货情况与通用刀具的使用情况,做出采购计划经主管生产部长确认,并报交采购人员采购;②负责采购物资的验收(包括名称、规格、材质、数量的校对等);③负责入账管理、定额发放以及废旧回收;④负责在帐物资做到帐、卡、物相符,不在帐物资需手工建立台帐,同时也要做到帐、卡、物相符。 采购员:根据采购计划进行采购。 质检员:量具入库前进行质量检查,检查合格后下发检定合格证。 第四条 管理内容及方法1. 采购的工具、量具、刀具验收工作,应在承付期内完成。 量具入库前须经质检员检查验收合格并下发检定合格证后方可办理入库(入帐)。 发生问题及时通知采购人员办理退补手续。 2.已入库的工具、量具、刀具必须建立台帐,并妥善保管,管库员要做到分品种分类存放、码放整齐、标志清晰;同一品种规格而技术数据不同的物资,要分别标识和保管,作出明确记录,防止混串错发造成质量事故,管库人员对库存备品应坚持日清月盘点。 3.工具、量具、刀具的发放管理,要以账、卡、物相符为主要内容,发放及时、手续齐备、数量准确、质量完好;发放应按照先进先出原则,根据物资种类、消耗定额、物资金额及审批权限进行有控制的发放。 4.在消耗定额限额之内的物资应按消耗定额进行发放。 库管员在ERP中建立专用台账记录领用情况,所发放工具、量具、刀具必须以旧换新,否则不予发放。 5.工具库内的各种工具、量具、刀具等不可私自借出,如有借用,须由工具库库管员办理借出手续,借出人与借用人签字后方可借出。 6.对于试用或第一次购置的刀具,发放需由制造部工程师确认后方可领用,试用合格后纳入消耗定额按计划发放。 7.对于回收后有重新利用价值的工具、刀具等物资,制造部技术组对其首次利用进行核查,如可以使用,以旧换新发出,同时单独做好记录。 8. 对于消耗量较大的刀具(超过定额要求),管库员做好计录,月底对其进行核实,并准确验证消耗情况,每月报交制造部技术组。 9.超出消耗定额限额之外物资的发放,必须经过制造部调度的批准方可发放,之后调度及时与工艺人员沟通;凡无审批手续的,一律不准超领超发。 无消耗定额须先经过使用部门副经理以上批准,最后由制造部副经理以上批准方可发放。 工具库做好记录。 10.劳保用品按公司劳保规定标准发放。 11.物资的发放必须做到物料编码、数量、型号、材料、规格等方面严格规范,杜绝错发、错输、漏发、漏输、多发、多输现象的发生。 第五条 奖惩1.对于操作者废旧利用的刀具,在满足工艺要求的情况下,给予一定的经济奖励:1.1 对机夹刀废旧利用者:在改进刀片的情况下一次性给予原刀片税后价格50%的奖励;在改进刀杆的情况下一次性给予原刀杆税后价格20%的奖励;1.2 对焊接刀具改进者:在满足刀具定额的情况下,超额完成工件数10%~29%的,一次性给予原焊接刀具税后价格20%的奖励;超额完成工件数30%~49%的,一次性给予原焊接刀具税后价格50%的奖励;超额完成工件数50%以上的,一次性给予原焊接刀具税后价格100%的奖励。
参考资料:
怎么在kubernetes里面搭建hadoop集群
Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。 它可以完美运行在现代的操作系统环境(比如CoreOS和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点。 Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。 我们(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种与计算集群交互的标准方式。 Kubernetes重新实现了Google在构建集群应用时积累的经验。 这些概念包括如下内容:Pods:一种将容器组织在一起的方法;Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);Labels:一种可以找到和查询容器的方法;Services:一个用于实现某一特定功能的容器组;因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。 在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。 打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。 Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。 Mesos是分布式系统内核,它可以将不同的机器整合在一个逻辑计算机上面。 当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。 有很多的现代化可扩展性的数据处理应用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。 在某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简
发表评论