哪里网站备案快,书画网站源码,零食网站建设的文案策划书,凡科做网站怎么样15个KUBERNETES调度情景实用指南
Kubernetes调度是确保集群中的Pod在适当节点上运行的关键组件。通过灵活配置调度策略#xff0c;可以提高资源利用率、负载平衡和高可用性。
在本文中#xff0c;我们将深入探讨一些实际的Kubernetes调度场景#xff0c;并提供相应的配置示…15个KUBERNETES调度情景实用指南
Kubernetes调度是确保集群中的Pod在适当节点上运行的关键组件。通过灵活配置调度策略可以提高资源利用率、负载平衡和高可用性。
在本文中我们将深入探讨一些实际的Kubernetes调度场景并提供相应的配置示例和最佳实践。
1. 基本场景 – NodeSelector
场景描述我们有一些标记有SSD硬盘的节点并且希望将需要高性能存储的Pod调度到这些节点上。
Pod配置
apiVersion: v1
kind: Pod
metadata:name: high-performance-pod
spec:containers:- name: my-containerimage: my-imagenodeSelector:disktype: ssd2. 高级场景 – 节点亲和性
场景描述我们希望将需要GPU的任务调度到带有GPU标签的节点上。
Pod配置
apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:containers:- name: my-containerimage: my-imageaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: gpuoperator: Invalues:- true3. 资源分配 – Pod优先级和预选调度
场景描述为了确保关键任务具有更高的优先级我们可以定义一个PriorityClass并将其应用到Pod上。
PriorityClass配置
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: high-priority
value: 1000000
globalDefault: false
description: High priority classPod配置
apiVersion: v1
kind: Pod
metadata:name: high-priority-pod
spec:containers:- name: my-containerimage: my-imagepriorityClassName: high-priority4. 防止Pod在同一节点上运行 – Pod反亲和性
场景描述通过Pod反亲和性我们可以确保同一组中的Pod不会被调度到同一节点上以提高高可用性。
Pod配置
apiVersion: v1
kind: Pod
metadata:name: anti-affinity-pod
spec:containers:- name: my-containerimage: my-imageaffinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- webtopologyKey: kubernetes.io/hostname5. 多副本拓扑域分布 – Pod拓扑分布
场景描述确保同一应用的多个Pod分布在不同的拓扑域以提高可用性。
部署配置
apiVersion: apps/v1
kind: Deployment
metadata:name: web-deployment
spec:replicas: 3selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- webtopologyKey: kubernetes.io/hostname6. 节点Taints和PodTolerations
场景描述通过节点的Taints我们可以标记节点只有具有相应Tolerations的Pod才能被调度到这些节点上。
节点配置
apiVersion: v1
kind: Node
metadata:name: node1
spec:taints:- key: specialvalue: uniqueeffect: NoSchedulePod配置
apiVersion: v1
kind: Pod
metadata:name: toleration-pod
spec:containers:- name: my-containerimage: my-imagetolerations:- key: specialoperator: Equalvalue: uniqueeffect: NoSchedule7. 自定义调度器 – 自定义调度器
场景描述定制调度器以满足特定的调度需求例如基于业务规则或特殊硬件条件。
自定义调度器示例
创建自定义调度器插件
// my_scheduler.go
package mainimport (k8s.io/kubernetes/pkg/schedulerk8s.io/kubernetes/pkg/scheduler/frameworkk8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinderk8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpreemptionk8s.io/kubernetes/pkg/scheduler/framework/plugins/names
)const (// YourSchedulerName is the name of your custom schedulerYourSchedulerName my-scheduler
)// New initializes a new scheduler with your custom plugins
func New() *scheduler.Config {return scheduler.Config{Client: scheduler.NewHTTPClient(),SchedulerName: YourSchedulerName,PercentageOfNodesToScore: 0.25,Profiles: []scheduler.Profile{{Name: YourSchedulerName,Plugins: []scheduler.Plugin{defaultpreemption.Name: defaultpreemption.New,defaultbinder.Name: defaultbinder.New,names.NewNodeResourcesFit(),names.NewNodePorts(),names.NewNodeAffinity(YourSchedulerName),names.NewNodeAffinityPriority(YourSchedulerName),},},},}
}func main() {// Use the New() function to create a new scheduler with your custom pluginsconfig : New()command : app.NewSchedulerCommand(// Use the WithConfig function to set your custom scheduler configurationapp.WithConfig(config),)f : command.Flags()f.AddGoFlagSet(flag.CommandLine)if err : command.Execute(); err ! nil {os.Exit(1)}
}编译并运行自定义调度器
go build my_scheduler.go
./my_scheduler8. Pod 优先级和抢占 – Pod 优先级和抢占
场景描述通过设置 Pod 的优先级和抢占策略确保关键任务被优先处理。
Pod 配置
apiVersion: v1
kind: Pod
metadata:name: priority-pod
spec:containers:- name: my-containerimage: my-imagepriorityClassName: high-priority9. 资源限制和请求 – 资源限制和请求
场景描述通过为 Pod 设置资源限制和请求调度器可以更好地优化资源利用。
Pod 配置
apiVersion: v1
kind: Pod
metadata:name: resource-pod
spec:containers:- name: my-containerimage: my-imageresources:limits:cpu: 2memory: 1Girequests:cpu: 1memory: 500Mi10. 亲和性和反亲和性规则 – 亲和性和反亲和性规则
场景描述使用亲和性和反亲和性规则确保 Pod 在特定节点上或避免与其他 Pod 被调度到同一节点。
Pod 配置
apiVersion: v1
kind: Pod
metadata:name: affinity-pod
spec:containers:- name: my-containerimage: my-imageaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: securityoperator: Invalues:- hightopologyKey: kubernetes.io/hostname11. Pod 中断预算 – Pod 中断预算
场景描述使用 Pod 中断预算限制允许在维护期间中断的 Pod 数量以确保系统稳定性。
PodDisruptionBudget 配置
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:name: web-pdb
spec:maxUnavailable: 1selector:matchLabels:app: web12. 水平 Pod 自动缩放器 – 水平扩展器
场景描述使用水平扩展器根据 CPU 使用率或其他指标自动调整 Pod 数量以满足应用需求。
HorizontalPodAutoscaler 配置
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: web-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: web-deploymentminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 7013. Pod 开销 – Pod 开销
场景描述通过设置 Pod 开销告知调度器考虑 Pod 需要的额外资源以避免在节点上调度过多的 Pod。
Pod 配置
apiVersion: v1
kind: Pod
metadata:name: overhead-pod
spec:containers:- name: my-containerimage: my-imageresources:requests:memory: 64Micpu: 250mlimits:memory: 128Micpu: 500moverhead:podFixed: 100Miephemeral-storage: 1Gi14. 节点本地 DNS 缓存 – 节点本地 DNS 缓存
场景描述在节点上启用本地 DNS 缓存以提高 DNS 查询性能。
kubelet 配置
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
clusterDomain: cluster.local
featureGates:CoreDNSLocalCache: true15. Pod 优先级类别 – Pod 优先级类别
场景描述使用 Pod 优先级类别将 Pod 划分为不同的优先级以确保关键任务被优先调度。
PriorityClass 配置
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: high-priority
value: 1000000
globalDefault: false
description: High priority class
preemptionPolicy: PreemptLowerPriority结论
这些场景涵盖了从基础到高级的 Kubernetes 调度实际案例。根据您的需求您可以选择适当的场景进行配置以优化集群的资源利用率和性能。
在实际应用中根据具体需求调整配置确保调度器的策略符合业务和性能要求。
***********链接https://yylives.cc/2024/02/29/kubernetes-scheduling-scenario-practical-guide/*************