Private/Get-NodeNonTerminatedPod.ps1
|
Function Get-NodeNonTerminatedPod { <# .SYNOPSIS Retrieves non-terminated pods for a specific node in a Kubernetes cluster. This function retrieves non-terminated pods for a specific node in a Kubernetes cluster, including their resource requests and limits. It can output metrics for individual containers within the pods. .EXAMPLE # Retrieves non-terminated pods for the specified node and pods. Get-NodeNonTerminatedPod -Node $Node -Pods $Pods #> [CmdletBinding()] param( [Parameter(Mandatory=$False)] [object[]]$Pods, [Parameter(Mandatory=$True)] [object]$Node ) Begin { [System.Collections.Generic.List[object]]$Results = @() } Process { ForEach($PodItem in $Pods) { $PodResources = @{ Requests = @{} Limits = @{} } $Metrics = @( 'Requests', 'Limits' ) ForEach($Container in $PodItem.Spec.Containers) { ForEach($Metric in $Metrics) { $Quantities = $Container.Resources.$Metric If($Null -eq $Quantities) { Continue } ForEach($Resource in $Quantities.Keys) { $Value = [string]$Quantities[$Resource] $PodResources[$Metric][$Resource] = [decimal]$PodResources[$Metric][$Resource] + (ConvertTo-KubePSResourceNumber $Value) } } $Object = [PSCustomObject]@{ PSTypeName = 'KubePS.Node.NonTerminatedPods' Node = $PodItem.Spec.nodeName Namespace = $PodItem.Metadata.NamespaceProperty Name = $PodItem.Metadata.Name Age = [DateTimeOffset]::UtcNow - [DateTimeOffset]$PodItem.Metadata.CreationTimestamp } ForEach($Resource in 'Cpu', 'Memory') { ForEach($Metric in $Metrics) { $Value = [decimal]$PodResources[$Metric][$Resource] $CapacityValue = ConvertTo-KubePSResourceNumber ([string]$Node.Status.Allocatable[$Resource.ToLowerInvariant()]) $Percent = $Null $DisplayValue = $Null If($CapacityValue -gt 0) { $Percent = [math]::Round(($Value / $CapacityValue) * 100, 2) } If($Value -ne 0) { If($Resource -eq 'Cpu') { $DisplayValue = [math]::Round($Value * 1000) } ElseIf($Resource -eq 'Memory') { $DisplayValue = [math]::Round($Value / 1MB, 2) } } $Object | Add-Member -MemberType NoteProperty -Name "${Resource}${Metric}" -Value $DisplayValue -Force $Object | Add-Member -MemberType NoteProperty -Name "${Resource}${Metric}%" -Value $Percent -Force } } $Results.Add($Object) } } } End { Return $Results } } |