当前位置:首页 > Web开发 > 正文

kubernetes.io/arch=amd64

2024-03-31 Web开发

关于作者 刘海平(HappyLau )云计算高级参谋 目前在腾讯云从事公有云相关事情,曾就职于酷狗,EasyStack,拥有多年公有云+私有云计算架构设计,运维,交付相关经验,参预了酷狗,南方电网,国泰君安等大型私有云平台扶植,精通Linux,Kubernetes,OpenStack,Ceph等开源技术,在云计算范围具有丰富实战经验,拥有RHCA/OpenStack/Linux授课经验。

写在前面

上一篇文章中kubernetes系列教程(六)kubernetes资源打点和处事质量初阶介绍了kubernetes中的resource资源调理和处事质量Qos,介绍了kubernetes中如何界说pod的资源和资源调理,以及设置resource之后的优先级别Qos,接下来介绍kubernetes系列教程pod的调理机制。

1. Pod调理 1.1 pod调理概述

kubernets是容器编排引擎,此中最主要的一个成果是容器的调理,通过kube-scheduler实现容器的完全自动化调理,调理周期分为:调理周期Scheduling Cycle和绑定周期Binding Cycle,此中调理周期细分为过滤filter和weight称重,凭据指定的调理计谋将满足运行pod节点的node赛选出来,然后进行排序;绑定周期是颠末kube-scheduler调理优选的pod后,由特定的node节点watch然后通过kubelet运行。

?

过滤阶段包罗预选Predicate和scoring排序,预选是筛选满足条件的node,排序是最满足条件的node打分并排序,预选的算法包罗有:

CheckNodeConditionPred 节点是否ready

MemoryPressure 节点内存是否压力大(内存是否足够)

DiskPressure 节点磁盘压力是否大(空间是否足够)

PIDPressure 节点Pid是否有压力(Pid进程是否足够)

GeneralPred 匹配pod.spec.hostname字段

MatchNodeSelector 匹配pod.spec.nodeSelector标签

PodFitsResources 判断resource界说的资源是否满足

PodToleratesNodeTaints 能容忍的污点pod.spec.tolerations

CheckNodeLabelPresence

CheckServiceAffinity

CheckVolumeBinding

NoVolumeZoneConflict

过滤条件需要查抄node上满足的条件,可以通过kubectl describe node node-id方法检察,如下图:

优选调理算法有:

least_requested 资源消耗最小的节点

balanced_resource_allocation 各项资源消耗最均匀的节点

node_prefer_avoid_pods 节点倾向

taint_toleration 污点检测,检测有污点条件的node,得分越低

selector_spreading 节点selector

interpod_affinity pod亲和力遍历

most_requested 资源消耗最大的节点

node_label node标签

1. 2 指定nodeName调理

nodeName是PodSpec中的一个字段,可以通过pod.spec.nodeName指定将pod调理到某个具体的node节点上,该字段对照特殊一般都为空,如果有设置nodeName字段,kube-scheduler会直接跳过调理,在特定节点上通过kubelet启动pod。通过nodeName调理并非是集群的智能调理,通过指定调理的方法可能会存在资源不均匀的情况,建议设置Guaranteed的Qos,防备资源不均时候Pod被摈除evince。如下以创建一个pod运行在node-3上为例:

编写yaml将pod指定在node-3节点上运行

[[email protected] demo]# cat nginx-nodeName.yaml apiVersion: v1 kind: Pod metadata: name: nginx-run-on-nodename annotations: kubernetes.io/description: "Running the Pod on specific nodeName" spec: containers: - name: nginx-run-on-nodename image: nginx:latest ports: - name: http-80-port protocol: TCP containerPort: 80 nodeName: node-3 #通过nodeName指定将nginx-run-on-nodename运行在特定节点node-3上

运行yaml配置使之生效

[[email protected] demo]# kubectl apply -f nginx-nodeName.yaml pod/nginx-run-on-nodename created

检察确认pod的运行情况,已运行在node-3节点

[[email protected] demo]# kubectl get pods nginx-run-on-nodename -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-run-on-nodename 1/1 Running 0 6m52s 10.244.2.15 node-3 <none> <none> 1.2. 通过nodeSelector调理 nodeSelector是PodSpec中的一个字段,nodeSelector是最简单实现将pod运行在特定node节点的实现方法,其通过指定key和value键值对的方法实现,需要node设置上匹配的Labels,节点调理的时候指定上特定的labels即可。如下以node-2添加一个app:web的labels,调理pod的时候通过nodeSelector选择该labels:

给node-2添加labels

[[email protected] demo]# kubectl label node node-2 app=web node/node-2 labeled

检察校验labels设置情况,node-2增加多了一个app=web的labels

[[email protected] demo]# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS node-1 Ready master 15d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-1,kubernetes.io/os=linux,node-role.kubernetes.io/master= node-2 Ready <none> 15d v1.15.3 app=web,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-2,kubernetes.io/os=linux node-3 Ready <none> 15d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-3,kubernetes.io/os=linux

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31214.html