-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
nodeAffinity #160
Comments
您提出了一个很好的观点。让我们分析一下您提到的方法,并比较它与之前的方法。 您提到的配置: affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- us-central1-a
- us-central1-f 这种方法确实有其优点:
然而,这种方法也有一些需要注意的地方:
比较而言,之前讨论的 结论: 您提到的方法确实提供了更高的灵活性和精确控制。对于需要精确控制Pod分布在特定zone的场景,这种方法是非常合适的。 然而,为了获得最佳结果,我建议将您的方法与 spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- us-central1-a
- us-central1-f
- us-central1-b
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: my-app 这种组合方法既能让您控制Pod可以分布的具体zone,又能确保在这些zone之间的分布是均匀的。 您认为这种组合方法如何?它是否能更好地满足您的需求? |
帮我总结下下面三个 当然,我很乐意为您总结这三种Kubernetes调度策略。让我们逐一分析它们的特点和用途。
比较和结合使用:
这些策略可以结合使用,以实现更复杂和精细的调度需求。例如:
选择哪种策略或如何组合,取决于您的具体需求,如可用性要求、性能考虑、硬件限制等。 您是否需要我针对某个特定场景,详细说明如何组合使用这些策略? 我理解您的目标是在有大量Pod的情况下,实现两个关键点:
这是一个很好的策略,可以提高应用的可用性和性能。让我们来设计一个配置来满足这些需求。 apiVersion: apps/v1
kind: Deployment
metadata:
name: multi-zone-balanced-app
spec:
replicas: 18 # 假设我们有大量Pod,这里设置为18个作为例子
selector:
matchLabels:
app: multi-zone-balanced-app
template:
metadata:
labels:
app: multi-zone-balanced-app
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- us-central1-a
- us-central1-b
- us-central1-f
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- multi-zone-balanced-app
topologyKey: "kubernetes.io/hostname"
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: multi-zone-balanced-app
- maxSkew: 2
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: multi-zone-balanced-app
containers:
- name: multi-zone-balanced-app
image: your-image:tag 让我解释一下这个配置的关键部分:
这个配置的优点:
使用这个配置时,请注意:
这个配置应该能很好地满足您的需求,实现Pod在不同Node和不同zone间的均匀分布。如果您需要进一步的调整或有任何问题,请随时告诉我。 |
https://cloud.google.com/kubernetes-engine/docs/how-to/gke-zonal-topology#nodeaffinity-placement
参考这个链接,如果我想要将我的Deployment比较均匀的分布在我的GKE 的Node上,并且按照zonal来分布,那么我的Deployment应该怎么配置比较合理
假设我的zone 是三个 不如是us-central1-a us-central1-f us-central1-b
假设我的Pod是6个 Node是3个
那么我的Pod想要的分布是每个Node运行2个对应的Pod
如果我的Pod是6个 如果仅仅想要每个Node运行一个对应的Pod那么应该怎么配置?
我理解您想要在GKE集群中实现Pod的均匀分布,特别是按照zone来分布。我会根据您提供的信息来给出建议。首先,我需要澄清一点:我无法直接访问或打开您提供的链接,但我会基于我对GKE和Kubernetes的理解来回答您的问题。
让我们分两种情况来讨论配置:
对于这种情况,您可以使用
podAntiAffinity
来确保Pod分布在不同的Node上,同时使用topologySpreadConstraints
来控制分布的均匀性。以下是一个示例配置:这个配置做了以下几点:
使用
podAntiAffinity
来尽量避免将相同应用的Pod调度到同一个Node上。使用
topologySpreadConstraints
来确保Pod尽可能均匀地分布在不同的zone中。6个Pod分布在3个Node上(每个Node 1个Pod):
对于这种情况,我们需要更严格的
podAntiAffinity
规则。这里是修改后的配置:主要的变化是:
podAntiAffinity
规则从preferredDuringSchedulingIgnoredDuringExecution
改为requiredDuringSchedulingIgnoredDuringExecution
,这确保了每个Node上只会调度一个Pod。topologySpreadConstraints
中的whenUnsatisfiable
从ScheduleAnyway
改为DoNotSchedule
,这确保了Pod会严格按照zone均匀分布。请注意,这种配置要求您的集群至少有6个Node(每个zone至少2个),否则部分Pod可能无法被调度。
这些配置应该能够满足您的需求。如果您需要进一步的解释或者有任何问题,请随时告诉我。
The text was updated successfully, but these errors were encountered: