在 Azure 上入门使用 kOps ¶
kOps 上的 Azure 支持目前处于 alpha 阶段。原始问题票证是 #3957。
请参阅 #10412,了解剩余项目和限制。例如,Azure DNS 目前不支持,并且需要使用 Gossip DNS 创建集群。
创建步骤 ¶
步骤 1. 安装 Azure CLI ¶
首先,安装 Azure CLI。
$ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
然后键入以下命令登录 Azure。这将重定向到浏览器登录。
$ az login
...
You have logged in. Now let us find all the subscriptions to which you have access...
[
{
"cloudName": "AzureCloud",
"homeTenantId": "76253...",
"id": "7e232...",
"isDefault": true,
"managedByTenants": [],
"name": "Your name...",
"state": "Enabled",
"tenantId": "76253...",
"user": {
"name": "...",
"type": "user"
}
},
...
]
一个 Azure 帐户可能拥有一个或多个“订阅”,它充当 Azure 资源的单一计费单位。将环境变量 AZURE_SUBSCRIPTION_ID
设置为您要使用的订阅的 ID。
$ export AZURE_SUBSCRIPTION_ID=7e232...
步骤 2. 在 Azure Blob 中创建一个容器 ¶
接下来,为 kOps 集群存储创建一个 Azure Blob 存储容器。
首先,您需要创建一个资源组,它为资源提供隔离的命名空间。
$ az group create --name kops-test --location eastus
{
"id": "/subscriptions/7e232.../resourceGroups/kops-test",
"location": "eastus",
"managedBy": null,
"name": "kops-test",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
然后为资源组创建一个存储帐户。存储帐户为所有存储资源提供隔离的命名空间。该名称在所有 Azure 帐户中必须是唯一的。
$ az storage account create --name kopstest --resource-group kops-test
将环境变量 AZURE_STORAGE_ACCOUNT
设置为存储帐户名称,以便在后面使用。
$ export AZURE_STORAGE_ACCOUNT=kopstest
然后创建一个 Blob 容器。
$ az storage container create --name cluster-configs
{
"created": true
}
您可以通过存储导出器或通过 az storage container list
确认容器已成功创建。
$ az storage container list --output table
Name Lease Status Last Modified
--------------- -------------- -------------------------
cluster-configs unlocked 2020-10-06T21:12:36+00:00
将环境变量 KOPS_STATE_STORE
设置为使用 kOps 的 azureblob://
协议的容器名称 URL。URL 可能包含容器中的路径。kOps 将所有集群配置存储在此路径中。
export KOPS_STATE_STORE=azureblob://cluster-configs
步骤 3. 为 kOps 设置凭据 ¶
使用以下命令生成 kOps 凭据。
首先,在 Active Directory 中创建一个服务主体。
$ az ad sp create-for-rbac --name kops-test --role owner --sdk-auth
{
"clientId": "8c6fddb5...",
"clientSecret": "dUFzX1...",
"subscriptionId": "7e232...",
"tenantId": "76253...",
...
}
设置相应的环境变量
- 将
AZURE_TENANT_ID
设置为输出的tenantId
- 将
AZURE_CLIENT_ID
设置为输出的clienteId
- 将
AZURE_CLIENT_SECRET
设置为输出的clientSecret
。
$ export AZURE_TENANT_ID="76253..."
$ export AZURE_CLIENT_ID="8c6fddb5..."
$ export AZURE_CLIENT_SECRET="dUFzX1..."
步骤 4. 运行 kOps 命令 ¶
使用以下命令在 Blob 容器中创建集群配置。以 --azure-
为前缀的命令行标志用于 Azure 特定配置。
$ export KOPS_FEATURE_FLAGS=Azure
$ kops create cluster \
--cloud azure \
--name my-azure.k8s.local \
--zones eastus-1 \
--network-cidr 172.16.0.0/16 \
--networking calico \
--azure-subscription-id "${AZURE_SUBSCRIPTION_ID}" \
--azure-tenant-id "${AZURE_TENANT_ID}" \
--azure-resource-group-name kops-test \
--azure-route-table-name kops-test \
--azure-admin-user ubuntu
确认 Blob 存储中已创建配置文件。
$ az storage blob list --container-name cluster-configs --output table
使用以下命令预览 kOps 将为 k8s 集群创建的 Azure 资源。
$ kops update cluster \
--name my-azure.k8s.local
现在添加 --yes
标志,让 kOps 配置资源并创建集群。这还将为集群添加一个 kubeconfig 上下文。
$ kops update cluster \
--name my-azure.k8s.local \
--yes
集群的 API 服务器可能需要几分钟才能变得可访问。请运行基本的 kubectl 命令,例如 kubectl get namespaces
,以验证 API 服务器是否可访问。
目前,kOps 在 Azure 中创建以下资源
- 虚拟机规模集(等效于 AWS 自动扩展组)
- 托管磁盘(等效于 AWS 弹性卷存储)
- 虚拟网络
- 子网
- 路由表
- 角色分配
默认情况下,kOps 创建两个 VM 规模集 - 一个用于 k8s 主节点,另一个用于工作节点。托管磁盘用作 etcd 卷(“主”数据库和“事件”数据库),并连接到 K8s 主节点 VM。角色分配是必需的,以向 VM 授予 API 访问权限和 Blob 存储访问权限。