feat: set --node-ip for Windows kubelet in k8s v1.29+ (#4148)

This commit is contained in:
Chou Hu 2024-03-12 13:17:51 +08:00 коммит произвёл GitHub
Родитель 799e128aea
Коммит 8d34ec65a6
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
15 изменённых файлов: 71 добавлений и 14 удалений

Просмотреть файл

@ -65,6 +65,8 @@ $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_DOWNLOAD_FAILURE=58
$global:WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE=59
$global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION=60
$global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE=61
$global:WINDOWS_CSE_ERROR_UPDATING_KUBE_CLUSTER_CONFIG=62
$global:WINDOWS_CSE_ERROR_GET_NODE_IPV6_IP=63
# Please add new error code for downloading new packages in RP code too
$global:ErrorCodeNames = @(
@ -129,7 +131,9 @@ $global:ErrorCodeNames = @(
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_DOWNLOAD_FAILURE",
"WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE",
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION",
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE"
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE",
"WINDOWS_CSE_ERROR_UPDATING_KUBE_CLUSTER_CONFIG",
"WINDOWS_CSE_ERROR_GET_NODE_IPV6_IP"
)
# NOTE: KubernetesVersion does not contain "v"

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -8828,6 +8828,8 @@ $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_DOWNLOAD_FAILURE=58
$global:WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE=59
$global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION=60
$global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE=61
$global:WINDOWS_CSE_ERROR_UPDATING_KUBE_CLUSTER_CONFIG=62
$global:WINDOWS_CSE_ERROR_GET_NODE_IPV6_IP=63
# Please add new error code for downloading new packages in RP code too
$global:ErrorCodeNames = @(
@ -8892,7 +8894,9 @@ $global:ErrorCodeNames = @(
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_DOWNLOAD_FAILURE",
"WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE",
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION",
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE"
"WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE",
"WINDOWS_CSE_ERROR_UPDATING_KUBE_CLUSTER_CONFIG",
"WINDOWS_CSE_ERROR_GET_NODE_IPV6_IP"
)
# NOTE: KubernetesVersion does not contain "v"

Просмотреть файл

@ -403,6 +403,7 @@ function New-ExternalHnsNetwork
Write-Log "Creating new HNS network `"ext`""
$externalNetwork = "ext"
$nas = @(Get-NetAdapter -Physical)
$nodeIPs = @()
if ($nas.Count -eq 0) {
Set-ExitCode -ExitCode $global:WINDOWS_CSE_ERROR_NETWORK_ADAPTER_NOT_EXIST -ErrorMessage "Failed to find any physical network adapters"
@ -416,6 +417,36 @@ function New-ExternalHnsNetwork
{
$managementIP = $netIP.IPAddress
$adapterName = $na.Name
Write-Log "Get node IPv4 address assigned to the adapter $($na.Name): $($managementIP)"
$nodeIPs += $managementIP
if ($IsDualStackEnabled) {
$netIPv6s = Get-NetIPAddress -ifIndex $na.ifIndex -AddressFamily IPv6 -ErrorAction SilentlyContinue -ErrorVariable netIPErr
foreach($ipv6 in $netIPv6s)
{
# On an Azure Windows VM, there are two IPv6 IP addresses. Below is an example. It is same in an Azure Linux VM.
# ifIndex IPAddress PrefixLength PrefixOrigin SuffixOrigin AddressState PolicyStore
# ------- --------- ------------ ------------ ------------ ------------ -----------
# 6 fe80::97bd:baf7:2853:f73d%6 64 WellKnown Link Preferred ActiveStore
# 6 2404:f800:8000:122::4 128 Dhcp Dhcp Preferred ActiveStore
#
# From the found docuements. fe80: with WellKnown is the link-local address so we should ignore it.
# IPv6 link-local is a special type of unicast address that is auto-configured on any interface using a combination of
# the link-local prefix FE80::/10 (first 10 bits equal to 1111 1110 10) and the MAC address of the interface.
#
# https://learn.microsoft.com/en-us/dotnet/api/system.net.networkinformation.prefixorigin?view=net-8.0
# WellKnown | 2 | The prefix is a well-known prefix. Well-known prefixes are specified in standard-track Request for
# Comments (RFC) documents and assigned by the Internet Assigned Numbers Authority (Iana) or an address registry. Such
# prefixes are reserved for special purposes. -- | -- | --
if ($ipv6.PrefixOrigin -ne "WellKnown")
{
Write-Log "Get node IPv6 address assigned to the adapter $($na.Name): $($ipv6.IPAddress)"
$nodeIPs += $ipv6.IPAddress
}
}
}
break
}
else {
@ -432,6 +463,24 @@ function New-ExternalHnsNetwork
Set-ExitCode -ExitCode $global:WINDOWS_CSE_ERROR_NOT_FOUND_MANAGEMENT_IP -ErrorMessage "None of the physical network adapters has an IP address"
}
# https://github.com/kubernetes/kubernetes/pull/121028
if (([version]$global:KubeBinariesVersion).CompareTo([version]("1.29.0")) -ge 0) {
Logs-To-Event -TaskName "AKS.WindowsCSE.UpdateKubeClusterConfig" -TaskMessage "Start to update KubeCluster Config. NodeIPs: $nodeIPs"
# It should always get ipv4 address. Otherwise, it will throw WINDOWS_CSE_ERROR_NOT_FOUND_MANAGEMENT_IP
if ($IsDualStackEnabled -and $nodeIPs.Count -eq 1) {
Set-ExitCode -ExitCode $global:WINDOWS_CSE_ERROR_GET_NODE_IPV6_IP -ErrorMessage "Failed to get node IPv6 IP address"
}
try {
$clusterConfiguration = ConvertFrom-Json ((Get-Content $global:KubeClusterConfigPath -ErrorAction Stop) | Out-String)
$clusterConfiguration.Kubernetes.Kubelet.ConfigArgs += "--node-ip=$($nodeIPs -join ',')"
$clusterConfiguration | ConvertTo-Json -Depth 10 | Out-File -FilePath $global:KubeClusterConfigPath
} catch {
Set-ExitCode -ExitCode $global:WINDOWS_CSE_ERROR_UPDATING_KUBE_CLUSTER_CONFIG -ErrorMessage "Failed in updating kube cluster config. Error: $_"
}
}
Write-Log "Using adapter $adapterName with IP address $managementIP"
$mgmtIPAfterNetworkCreate