AKS Edge Essentials 中的完整 Kubernetes 部署
注意
在多台计算机上完全部署目前是一项实验性功能。 我们正在积极研究此功能。
可以将 AKS Edge Essentials 群集配置为在多台计算机上运行以支持分布式微服务体系结构。 AKS Edge Essentials 适用于静态配置,并且不启用动态 VM 创建/删除或群集生命周期管理,这与 Azure 本地云中的 AKS 或 AKS 不同。 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
的外部交换机并将其用于部署。注意
在此版本中,如果对交换机使用
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.CpuCount
LinuxNode.MemoryInMB
、LinuxNode.DataSizeInGB
、LinuxNode.Ip4Address
、WindowsNode.CpuCount
、WindowsNode.MemoryInMB
和。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
该 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"
}
}
]
}