File: Resources\PodAntiAffinityV1.cs
Web Access
Project: src\src\Aspire.Hosting.Kubernetes\Aspire.Hosting.Kubernetes.csproj (Aspire.Hosting.Kubernetes)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using YamlDotNet.Serialization;
 
namespace Aspire.Hosting.Kubernetes.Resources;
 
/// <summary>
/// Represents the pod anti-affinity rules used in Kubernetes scheduling policies.
/// </summary>
/// <remarks>
/// PodAntiAffinityV1 defines constraints for scheduling pods on nodes based on anti-affinity rules.
/// Anti-affinity is used to avoid placing certain pods close to each other or restrict them from being scheduled
/// on the same nodes within the cluster. This can enhance fault tolerance, resource allocation, or other layout requirements.
/// </remarks>
[YamlSerializable]
public sealed class PodAntiAffinityV1
{
    /// <summary>
    /// A list of weighted pod affinity terms that are considered during scheduling.
    /// This property allows specifying optional pod anti-affinity preferences for scheduling decisions,
    /// while permitting the system to schedule pods in scenarios where the preferences cannot be met.
    /// Each term is associated with a weight that indicates its relative importance.
    /// </summary>
    /// <remarks>
    /// The items in the list define preferences rather than strict requirements. The Kubernetes scheduler
    /// tries to place pods in a manner that satisfies the specified preferences, considering their weights,
    /// but it may also fall back to alternate scheduling strategies if the preferences cannot be accommodated.
    /// This property is primarily used to influence pod placement while maintaining scheduling flexibility.
    /// </remarks>
    [YamlMember(Alias = "preferredDuringSchedulingIgnoredDuringExecution")]
    public List<WeightedPodAffinityTermV1> PreferredDuringSchedulingIgnoredDuringExecution { get; } = [];
 
    /// <summary>
    /// Represents a list of PodAffinityTermV1 objects used to define required pod anti-affinity constraints
    /// that must be met during pod scheduling but are ignored during execution.
    /// This property ensures that certain pod placement rules are enforced when scheduling occurs;
    /// however, these rules can be relaxed if the constraints are violated at runtime,
    /// such as when a node becomes unavailable or pods are rescheduled for fault recovery.
    /// </summary>
    [YamlMember(Alias = "requiredDuringSchedulingIgnoredDuringExecution")]
    public List<PodAffinityTermV1> RequiredDuringSchedulingIgnoredDuringExecution { get; } = [];
}