k8s数据库集群pod调度,k8s部署consul集群
原标题:k8s数据库集群pod调度,k8s部署consul集群
导读:
聊聊kube-scheduler如何完成调度和调整调度权重首先,当用户通过API或kubectl创建Pod时,kube-apiserver将请求信息存储于etcd中。Kube...
聊聊kube-scheduler如何完成调度和调整调度权重
首先,当用户通过API或kubectl创建Pod时,kube-apiserver将请求信息存储于ETCd中。Kube-scheduler通过watch机制监听apiserver,获取待调度的pod列表。接着,Kube-scheduler逐个尝试为每个POD分配Node。
调度器(kube-scheduler)的任务是将未调度的 Pod 分配到合适的节点。它通过监测机制发现新创建但未调度的 Pod,然后基于一系列规则进行选择。调度流程包括过滤和打分两个步骤。过滤阶段,调度器筛选出满足条件的节点;打分阶段,对筛选出的节点进行评分,最终选择得分最高的节点部署 Pod。
在Kubernetes 项目中,默认调度器(default scheduler)的主要职责,就是为一个新创建出来的 Pod,寻找一个最合适的节点(Node)。 而这里“最合适”的含义,包括三层: 所以在具体的调度流程中,默认调度器会首先调用一组叫作 Predicate 的调度算法,来检查每个 Node。
当创建pod时候,会首先把创建的命令请求提交给apiserver,通过一系列认证授权,apiserver把pod数据存储到etcd,创建deployment资源并初始化。然后再是scheduler通过进行list-watch机制进行监测,经过 调度算法 把pod调度到某个node节点上,最后信息更新到etcd,再后面就是kubelet接受信息到创建容器。
一般情况下kubernets可以通过kube-scheduler默认的调度策略合理的将pod分配到可用的节点上, 但是随着pod数量的增加以及不同pod对资源的使用情况不同我们需要更加合理的分配集群中的资源, 所以对一些pod运行节点的控制是由必要的。
K8s也能面向对象?学会这三要素,用K8s就跟编程一样
1、K8s确实采用了面向对象的设计模式。在K8s中运用面向对象思维的关键三要素包括:Pod:定义:Pod是K8s中最小的调度单元,代表了一个运行特定容器应用的环境。作用:是K8s管理容器应用的基本单位,开发人员需要理解Pod的创建、配置和管理方式。
2、对于开发人员来说,掌握K8s中的几个核心对象是至关重要的:Pod、Deployment、ReplicaSet和Service。
3、K8s的基本概念 K8s是一个容器集群管理系统,提供了广泛的选择,不局限于特定的应用类型、编程语言或中间件。 只需应用能够在容器中运行,即可在Kubernetes上运行。
K8S集群下的GPU调度
1、首先,Kubernetes本身支持设备插件(Device Plugin)功能,这使得Pod能够访问如GPU等特殊硬件资源。借助这一特性,K8S用户能更灵活地利用集群中的GPU资源。为了确保正确识别服务器上的GPU型号,用户可以在系统中查看硬件信息。
2、在k8s集群中,通过扩展资源的方式将GPU注册到节点信息中。调度器根据这些扩展资源信息分配资源,实现多个Pod共享使用同一张显卡。GPU隔离技术:显存隔离:将GPU的显存资源进行隔离,确保不同任务之间不会相互干扰。算力隔离:将GPU的计算能力进行隔离,保证每个任务都能获得所需的计算能力。
3、要在k8s集群中实现GPU共享调度,即多个Pod共享使用同一张显卡,需要集群拥有细粒度分配GPU资源的机制,将整卡的资源拆分成多份,并分配给Pod。要做到这一点,一般是通过扩展资源的方式将GPU注册到节点信息中,调度器根据这些扩展资源信息分配资源,达到共享调度的目的。
4、鉴于资源和成本的限制,可以采用配备入门级 GPU 显卡的虚拟机作为集群的 Worker 节点。使用 KubeKey 扩容 GPU Worker 节点:修改集群配置文件:在 Control 节点上,修改集群配置文件以包含新增的 GPU Worker 节点信息。使用 KubeKey 增加节点:执行命令,将新增的 Worker 节点加入集群。
k8s将pod调度到指定节点的几种方式
1、方式二:通过指定NodeName。在Pod中配置nodeName字段,直接指派对应节点。示例如下:查看node名称。列出节点名称,例如k8s-master。在Pod中使用nodeName指定此节点。通过kubectl APPly创建Pod后,检查Pod是否调度至指定节点。使用nodeName选择节点方式存在局限性。方式三:亲和性和反亲和性。
2、假设以下场景:有三个Node,分别为1010109,创建Deployments来部署tomcat应用,指定在107节点上创建Pod。解决方案 nodeName Pod.spec.nodeName将Pod直接调度到指定的Node节点上,会跳过Scheduler的调度策略,该匹配规则是强制匹配。
3、在集群中为节点添加标签。例如,设置app: goweb-node。 编写goweb应用的Deployment文件。设置Pod的定义,确保与应用需求相匹配。 为Deployment添加nodeSelector字段,指定Pod应部署在具有特定标签的节点上,如App=goweb-node。 验证Pod是否成功调度到具有所需标签的节点。
4、nodeSelector配置相对简单,k8s提供了另外一个pod调度配置: nodeAffinity(节点亲和) ,相对于nodeSelector的简单匹配他拥有更多更加个性化的配置。这段配置表示:该pod可以被调度到标签key为 deploy.type ,值为 yztssjdxt-test 或 yztssjdxt 的节点。
K8S调度:实战完nodeSelector后,再谈应用场景。
1、nodeSelector在Kubernetes中的应用场景主要包括确保关键应用的高可用性运行和按特定资源需求分配Pod。以下是具体的应用场景分析:确保关键应用的高可用性:在Kubernetes集群中,某些节点可能配置了更高规格的硬件资源或更可靠的存储解决方案,因此更适合运行关键业务应用。
2、nodeSelector是Kubernetes中用于将Pod调度到具有特定标签的节点上的机制。例如,可以设置app: my-app,Kubernetes调度器会寻找标签为app=my-app的节点,将Pod部署在其上。这提供了基本的调度能力,还有更复杂的特性如Node Affinity、podAffinity、Taints and Tolerations。
3、k8s环境下,将REST Service部署至指定node list,需借助Node Selector、Affinity、nodeName等机制实现精准控制。基本策略包含三类:Node Selector、Affinity、nodeName。其中,Node Selector通过Pod中的nodeSelector属性直接指定目标node,通过key-value pairs匹配,仅需一对即可。