尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Kubespray 在 Azure 上部署 Kubernetes:cloud_provider 参数详解、AAD 凭据配置与 Resource Group 模板实践

Kubespray 在 Azure 上部署 Kubernetes:cloud_provider 参数详解、AAD 凭据配置与 Resource Group 模板实践 Kubespray 在 Azure 上部署 Kubernetescloud_provider 参数详解、AAD 凭据配置与 Resource Group 模板实践【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray本文以 Kubespray 仓库中 Azure 云厂商文档docs/cloud_providers/azure.md为主线完整梳理在 Azure 上部署 Kubernetes 所需的全部azure_系列参数及其取值来源基于 Azure CLI 逐一对应、Azure AD 应用与服务主体的创建流程并讲解 contrib/azurerm 提供的 Resource Group 模板如何自动化地准备网络、虚拟机、路由表等基础基础设施。读完本文你可以独立完成 Azure 集群的凭据准备、参数配置、基础设施开通与 Kubespray 部署衔接并清楚了解 K8s v1.31 起内置cloud_provider机制移除后 Azure 场景的适用边界。背景内置 cloud_provider 已移除先看清适用版本在开始配置前必须先了解一个版本边界。原文档开头即声明Removed: Since v1.31 (the Kubespray counterpart is v2.27), Kubernetes no longer supportscloud_provider(except external cloud provider)也就是说自 Kubernetes v1.31对应 Kubespray v2.27起Kubernetes 不再支持内置的cloud_provider机制仅保留 external cloud provider外置云控制器这一种形式。从当前仓库的示例变量文件 inventory/sample/group_vars/all/all.yml 的注释也可以确认这一点## There are some changes specific to the cloud providers ## for instance we need to encapsulate packets with some network plugins ## If set the possible values only external after K8s v1.31. # cloud_provider: # External Cloud Controller Manager (Formerly known as cloud provider) # cloud_provider must be external, otherwise this setting is invalid. # Supported external cloud controllers are: openstack, vsphere, oci, huaweicloud, hcloud and manual # external_cloud_provider:即 v1.31 之后cloud_provider只能取external而当前 Kubespray 支持的外置云控制器列表为openstack、vsphere、oci、huaweicloud、hcloud和manual——Azure 已不在其中。因此本文记录的cloud_provider: azure配置方式适用于使用内置云机制的旧版本 K8s 集群对于新版集群Azure 场景下的云功能如负载衡器的后端管理需要自行通过 external controller 或其他方式解决。下面内容完整保留原文档的配置参考它同时是理解 Kubespray Azure 相关变量设计的依据。基础部署方式与基础设施前提按原文档的部署方式将cloud_provider选项在group_vars/all/all.yml中取消注释并设置为azurecloud_provider: azure除该开关外Azure 侧还有两条硬性基础设施前提所有实例必须运行在一个资源组Resource Group中实例所在的子网必须挂载了一张路由表Route Table。这两点之所以重要是因为 Azure cloud provider 在管理节点加入/移除、构建 Standard 负载均衡器后端池时依赖资源组定位资源、依赖路由表实现节点出站与回程路由。原文档同时提醒Azure 并非所有功能都已支持能力边界可参照 Kubernetes 的 cloud-provider-azure 上游实现评估。参数详解逐个获取 azure_ 变量在创建实例之前必须先设置azure_系列变量。仓库中这些变量集中声明在示例变量文件 inventory/sample/group_vars/all/azure.yml以及 contrib/terraform/group_vars/all/azure.yml中全部以注释形式给出需要按需取消注释并填入真实值## When azure is used, you need to also set the following variables. ## see docs/azure.md for details on how to get these values # azure_cloud: # azure_tenant_id: # azure_subscription_id: # azure_aad_client_id: # azure_aad_client_secret: # azure_resource_group: # azure_location: # azure_subnet_name: # azure_security_group_name: # azure_security_group_resource_group: # azure_vnet_name: # azure_vnet_resource_group: # azure_route_table_name: # azure_route_table_resource_group: # supported values are standard or vmss # azure_vmtype: standard所有取值都可以通过 Azure CLI 获取先安装 Azure CLI然后执行az login登录账号。以下逐参数说明。azure_cloudAzure Stack 的 API 端点因部署而异需要通过该参数提供给 Azure SDK。可选值为AzureChinaCloud、AzureGermanCloud、AzurePublicCloud、AzureUSGovernmentCloud。各取值对应的完整端点配置定义在上游 cloud-provider-azure 源码中可据此核对。azure_tenant_id azure_subscription_id执行az account show输出中azure_tenant_id← Tenant ID 字段azure_subscription_id← ID 字段azure_location实例所在区域例如westeurope或westcentralus。可用az account list-locations获取完整区域名列表。azure_resource_group实例所在资源组的名称可用az group list获取。azure_vmtype虚拟机类型。支持standard或vmss如果实例是普通Virtual Machines则值为standard如果实例属于Virtual Machine Scale Sets虚拟机规模集则值为vmss。azure_vnet_name实例所在虚拟网络的名称可用az network vnet list获取。azure_vnet_resource_group包含该虚拟网络的资源组名称。azure_subnet_name实例所在子网的名称可用如下命令获取az network vnet subnet list --resource-group RESOURCE_GROUP --vnet-name VNET_NAMEazure_security_group_name实例所在网络安全组的名称可用az network nsg list获取。azure_security_group_resource_group包含该网络安全组的资源组名称。默认值为azure_vnet_resource_group。azure_route_table_name与实例配套使用的路由表名称。azure_route_table_resource_group包含该路由表的资源组名称。默认值为azure_vnet_resource_group。azure_aad_client_id azure_aad_client_secret这两个凭据需要先创建 Azure AD 应用、服务主体并做角色分配共三步1. 创建 Azure AD 应用az ad app create --display-name kubernetes --identifier-uris http://kubernetes --homepage http://example.com --password CLIENT_SECRET其中 display name、identifier-uri、homepage 和 password 均可自行选择注意输出中的 AppId。2. 为该应用创建服务主体az ad sp create --id AppId这里的AppId即上一步输出中的 AppId。3. 创建角色分配az role assignment create --role Owner --assignee http://kubernetes --subscription SUBSCRIPTION_ID完成后azure_aad_client_id设置为该应用的 AppIdazure_aad_client_secret设置为第一步选定的密码。azure_loadbalancer_sku负载均衡器与公共 IP 的 Sku。候选值basic和standard。azure_exclude_master_from_standard_lb是否将 master 节点排除在standard负载均衡器后端之外。azure_disable_outbound_snat禁用公共负载均衡器规则的外发 SNAT。仅在azure_exclude_master_from_standard_lb为standard场景下才应设置否则可能导致集群出站异常。azure_primary_availability_set_name可选指定用作负载均衡器后端的可用集名称。设置后Azure cloud provider 只把该可用集中的节点加入 LB 后端池若不设置且使用了多个 agent 池多个可用集cloud provider 会尝试把所有节点加入同一个后端池——而这是 Azure 禁止的操作。换言之如果使用多个可用集必须设置该字段。azure_use_instance_metadata是否尽可能使用实例元数据服务Instance Metadata Service获取节点信息。用 Resource Group 模板自动化开通 Azure 基础设施手动创建 vnet、子网、路由表、NSG、虚拟机等一系列资源容易出错且难以复现。Kubespray 仓库在 contrib/azurerm 下提供了一套基于 Azure Resource Group Templates 的模板与脚本用于在指定资源组中开通 Kubernetes 所需的基础基础设施vnet、vms、nics、ips 等。注意其边界它只负责基础基础设施不安装 Kubernetes 本身Kubernetes 仍需随后由 Kubespray 完成部署。前置要求安装 azure-cli 并完成登录已有一个专用资源组可在 Azure Portal 或 azure-cli 中创建。配置上有两处必改变量位于contrib/azurerm/group_vars/all下cluster_name由于 Azure 的限制必须全局唯一ssh_public_keys必须是用于登录 Azure 虚拟机的 SSH 公钥。其余多数变量具备 Kubernetes 基础经验即可理解。此外将use_bastion设为true可启用 Bastion 主机生成的模板会包含一台额外的 bastion VM通过它连接 master 与 node同时会移除其他所有 VM 的公共 IP。生成并应用模板./apply-rg.sh resource_group_name查看 contrib/azurerm/apply-rg.sh 可以看到其工作方式先调用ansible-playbook generate-templates.yml基于group_vars渲染出模板文件再依次执行az deployment group create部署 network、storage、availability-sets、bastion、masters、minions 等模板。因此后续修改配置例如节点数量后重新执行同一脚本即可Azure 会自动完成创建/变更。清空资源组./clear-rg.sh resource_group_name警告该命令会真正删除资源组内的一切资源包括你后续自行创建的内容执行前务必确认。为 Kubespray 生成 inventory模板应用完成后执行./generate-inventory.sh resource_group_name它会生成./inventory文件随后可直接用于 Kubespray 部署cd kubespray-root-dir ansible-playbook -i contrib/azurerm/inventory -u devops --become -e inventory/sample/group_vars/all/all.yml cluster.yml更完整的云厂商部署背景多种开通方式、ansible-playbook通用命令形式可参考 docs/cloud_providers/cloud.md。延伸Azure Disk CSI 存储内置云机制之外Kubespray 还独立支持 Azure Disk CSI 驱动。inventory/sample/group_vars/all/azure.yml 中同样以注释形式提供了azure_csi_系列变量azure_csi_tenant_id、azure_csi_subscription_id、azure_csi_aad_client_id、azure_csi_aad_client_secret、azure_csi_location、azure_csi_resource_group、azure_csi_vnet_name、azure_csi_subnet_name、azure_csi_use_instance_metadata、azure_csi_tags等启用方式为取消注释azure_csi_enabled: true并可通过azure_csi_controller_replicas、azure_csi_plugin_image_tag控制副本数与插件镜像标签。相关实现位于 CSI 驱动角色 roles/kubernetes-apps/csi_driver/azuredisk含云配置模板azure-csi-cloud-config.j2与凭据校验任务详细用法参见 docs/CSI/azure-csi.md。相关文件索引内容路径Azure 部署文档本文主体docs/cloud_providers/azure.md云厂商通用部署说明docs/cloud_providers/cloud.mdazure_ 变量示例声明inventory/sample/group_vars/all/azure.ymlcloud_provider / external_cloud_provider 开关inventory/sample/group_vars/all/all.ymlResource Group 模板说明contrib/azurerm/README.md模板应用 / 清理 / inventory 生成脚本contrib/azurerm/apply-rg.sh、contrib/azurerm/clear-rg.sh、contrib/azurerm/generate-inventory.sh模板参数含 cluster_name、ssh_public_keys、use_bastioncontrib/azurerm/group_vars/allAzure Disk CSI 驱动角色roles/kubernetes-apps/csi_driver/azurediskAzure Disk CSI 文档docs/CSI/azure-csi.md【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表