AKS Edge Essentials 中的完整 Kubernetes 部署
警告
多部電腦上的完整部署目前是實驗性功能。 我們正積極處理這項功能。
您可以將 AKS Edge Essentials 叢集設定為在多部計算機上執行,以支援分散式微服務架構。 與雲端中的 AKS 或 AKS HCI 不同,AKS 邊緣程式集適合靜態的設定,且不會啟用動態 VM 建立/刪除或叢集生命週期管理。 AKS 邊緣程式集每部機器只有一個 Linux VM,以及視需要使用 Windows VM。 每個 VM 都有在安裝時間指派的 RAM、記憶體和實體 CPU 核心的靜態配置。 在多節點部署中,其中一部機器是具有 Kubernetes 控制節點的主要機器,另一部計算機將會是具有背景工作節點的次要機器。 在此部署案例中,我們將使用外部交換器來設定 K8S 叢集。 透過此設定,您可以從網路上的另一部電腦執行 kubectl
、評估外部交換器上的工作負載效能等等。
必要條件
如設定電腦一文所述 ,設定您的電腦 。
步驟 1:完整的 Kubernetes 部署組態參數
您可以使用下列命令來產生建立可調整叢集所需的參數:
New-AksEdgeConfig -DeploymentType ScalableCluster -outFile .\aksedge-config.json | Out-Null
此命令會建立名為 aksedge-config.json 的組態檔,其中包含使用 Linux 節點建立可調整叢集所需的組態。 檔案會建立在您目前的工作目錄中。 如需組態參數的詳細描述,請參閱 部署 JSON 組態 (例如 Proxy 設定)。
如需建立組態檔的詳細資訊,請參閱下列範例。
可調整 Kubernetes 部署所要注意的主要參數包括:
外部交換器資訊:完整部署會使用外部交換器來啟用節點之間的通訊。 您必須將
MachineConfigType.NetworkConnection.AdapterName
參數指定為Ethernet
或Wi-Fi
:# get the list of available adapters in the machine Get-NetAdapter -Physical | Where-Object { $_.Status -eq 'Up' }
如果您已在 Hyper-V 上建立外部交換器,您可以選擇在組態檔中指定 vswitch 詳細數據。 如果您未在 Hyper-V 管理員中建立外部交換器並執行
New-AksEdgeDeployment
命令,AKS Edge Essentials 會自動建立名為aksedgesw-ext
的外部交換器,並將它用於部署。注意
在此版本中,如果您使用Wi-Fi配接器進行交換器,則使用 命令自動建立外部交換
New-AksEdgeDeployment
器時,有一個已知問題。 在此情況下,請先使用 Hyper-V 管理員 - 虛擬交換器管理員建立外部交換器、將交換器對應至 Wi-fi 配接器,然後在您的設定 JSON 中提供交換器詳細數據,如下所示。IP 位址:您必須為控制平面、Kubernetes 服務和節點 (VM) 配置來自網路的免費 IP 位址。 如需詳細資訊,請參閱 AKS Edge Essentials 網路概觀。 例如,在具有 192.168.1.0/24 IP 位址範圍的局域網路中,您可能在 DHCP 範圍之外有 1.151 和更新版本,因此可能是免費的。 AKS Edge Essentials 目前僅支援 IPv4 位址。 在理想情況下,您將知道可以使用的免費IP位址;不過,您可以使用 GitHub 存放庫中的 AksEdge-ListUsedIPv4s 腳本來檢視目前使用的 IP,以避免在設定中使用這些 IP 位址。 組態檔的 區段中必須提供
Network
下列參數:ControlPlaneEndpointIp
、Ip4GatewayAddress
、、ServiceIPRangeSize
Ip4PrefixLength
、、ServiceIPRangeStart
和DnsServers
。
重要
Kubernetes pod cidr
適用於 10.42.0.0/16
K3 和 10.244.0.0/24
K8。 Kubernetes service cidr
適用於 10.43.0.0/16
K3 和 10.96.0.0/12
K8。
- 根據預設,此值
Network.NetworkPlugin
為flannel
。 Flannel 是 K3S 叢集的預設 CNI。 在 K8S 叢集中,將變更NetworkPlugin
為calico
。 - 除了先前的參數之外,您還可以根據部署組態來設定下列參數,如下所述:
LinuxNode.CpuCount
、LinuxNode.MemoryInMB
、WindowsNode.MemoryInMB
WindowsNode.CpuCount
LinuxNode.Ip4Address
LinuxNode.DataSizeInGB
、WindowsNode.Ip4Address
Init.ServiceIPRangeSize
、 和 。Network.InternetDisabled
步驟 2:驗證組態檔
更新 aksedge-config.json 檔案之後,請執行 AksEdgePrompt 工具。 此工具會開啟已提升許可權的 PowerShell 視窗,並載入模組。 然後執行下列命令,以使用 Test-AksEdgeNetworkParameters
Cmdlet 驗證您的網路參數:
Test-AksEdgeNetworkParameters -JsonConfigFilePath .\aksedge-config.json
步驟 3:建立完整的部署叢集
如果 Test-AksEdgeNetworkParameters
傳 true
回 ,您就可以開始建立部署。 您可以使用 Cmdlet 來建立部署 New-AksEdgeDeployment
:
New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json
Cmdlet New-AksEdgeDeployment
會自動擷取 kubeconfig 檔案。
步驟 4:驗證您的部署
kubectl get nodes -o wide
kubectl get pods --all-namespaces -o wide
Kubernetes 叢集的螢幕快照如下所示:
步驟 5:新增 Windows 背景工作角色節點(選擇性)
警告
Windows 背景工作節點是此版本中的實驗性功能。 我們正積極處理這項功能。
如果您想要將 Windows 節點新增至現有的僅限 Linux 計算機,您可以執行:
New-AksEdgeScaleConfig -ScaleType AddNode -NodeType Windows -WindowsNodeIp "xxx" -outFile .\ScaleConfig.json | Out-Null
您也可以在這裡指定 Windows VM 的參數,例如 CpuCount
和/或 MemoryInMB
。
您可以使用產生的組態檔,並執行下列命令來新增 Windows 節點
Add-AksEdgeNode -JsonConfigFilePath .\ScaleConfig.json
不同部署選項的範例組態
將資源配置給您的節點
若要使用 GitOps 連線至 Arc 並部署您的應用程式,請配置四個 CPU 或更多 CPU 以用於 LinuxNode.CpuCount
(處理能力)、4 GB 以上用於 LinuxNode.MemoryinMB
(RAM),並將大於 0 的數位指派給 ServiceIpRangeSize
。 在這裡,我們會為您的 Kubernetes 服務配置 10 個 IP 位址:
{
"Init": {
"ServiceIpRangeSize": 10,
"ServiceIPRangeStart": "192.168.1.151"
},
"Network": {
"ControlPlaneEndpointIp": "192.168.1.191",
"NetworkPlugin": "calico",
"Ip4GatewayAddress": "192.168.1.1",
"Ip4PrefixLength": 24,
"DnsServers": ["192.168.1.1"]
},
"Machines": [
{
"NetworkConnection": {
"AdapterName": "Ethernet"
},
"LinuxNode": {
"CpuCount": 4,
"MemoryInMB": 4096,
"DataSizeInGB": 20,
"Ip4Address": "192.168.1.171"
}
}
]
}
建立 Linux 和 Windows 節點
若要在機器上執行 Linux 控制平面和 Windows 背景工作角色節點,請使用下列命令建立組態檔:
New-AksEdgeConfig -DeploymentType ScalableCluster -NodeType LinuxAndWindows -outFile .\aksedge-config.json | Out-Null
使用 命令建立部署:
New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json
{
"Machines": [
{
"NetworkConnection": {
"AdapterName": "Ethernet"
},
"LinuxNode": {
"CpuCount": 4,
"MemoryInMB": 4096,
"DataSizeInGB": 20,
"Ip4Address": "192.168.1.171"
},
"WindowsNode": {
"CpuCount": 2,
"MemoryInMB": 4096,
"Ip4Address": "192.168.1.172"
}
}
]
}