|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
设置 Azure 云提供商
|
重要说明:
在 Kubernetes 1.30 及更高版本中,您必须使用外部 Azure 云提供商。Azure 云提供商已被 完全移除,在升级到 Kubernetes 1.30 后将无法使用。下面列出的步骤仍然需要设置 Azure 云提供商。在完成 Azure 的先决条件后,您可以设置外部云提供商。 您还可以在 Kubernetes 1.29 及更早版本上从内部迁移到外部 Azure 云提供商。所有现有集群必须在升级到 v1.30 之前进行迁移,以保持功能正常。 从 Kubernetes 1.29 开始,内部云提供商已被禁用。您必须将 从 Kubernetes 版本 1.26 开始,内部持久卷类型 |
使用 Azure 云提供商时,您可以利用以下功能:
-
*负载均衡器:*在特定的网络安全组内启动 Azure 负载均衡器。
-
*持久卷:*支持使用 Azure Blob 磁盘和 Azure 托管磁盘与标准和高级存储帐户。
-
*网络存储:*通过 CIFS 挂载支持 Azure 文件。
以下账户类型不支持 Azure 订阅:
-
单租户账户(即没有订阅的账户)。
-
多订阅账户。
RKE 和 SUSE® Rancher Prime: RKE2 的前提条件
要为 RKE 和 RKE2 设置 Azure 云提供商,需要配置以下凭据:
1.设置 Azure 租户 ID
访问 Azure 门户,登录并转到 Azure Active Directory,然后选择 属性。您的 目录 ID 是您的 租户 ID(tenantID)。
如果您想使用 Azure CLI,可以运行命令 az account show 来获取信息。
2.设置 Azure 客户端 ID 和 Azure 客户端密钥
访问 Azure 门户,登录并按照以下步骤创建 应用注册 及相应的 Azure 客户端 ID(aadClientId)和 Azure 客户端密钥(aadClientSecret)。
-
选择 Azure Active Directory。
-
选择 应用注册。
-
选择 新建应用注册。
-
选择一个*名称*,选择`Web app / API`作为*应用类型*,并选择一个*登录 URL*,在这种情况下可以是任何内容。
-
选择*创建*。
在*应用注册*视图中,您应该能看到您创建的应用注册。在*应用程序 ID*列中显示的值是您需要用作*Azure 客户端 ID*的内容。
下一步是生成*Azure 客户端密钥*:
-
打开您创建的应用注册。
-
在*设置*视图中,打开*密钥*。
-
输入一个*密钥描述*,选择一个过期时间,然后选择*保存*。
-
在*值*列中显示的生成值是您需要用作*Azure 客户端密钥*的内容。此值只会显示一次。
SUSE® Rancher Prime: RKE2 在 Rancher 中的集群设置
|
重要说明:
本节仅适用于使用内部云提供商创建集群。 |
-
在集群配置部分的云提供商下拉菜单中选择 "Azure"。
-
提供云提供商配置。请注意,Rancher 会自动创建一个新的网络安全组、资源组、可用性集、子网和虚拟网络。如果您已经创建了其中一些或全部,您必须在创建集群之前指定它们。
-
点击 显示高级 以查看或编辑这些自动生成的名称。您的云提供商配置 必须 与 机器池 部分中的字段匹配。如果您有多个池,它们必须都使用相同的资源组、可用性集、子网、虚拟网络和网络安全组。
-
下面提供了一个示例。根据需要进行修改。
示例配置
+
{ "cloud":"AzurePublicCloud", "tenantId": "YOUR TENANTID HERE", "aadClientId": "YOUR AADCLIENTID HERE", "aadClientSecret": "YOUR AADCLIENTSECRET HERE", "subscriptionId": "YOUR SUBSCRIPTIONID HERE", "resourceGroup": "docker-machine", "location": "westus", "subnetName": "docker-machine", "securityGroupName": "rancher-managed-KA4jV9V2", "securityGroupResourceGroup": "docker-machine", "vnetName": "docker-machine-vnet", "vnetResourceGroup": "docker-machine", "primaryAvailabilitySetName": "docker-machine", "routeTableResourceGroup": "docker-machine", "cloudProviderBackoff": false, "useManagedIdentityExtension": false, "useInstanceMetadata": true }+
-
-
在 menu:集群配置[高级] 部分下,点击 添加 在 附加控制器管理器参数 下并添加此标志:
--configure-cloud-routes=false -
点击 创建 提交表单并创建集群。
云提供商配置
Rancher 会自动创建一个新的网络安全组、资源组、可用性集、子网和虚拟网络。如果您已经创建了其中一些或全部,您需要在创建集群之前指定它们。您可以查看 RKE1 节点模板 或 RKE2 机器池 以查看或编辑这些自动生成的名称。
请参阅 上游文档 中的完整配置选项列表。
|
Azure 支持从 Kubernetes 秘密中读取云配置。该秘密是 azure.json 文件的序列化版本。当秘密被更改时,云控制器管理器会在不重启 pod 的情况下重建自身。建议 Helm 图表从秘密中读取云提供商配置。
请注意,图表从 kube-system 名称空间中的给定秘密名称读取云提供商配置。由于 Azure 读取 Kubernetes 秘密,因此还需要配置 RBAC。下面显示了云提供商配置的示例秘密。根据需要修改并创建该秘密。
# azure-cloud-config.yaml
apiVersion: v1
kind: Secret
metadata:
name: azure-cloud-config
namespace: kube-system
type: Opaque
stringData:
cloud-config: |-
{
"cloud": "AzurePublicCloud",
"tenantId": "<tenant-id>",
"subscriptionId": "<subscription-id>",
"aadClientId": "<client-id>",
"aadClientSecret": "<client-secret>",
"resourceGroup": "docker-machine",
"location": "westus",
"subnetName": "docker-machine",
"securityGroupName": "rancher-managed-kqmtsjgJ",
"securityGroupResourceGroup": "docker-machine",
"vnetName": "docker-machine-vnet",
"vnetResourceGroup": "docker-machine",
"primaryAvailabilitySetName": "docker-machine",
"routeTableResourceGroup": "docker-machine",
"cloudProviderBackoff": false,
"useManagedIdentityExtension": false,
"useInstanceMetadata": true,
"loadBalancerSku": "standard",
"excludeMasterFromStandardLB": false,
}
使用外部 Azure 云提供商。
-
RKE2
-
RKE1
-
在 集群配置 部分的 云提供商 下拉菜单中选择 外部。
-
在 menu:集群配置[高级] 下,点击 添加 在 附加控制器管理器参数 下,并添加此标志:
--configure-cloud-routes=false。 -
准备云提供商配置,以便在下一步中设置。请注意,Rancher 会自动创建一个新的网络安全组、资源组、可用性集、子网和虚拟网络。如果您已经创建了其中一些或全部,您必须在创建集群之前指定它们。
点击 显示高级 以查看或编辑这些自动生成的名称。您的云提供商配置 必须 与 机器池 部分中的字段匹配。如果您有多个池,它们必须都使用相同的资源组、可用性集、子网、虚拟网络和网络安全组。
-
在 集群配置 > 附加配置 下,将下面显示的云控制器管理器清单添加到 附加清单 中。
请注意,此图表从
kube-system名称空间中的密钥读取云提供商配置。下面显示了云提供商配置的示例密钥;根据需要修改。请参阅 上游文档 中的完整配置选项列表。或者,您也可以使用 Helm CLI 安装云控制器管理器。
apiVersion: helm.cattle.io/v1 kind: HelmChart metadata: name: azure-cloud-controller-manager namespace: kube-system spec: chart: cloud-provider-azure repo: https://raw.githubusercontent.com/kubernetes-sigs/cloud-provider-azure/master/helm/repo targetNamespace: kube-system bootstrap: true valuesContent: |- infra: clusterName: <cluster-name> cloudControllerManager: cloudConfigSecretName: azure-cloud-config cloudConfig: null clusterCIDR: null enableDynamicReloading: 'true' nodeSelector: node-role.kubernetes.io/control-plane: 'true' allocateNodeCidrs: 'false' hostNetworking: true caCertDir: /etc/ssl configureCloudRoutes: 'false' enabled: true tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master - effect: NoSchedule key: node-role.kubernetes.io/control-plane value: 'true' - effect: NoSchedule key: node.cloudprovider.kubernetes.io/uninitialized value: 'true' --- apiVersion: v1 kind: Secret metadata: name: azure-cloud-config namespace: kube-system type: Opaque stringData: cloud-config: |- { "cloud": "AzurePublicCloud", "tenantId": "<tenant-id>", "subscriptionId": "<subscription-id>", "aadClientId": "<client-id>", "aadClientSecret": "<client-secret>", "resourceGroup": "docker-machine", "location": "westus", "subnetName": "docker-machine", "securityGroupName": "rancher-managed-kqmtsjgJ", "securityGroupResourceGroup": "docker-machine", "vnetName": "docker-machine-vnet", "vnetResourceGroup": "docker-machine", "primaryAvailabilitySetName": "docker-machine", "routeTableResourceGroup": "docker-machine", "cloudProviderBackoff": false, "useManagedIdentityExtension": false, "useInstanceMetadata": true, "loadBalancerSku": "standard", "excludeMasterFromStandardLB": false, } -
点击 创建 提交表单并创建集群。
-
在 集群选项 部分的下拉菜单中选择 外部 作为 云提供商。这为 Kubernetes 组件设置了
--cloud-provider=external。 -
在集群完成配置后安装
cloud-provider-azure图表。请注意,集群尚未成功配置,节点仍处于uninitialized状态,直到您部署云控制器管理器。这可以通过 手动使用 CLI 或通过 UI 中的 Helm 图表 完成。
有关部署云控制器管理器的更多详细信息,请参阅 官方 Azure 上游文档。
通过 CLI 安装 Helm 图表
关于 Helm 图表安装 的官方上游文档可以在 Github 上找到。
-
创建一个 `azure-cloud-config`包含所需 云提供商配置 的密钥。
kubectl apply -f azure-cloud-config.yaml -
添加 Helm 储存库:
helm repo add azure-cloud-controller-manager https://raw.githubusercontent.com/kubernetes-sigs/cloud-provider-azure/master/helm/repo helm repo update -
创建一个包含以下内容的
values.yaml文件以覆盖默认values.yaml:-
RKE2
-
RKE
# values.yaml infra: clusterName: <cluster-name> cloudControllerManager: cloudConfigSecretName: azure-cloud-config cloudConfig: null clusterCIDR: null enableDynamicReloading: 'true' configureCloudRoutes: 'false' allocateNodeCidrs: 'false' caCertDir: /etc/ssl enabled: true replicas: 1 hostNetworking: true nodeSelector: node-role.kubernetes.io/control-plane: 'true' tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master - effect: NoSchedule key: node-role.kubernetes.io/control-plane value: 'true' - effect: NoSchedule key: node.cloudprovider.kubernetes.io/uninitialized value: 'true'# values.yaml cloudControllerManager: cloudConfigSecretName: azure-cloud-config cloudConfig: null clusterCIDR: null enableDynamicReloading: 'true' configureCloudRoutes: 'false' allocateNodeCidrs: 'false' caCertDir: /etc/ssl enabled: true replicas: 1 hostNetworking: true nodeSelector: node-role.kubernetes.io/controlplane: 'true' node-role.kubernetes.io/control-plane: null tolerations: - effect: NoSchedule key: node-role.kubernetes.io/controlplane value: 'true' - effect: NoSchedule key: node.cloudprovider.kubernetes.io/uninitialized value: 'true' infra: clusterName: <cluster-name> -
-
安装 Helm 图表:
helm upgrade --install cloud-provider-azure azure-cloud-controller-manager/cloud-provider-azure -n kube-system --values values.yaml验证 Helm 图表是否成功安装:
helm status cloud-provider-azure -n kube-system -
(可选)验证云控制器管理器更新是否成功:
kubectl rollout status deployment -n kube-system cloud-controller-manager kubectl rollout status daemonset -n kube-system cloud-node-manager -
云提供商负责设置节点的 ProviderID。检查所有节点是否已用 ProviderID 初始化:
kubectl describe nodes | grep "ProviderID"
通过 UI 安装 Helm 图表
-
点击 ☰,然后从左侧导航中选择集群的名称。
-
选择 应用 > 储存库。
-
点击 创建 按钮。
-
在
https://raw.githubusercontent.com/kubernetes-sigs/cloud-provider-azure/master/helm/repo索引 URL 字段中输入。 -
从左侧导航中选择 应用 > 图表 并安装 cloud-provider-azure 图表。
-
选择名称空间
kube-system, 并启用 安装前自定义 Helm 选项。 -
将
cloudConfig: /etc/kubernetes/azure.json替换为从 Cloud Config Secret 读取并启用动态重载:cloudConfigSecretName: azure-cloud-config enableDynamicReloading: 'true' -
根据需要更新以下字段:
allocateNodeCidrs: 'false' configureCloudRoutes: 'false' clusterCIDR: null
-
RKE2
-
RKE
-
Rancher 提供的 RKE2 节点的选择器
node-role.kubernetes.io/control-plane设置为true。更新节点选择器:nodeSelector: node-role.kubernetes.io/control-plane: 'true'
-
Rancher 提供的 RKE 节点被标记为
node-role.kubernetes.io/controlplane。更新容忍度和节点选择器:tolerations: - effect: NoSchedule key: node.cloudprovider.kubernetes.io/uninitialized value: 'true' - effect: NoSchedule value: 'true' key: node-role.kubernetes.io/controlplanenodeSelector: node-role.kubernetes.io/controlplane: 'true'
-
安装图表并确认云控制器和云节点管理器成功部署:
kubectl rollout status deployment -n kube-system cloud-controller-manager kubectl rollout status daemonset -n kube-system cloud-node-manager -
云提供商负责设置节点的 ProviderID。检查所有节点是否已用 ProviderID 初始化:
kubectl describe nodes | grep "ProviderID"
安装 CSI 驱动程序
安装 Azure Disk CSI 驱动程序 或 Azure File CSI 驱动程序 以分别访问 Azure Disk 或 Azure File 卷。
安装 Azure Disk CSI 驱动程序的步骤如下。您可以通过遵循 helm 安装文档 以类似方式安装 Azure File CSI 驱动程序。
|
重要说明
集群必须使用 |
关于 Helm 图表安装 的官方上游文档可以在 Github 上找到。
-
添加并更新 helm 储存库:
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts helm repo update azuredisk-csi-driver -
按照下面所示安装图表,根据需要更新 — 版本参数。请参阅 上游文档 中的最新图表配置完整列表。
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver --namespace kube-system --version v1.30.1 --set controller.cloudConfigSecretName=azure-cloud-config --set controller.cloudConfigSecretNamespace=kube-system --set controller.runOnControlPlane=true -
(可选)验证 azuredisk-csi-driver 安装是否成功:
kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/name=azuredisk-csi-driver" --watch -
配置一个示例存储类:
cat <<EOF | kubectl create -f - kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: standard provisioner: kubernetes.io/azure-disk parameters: storageaccounttype: Standard_LRS kind: Managed EOF验证存储类是否已配置:
kubectl get storageclasses -
创建一个 PersistentVolumeClaim:
cat <<EOF | kubectl create -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: azure-disk-pvc spec: storageClassName: standard accessModes: ** ReadWriteOnce resources: requests: storage: 5Gi EOF验证 PersistentVolumeClaim 和 PersistentVolume 是否已创建:
kubectl get persistentvolumeclaim kubectl get persistentvolume -
附加新的 Azure 磁盘:
您现在可以将 Kubernetes PersistentVolume 挂载到 Kubernetes Pod 中。该磁盘可以被任何 Kubernetes 对象类型使用,包括 Deployment、DaemonSet 或 StatefulSet。但是,以下示例仅将 PersistentVolume 挂载到一个独立的 Pod 中。
cat <<EOF | kubectl create -f - kind: Pod apiVersion: v1 metadata: name: mypod-dynamic-azuredisk spec: containers: - name: mypod image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - mountPath: "/usr/share/nginx/html" name: storage volumes: - name: storage persistentVolumeClaim: claimName: azure-disk-pvc EOF