package v1 import ( "cue.dev/x/k8s.io/apimachinery/pkg/apis/meta/v1" "cue.dev/x/k8s.io/apimachinery/pkg/util/intstr" ) // Eviction evicts a pod from its node subject to certain policies and safety // constraints. This is a subresource of Pod. A request to cause such an // eviction is created by POSTing to .../pods//evictions. #Eviction: { // APIVersion defines the versioned schema of this representation of an object. // Servers should convert recognized schemas to the latest internal value, and // may reject unrecognized values. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources "apiVersion": "policy/v1" // DeleteOptions may be provided "deleteOptions"?: v1.#DeleteOptions // Kind is a string value representing the REST resource this object represents. // Servers may infer this from the endpoint the client submits requests to. // Cannot be updated. In CamelCase. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "kind": "Eviction" // ObjectMeta describes the pod that is being evicted. "metadata"?: v1.#ObjectMeta } // PodDisruptionBudget is an object to define the max disruption that can be // caused to a collection of pods #PodDisruptionBudget: { // APIVersion defines the versioned schema of this representation of an object. // Servers should convert recognized schemas to the latest internal value, and // may reject unrecognized values. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources "apiVersion": "policy/v1" // Kind is a string value representing the REST resource this object represents. // Servers may infer this from the endpoint the client submits requests to. // Cannot be updated. In CamelCase. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "kind": "PodDisruptionBudget" // Standard object's metadata. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata "metadata"?: v1.#ObjectMeta // Specification of the desired behavior of the PodDisruptionBudget. "spec"?: #PodDisruptionBudgetSpec // Most recently observed status of the PodDisruptionBudget. "status"?: #PodDisruptionBudgetStatus } // PodDisruptionBudgetList is a collection of PodDisruptionBudgets. #PodDisruptionBudgetList: { // APIVersion defines the versioned schema of this representation of an object. // Servers should convert recognized schemas to the latest internal value, and // may reject unrecognized values. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources "apiVersion": "policy/v1" // Items is a list of PodDisruptionBudgets "items"!: [...#PodDisruptionBudget] // Kind is a string value representing the REST resource this object represents. // Servers may infer this from the endpoint the client submits requests to. // Cannot be updated. In CamelCase. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "kind": "PodDisruptionBudgetList" // Standard object's metadata. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata "metadata"?: v1.#ListMeta } // PodDisruptionBudgetSpec is a description of a PodDisruptionBudget. #PodDisruptionBudgetSpec: { // An eviction is allowed if at most "maxUnavailable" pods selected by // "selector" are unavailable after the eviction, i.e. even in absence of the // evicted pod. For example, one can prevent all voluntary evictions by // specifying 0. This is a mutually exclusive setting with "minAvailable". "maxUnavailable"?: intstr.#IntOrString // An eviction is allowed if at least "minAvailable" pods selected by "selector" // will still be available after the eviction, i.e. even in the absence of the // evicted pod. So for example you can prevent all voluntary evictions by // specifying "100%". "minAvailable"?: intstr.#IntOrString // Label query over pods whose evictions are managed by the disruption budget. A // null selector will match no pods, while an empty ({}) selector will select // all pods within the namespace. "selector"?: v1.#LabelSelector // UnhealthyPodEvictionPolicy defines the criteria for when unhealthy pods // should be considered for eviction. Current implementation considers healthy // pods, as pods that have status.conditions item with // type="Ready",status="True". // // Valid policies are IfHealthyBudget and AlwaysAllow. If no policy is // specified, the default behavior will be used, which corresponds to the // IfHealthyBudget policy. // // IfHealthyBudget policy means that running pods (status.phase="Running"), but // not yet healthy can be evicted only if the guarded application is not // disrupted (status.currentHealthy is at least equal to // status.desiredHealthy). Healthy pods will be subject to the PDB for // eviction. // // AlwaysAllow policy means that all running pods (status.phase="Running"), but // not yet healthy are considered disrupted and can be evicted regardless of // whether the criteria in a PDB is met. This means perspective running pods of // a disrupted application might not get a chance to become healthy. Healthy // pods will be subject to the PDB for eviction. // // Additional policies may be added in the future. Clients making eviction // decisions should disallow eviction of unhealthy pods if they encounter an // unrecognized policy in this field. "unhealthyPodEvictionPolicy"?: string } // PodDisruptionBudgetStatus represents information about the status of a // PodDisruptionBudget. Status may trail the actual state of a system. #PodDisruptionBudgetStatus: { // Conditions contain conditions for PDB. The disruption controller sets the // DisruptionAllowed condition. The following are known values for the reason // field (additional reasons could be added in the future): - SyncFailed: The // controller encountered an error and wasn't able to compute // the number of allowed disruptions. Therefore no disruptions are // allowed and the status of the condition will be False. // - InsufficientPods: The number of pods are either at or below the number // required by the PodDisruptionBudget. No disruptions are // allowed and the status of the condition will be False. // - SufficientPods: There are more pods than required by the PodDisruptionBudget. // The condition will be True, and the number of allowed // disruptions are provided by the disruptionsAllowed property. "conditions"?: [...v1.#Condition] // current number of healthy pods "currentHealthy"?: int32 & int // minimum desired number of healthy pods "desiredHealthy"?: int32 & int // DisruptedPods contains information about pods whose eviction was processed by // the API server eviction subresource handler but has not yet been observed by // the PodDisruptionBudget controller. A pod will be in this map from the time // when the API server processed the eviction request to the time when the pod // is seen by PDB controller as having been marked for deletion (or after a // timeout). The key in the map is the name of the pod and the value is the // time when the API server processed the eviction request. If the deletion // didn't occur and a pod is still there it will be removed from the list // automatically by PodDisruptionBudget controller after some time. If // everything goes smooth this map should be empty for the most of the time. // Large number of entries in the map may indicate problems with pod deletions. "disruptedPods"?: [string]: v1.#Time // Number of pod disruptions that are currently allowed. "disruptionsAllowed"?: int32 & int // total number of pods counted by this disruption budget "expectedPods"?: int32 & int // Most recent generation observed when updating this PDB status. // DisruptionsAllowed and other status information is valid only if // observedGeneration equals to PDB's object generation. "observedGeneration"?: int64 & int }