当前位置:网站首页>kubernetes集群之调度系统
kubernetes集群之调度系统
2022-07-05 04:01:00 【江湖有缘】
kubernetes集群之调度系统
一、kube-scheduler介绍
1.kube-scheduler简介
1.Kubernetes Scheduler 是 Kubernetes 控制平面的核心组件之一。
2.Scheduler 在控制平面内运行,并将工作负载分配给 Kubernetes 集群。
3.kube-scheduler会根据 Kubernetes 的调度原则和我们的配置选项选择最佳节点来运行pod,
2.k8s的调度系统作用
1.资源使用率最大化
2.满足用户指定的调度需求
3.满足自定义优先级要求
4.调度效率高,能够根据资源情况快速做出决策
5.能够根据负载的变化调整调度策略
6.充分考虑各种层级的公平性
3.kubernetes组件示意图
4.schedule调度器工作示意图
二、查看kubernetes状态
[[email protected]-master ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready control-plane,master 39h v1.23.1 192.168.3.201 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 containerd://1.6.6
k8s-node01 Ready worker 39h v1.23.1 192.168.3.202 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 containerd://1.6.6
k8s-node02 Ready <none> 39h v1.23.1 192.168.3.203 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 containerd://1.6.6
三、kube-scheduler的选择节点流程
1.预选
.预选环节主要作用是用于排除不满足条件的节点。
#一个pod中容器运行的资源按要求
resources:
request:
cpu: 1
memory: 1Gi
2.优选
优选环节主要是对满足条件的节点进行打分。
打分的参考项
1.节点的实际资源占用
2.节点中pod的个数
3.节点中的cpu负载情况
4.节点中内存的使用情况
.......
3.终选
终选环节对节点按照打分做排序,找到分数最高节点,进行调度.
四、干预调度方法-标签选择器
1.标签选择器介绍
1.为指定的node打标签
2.为pod指定调度带有特定标签的节点
2.标签选择器的yaml写法
①查看所有节点标签
[[email protected]-master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready control-plane,master 40h v1.23.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node01 Ready worker 40h v1.23.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,node-role.kubernetes.io/worker=
k8s-node02 Ready <none> 40h v1.23.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux,type=dell730
②在yaml文件中选择标签
volumes:
- name: rootdir
hostPath:
path: /data/mysql
nodeSelector:
#disk: ssd
kubernetes.io/hostname=k8s-node01 #可以选择系统内置的独一无二的标签
containers:
- name: mysql
image: mysql:5.7
volumeMounts:
- name: rootdir
mountPath: /var/lib/mysql
3.运行一个完整pod示例
cat ./label.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: mysql
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy: {
}
template:
metadata:
creationTimestamp: null
labels:
app: mysql
spec:
volumes:
- name: datadir
hostPath:
path: /data/mysql
nodeSelector:
disk: ssd
nodeType: cpu
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "redhat"
volumeMounts:
- name: datadir
mountPath: /var/lib/mysql
4.给node02节点添加标签
[[email protected]-master ~]# kubectl label nodes k8s-node02 disk=ssd
node/k8s-node02 labeled
[[email protected]-master ~]# kubectl label nodes k8s-node02 nodeType=cpu
node/k8s-node02 labeled
5.创建pod
[[email protected]-master ~]# kubectl apply -f ./label.yaml
deployment.apps/mysql created
6.查看pod所在节点
[[email protected]-master ~]# kubectl get pod -owide |grep node02
elasticsearch-master-0 1/1 Running 2 (7m54s ago) 29h 10.244.58.224 k8s-node02 <none> <none>
fb-filebeat-lj5p7 1/1 Running 3 (7m54s ago) 28h 10.244.58.221 k8s-node02 <none> <none>
kb-kibana-5c46dbc5dd-htw7n 1/1 Running 1 (7m54s ago) 25h 10.244.58.222 k8s-node02 <none> <none>
metric-metricbeat-5h5g5 1/1 Running 2 (7m53s ago) 27h 192.168.3.203 k8s-node02 <none> <none>
metric-metricbeat-758c5c674-ldgg4 1/1 Running 2 (7m54s ago) 27h 10.244.58.225 k8s-node02 <none> <none>
mysql-59c6fc696d-qrjx9 1/1 Running 0 13m 10.244.58.223 k8s-node02 <none> <none>
五、干预调度方法——污点
1.污点taint介绍
污点:当一个节点被打伤taint标记时,默认情况下,任何pod都不会调度到该节点,即使这个节点被指定了标签选择器,必须选择这个节点,pod也不会运行到该节点,此时pod会pending。
2.污点类型
* preferNoSchedule:
尽可能的不调度
* NoSchedule: 不调度
当前node如果打伤污点之前已经有一些pod运行正在上面,当打上污点后,新的pod不会调度其上;但是已经运行的pod不会被驱逐
* NoExecute: 不调度 .
当前node如果打上污点之前已经有一些pod运行正在上面,当打上污点后,会立即驱逐现有pod
3.为工作节点创建污点
[[email protected]-master ~]# kubectl taint node k8s-node02 key1=value:NoSchedule
node/k8s-node02 tainted
[[email protected]-master ~]# kubectl taint node k8s-node02 key2=value:NoExecute
node/k8s-node02 tainted
4.删除工作节点上污点
kuberctl taint node k8s-node02 key1-
5.查看某个节点的污点
[[email protected]-master ~]# kubectl describe nodes k8s-node02 |grep -i tain -A2 -B2
nodeType=cpu
type=dell730
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 192.168.3.203/24
--
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Sun, 03 Jul 2022 01:14:11 +0800
Taints: key2=value:NoExecute
key1=value:NoSchedule
Unschedulable: false
--
Operating System: linux
Architecture: amd64
Container Runtime Version: containerd://1.6.6
Kubelet Version: v1.23.1
Kube-Proxy Version: v1.23.1
六、干预调度方法——容忍
1.容忍toerations介绍
1.容忍:当一个pod能够容忍节点上的污点时,不代表,它就会选择这个节点,而对该pod而言,该节点和其他没有污点的节点一样.。
2.一个pod可以容忍多个污点,当一个节点上存在多个污点时,只有该pod容忍这个节点上所有的污点时,这个节点在这个pod面前才能表现的跟没有污点的节点一样。
2.容忍和污点的pod选择
3.在yaml文件中容忍用法
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.5.2
tolerations:
- key: "check"
operator: "Equal"
value: "xtaint"
effect: "NoExecute"
tolerationSeconds: 3600
4.容忍相关参数解释
tolerations:----------->容忍
- key: "check" ----------->容忍的键
operator: "Equal"----------->操作符"等于"
value: "xtaint"----------->容忍的键对应的键值
effect: "NoExecute"----------->容忍的键对应的影响效果
tolerationSeconds: 3600----------->容忍3600秒。这个pod也不会像普通pod那样立即被驱逐,而是再等上3600秒才被删除。
边栏推荐
- 【PHP特性-变量覆盖】函数的使用不当、配置不当、代码逻辑漏洞
- Alibaba cloud ECS uses cloudfs4oss to mount OSS
- Operation flow of UE4 DMX and grandma2 onpc 3.1.2.5
- Threejs realizes sky box, panoramic scene, ground grass
- MindFusion.Virtual Keyboard for WPF
- The architect started to write a HelloWorld
- About authentication services (front and back, login, registration and exit, permission management)
- 汇编-入门
- C语言课设:影院售票管理系统
- [untitled]
猜你喜欢
[web Audit - source code disclosure] obtain source code methods and use tools
@The problem of cross database query invalidation caused by transactional annotation
输入的查询SQL语句,是如何执行的?
[understand series after reading] 6000 words teach you to realize interface automation from 0 to 1
How to use jedis of redis
Three level linkage demo of uniapp uview u-picker components
Containerization Foundation
[software reverse - basic knowledge] analysis method, assembly instruction architecture
Rust区块琏开发——签名加密与私钥公钥
[untitled]
随机推荐
Threejs loads the city obj model, loads the character gltf model, and tweetjs realizes the movement of characters according to the planned route
Alibaba cloud ECS uses cloudfs4oss to mount OSS
The architect started to write a HelloWorld
已解决(sqlalchemy+pandas.read_sql)AttributeError: ‘Engine‘ object has no attribute ‘execution_options‘
How to use jedis of redis
Analysis of dagger2 principle
官宣!第三届云原生编程挑战赛正式启动!
ClickPaaS低代码平台
C语言课设:影院售票管理系统
【刷题】BFS题目精选
Pyqt pyside custom telescopic menu bar sharing (including tutorial)
[wp][introduction] brush weak type questions
KVM virtualization
Excuse me, my request is a condition update, but it is blocked in the buffer. In this case, can I only flush the cache every time?
The new project Galaxy token just announced by coinlist is gal
技术教程:如何利用EasyDSS将直播流推到七牛云?
[wp]bmzclub几道题的writeup
On the day 25K joined Tencent, I cried
面试汇总:这是一份全面&详细的Android面试指南
ActiveReportsJS 3.1 VS ActiveReportsJS 3.0