跳至内容

在 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 存储访问权限。