Azure Kubernetes Powershell Scripts
Mass resources change
Необходимо добавить 10% по памяти всем всем всем деплойментам
$deployments = kubectl get deployments -o json | ConvertFrom-Json | Select-Object -ExpandProperty items
foreach($deployment in $deployments) {
# $deployment = $deployments |? { $_.metadata.name -eq 'users-api' }
foreach($container in $deployment.spec.template.spec.containers) {
# $container = $deployment.spec.template.spec.containers[0]
if (-not $container.resources.requests.memory) {
Write-Host "$($($deployment.metadata.name)) has no memory requests - skipping" -ForegroundColor Cyan
continue
}
if (-not $container.resources.limits.memory) {
Write-Host "$($($deployment.metadata.name)) has no memory limits - skipping" -ForegroundColor Cyan
continue
}
if ($container.resources.requests.memory.Contains('Gi') -or $container.resources.limits.memory.Contains('Gi')) {
Write-Host "$($($deployment.metadata.name)) has big memory requests of $($($container.resources.requests.memory)) - skipping" -ForegroundColor Cyan
continue
}
$requestsCurrent = [int]$container.resources.requests.memory.Replace('Gi', '000').Replace('Mi', '')
$requestsDesired = [math]::Ceiling( $requestsCurrent * 1.1 / 10 ) * 10
$limitsCurrent = [int]$container.resources.limits.memory.Replace('Mi', '')
$limitsDesired = [math]::Ceiling( $limitsCurrent * 1.1 / 10 ) * 10
# Write-Host "$($deployment.metadata.name) requests $requestsCurrent > $requestsDesired limits $limitsCurrent > $limitsDesired"
$patch = @{
spec = @{
template = @{
spec = @{
containers = @(
@{
name = $container.name
resources = @{
requests = @{
memory = "$($requestsDesired)Mi"
}
limits = @{
memory = "$($limitsDesired)Mi"
cpu = $null
}
}
}
)
}
}
}
} | ConvertTo-Json -Compress -Depth 100
Write-Host "kubectl patch deployment $($deployment.metadata.name) -p '$patch'"
}
}Примечание: это скрипт который на деле ничего не меняет и просто генерит команды для каждого деплоймента, далее руками для самых больших и важных по ощущениям выполняем, глядим что бы применилось и что приложешька заработала, как набрались уверенности уже массово все применяем
Kubernetes Mass Node Affinity Change
This script was used to mass change of node affinity from "app" to "svc" while separating foreground and background workloads
kubectx test
kubens test2
$deployments = kubectl get deployments -o json | ConvertFrom-Json | Select-Object -ExpandProperty items
foreach($deployment in $deployments) {
if ($deployment.metadata.name -in $('alliance-jobmob', 'chat-api-job-redis', 'employer-events-api', 'mailhog')) { continue }
if ($deployment.metadata.name.ToLower() -notmatch 'mail|consumer|event|job') { continue }
$affinity = $deployment.spec.template.spec.affinity
if (-not $affinity) { continue }
if ($affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0] -eq 'svc') { continue }
$affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0] = 'svc'
$patch = ConvertTo-Json -Compress -Depth 100 -InputObject @{
spec = @{
template = @{
spec = @{
affinity = $affinity
}
}
}
}
Write-Host "kubectl patch deployment $($deployment.metadata.name) -p '$patch'"
Write-Host "kubectl rollout status deployment/$($deployment.metadata.name) --timeout=1m"
Write-Host ""
}
$cronjobs = kubectl get cronjobs -o json | ConvertFrom-Json | Select-Object -ExpandProperty items
foreach($cronjob in $cronjobs) {
$affinity = $cronjob.spec.jobTemplate.spec.template.spec.affinity
if (-not $affinity) { continue }
if ($affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0] -eq 'svc') { continue }
$affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0] = 'svc'
$patch = ConvertTo-Json -Compress -Depth 100 -InputObject @{
spec = @{
jobTemplate = @{
spec = @{
template = @{
spec = @{
affinity = $affinity
}
}
}
}
}
}
Write-Host "kubectl patch cronjob $($cronjob.metadata.name) -p '$patch'"
}