AKS Edge Essentials 中的完整 Kubernetes 部署
注意
在多台计算机上完全部署目前是一项实验性功能。 我们正在积极研究此功能。
可以将 AKS Edge Essentials 群集配置为在多台计算机上运行以支持分布式微服务体系结构。 AKS 边缘软件包适用于静态配置,并且不支持动态 VM 创建/删除或群集生命周期管理,这与云中的 AKS 或与 AKS HCI 不同。 AKS Edge Essentials 的每台计算机只有一个 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 配置。
有关创建配置文件的更多选项,请参阅以下示例。
要记下可缩放 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
、Ip4PrefixLength
ServiceIPRangeSize
、ServiceIPRangeStart
和DnsServers
。
重要
Kubernetes pod cidr
适用于 10.42.0.0/16
K3s 和 10.244.0.0/24
K8s。 Kubernetes service cidr
适用于 10.43.0.0/16
K3s 和 10.96.0.0/12
K8s。
- 默认情况下,该值
Network.NetworkPlugin
为flannel
. Flannel 是 K3S 群集的默认 CNI。 在 K8S 群集中,将更改为NetworkPlugin
calico
. - 除了上述参数,还可以根据部署配置设置以下参数,如下所示:、、、
LinuxNode.Ip4Address
LinuxNode.DataSizeInGB
LinuxNode.MemoryInMB
、WindowsNode.CpuCount
、WindowsNode.MemoryInMB
、WindowsNode.Ip4Address
、Init.ServiceIPRangeSize
和。Network.InternetDisabled
LinuxNode.CpuCount
步骤 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
该 New-AksEdgeDeployment
cmdlet 会自动检索 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 并部署应用,请为 LinuxNode.CpuCount
(处理能力)、4 GB 或更多 CPU 分配 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"
}
}
]
}