K8S学习笔记之如何让多个Pod均匀部署到各个节点上
2023-09-27 14:23:25 时间
Kubernetes中kube-scheduler组件负责Pod的调度,对每一个新创建的 Pod 或者是未被调度的 Pod,kube-scheduler 会选择一个最优的节点去运行这个 Pod。
kube-scheduler 给一个 Pod 做调度选择包含过滤和打分两个步骤。
过滤阶段会将所有满足 Pod 调度需求的节点选出来,在打分阶段 kube-scheduler 会给每一个可调度节点进行优先级打分,最后kube-scheduler 会将 Pod 调度到得分最高的节点上,如果存在多个得分最高的节点,kube-scheduler 会从中随机选取一个。
打分优先级中节点调度均衡(BalancedResourceAllocation)只是其中一项,还有其他打分项会导致分布不均匀。详细的调度说明请参见Kubernetes 调度器和调度策略。
想要让多个Pod尽可能的均匀分布在各个节点上,可以考虑使用工作负载反亲和特性,让Pod之间尽量“互斥”,这样就能尽量均匀的分布在各节点上。
示例如下:
kind: Deployment apiVersion: apps/v1 metadata: name: nginx namespace: default spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: container-0 image: nginx:alpine resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi affinity: podAntiAffinity: # 工作负载反亲和 preferredDuringSchedulingIgnoredDuringExecution: # 尽量满足如下条件 - podAffinityTerm: labelSelector: # 选择Pod的标签,与工作负载本身反亲和 matchExpressions: - key: app operator: In values: - nginx namespaces: - default topologyKey: kubernetes.io/hostname # 在节点上起作用 imagePullSecrets: - name: default-secret
相关文章
- 基于K8s的DevOps平台实践(三)
- 看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点
- 【k8s】svc-sessionAffinityConfig
- 【k8s】cj-concurrencyPolicy
- 【k8s】deploy-maxUnavailable
- K8S 使用简单的NFS 作为 持久存储的 StorageClass 的简单测试.
- 2022-03-22 k8s的pvController的处理流程
- k8s集群添加删除node节点
- K8S 通过 yaml 文件创建资源
- Kubernetes(K8s) 安装与Node节点配置
- Kubernetes(k8s) 集群重装方法及步骤
- Kubernetes(k8s) etcd配置多节点集群方法
- Kubernetes(k8s) etcd 安装与配置单节点集群方法