乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
Kubernetes 02.04 pod节点调度
2023-05-17 02:22:23
36
0
0
admin
> Node标签,NodeSelector,PodAffinity # node 标签 ``` # 查看标签 kubectl get node -o custom-columns=HOSTNAME:.metadata.name,LABELS:.metadata.labels # 打标签 kubectl label nodes k8s-node-1 tag=node1 ``` # NodeSelector ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod namespace: default #默认 default labels: env: test spec: nodeSelector: tag: node1 containers: - image: centos:latest name: my-pod-container command: - /bin/sleep args: - "86400" ``` # NodeAffinity **requiredDuringSchedulingIgnoredDuringExecution** ```yaml apiVersion: apps/v1 kind: Deployment metadata: labels: tag: deployment-tag name: deployment-name spec: replicas: 4 selector: matchLabels: tag: pod-tag template: # pod info metadata: labels: tag: pod-tag spec: affinity: nodeAffinity: #必须满足条件,否则不部署 requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: tag operator: In #In,NotIn,Exists,DoesNotExists,Gt,Lt values: - node2 containers: - image: centos:latest name: my-pod-container command: - /bin/sleep args: - "86400" ``` **preferredDuringSchedulingIgnoredDuringExecution** ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod namespace: default #默认 default labels: env: test spec: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 # 1 ~ 100 preference: matchExpressions: - key: tag operator: In #In,NotIn,Exists,DoesNotExists,Gt,Lt values: - node2 - weight: 100 preference: matchExpressions: - key: tag operator: In #In,NotIn,Exists,DoesNotExists,Gt,Lt values: - node1 containers: - image: centos:latest name: my-pod-container command: - /bin/sleep args: - "86400" ``` **如果nodeSelector和nodeAffinity同时存在,要都满足** **nodeAffinity 中的多个nodeSelectorTerms 是或的关系** **nodeSelectorTerms 中多个matchExpressions 是与的关系** # PodAffinity 要和哪些pod 部署在一起或者不要部署在一起 ``` #看pod label kubectl get pod -o custom-columns=NAME:.metadata.name,NODE:spec.nodeName,LABELS:.metadata.labels NAME NODE LABELS special-pod k8s-node-2 map[tag:sp_pod] ``` **把满足条件的Pod 放一起** ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod namespace: default #默认 default labels: tag: my-pod spec: affinity: podAffinity: #必须满足条件,否则不部署 requiredDuringSchedulingIgnoredDuringExecution: - topologyKey: kubernetes.io/hostname labelSelector: matchExpressions: - key: tag operator: In #In,NotIn,Exists,DoesNotExists,Gt,Lt values: - sp_pod containers: - image: centos:latest name: my-pod-container command: - /bin/sleep args: - "86400" ``` 一般情况下 topologyKey 可以为非空的任何label, 但是admission controller 配置了LimitPodHardAntiAffinityTopology的话那就只可以是kubernetes.io/hostname **满足条件的Pod 不能放一起** ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod namespace: default #默认 default labels: tag: my-pod spec: affinity: podAntiAffinity: #必须满足条件,否则不部署 requiredDuringSchedulingIgnoredDuringExecution: - topologyKey: kubernetes.io/hostname labelSelector: matchExpressions: - key: tag operator: In #In,NotIn,Exists,DoesNotExists,Gt,Lt values: - sp_pod containers: - image: centos:latest name: my-pod-container command: - /bin/sleep args: - "86400" ```
上一篇:
Kubernetes 02.03 pod中健康检查
下一篇:
Kubernetes 02.05 pod节点调度_Taints_Tolerations
文档导航