在 Microsoft Azure Kubernetes 服务 (AKS) 上运行 Kubernetes#

您可以通过 Azure 门户网站或使用 Azure 命令行工具 创建 Kubernetes 集群。

本页介绍使用命令行设置 Kubernetes 集群所需的命令。如果您更喜欢使用 Azure 门户,请参阅 Azure Kubernetes 服务快速入门

  1. 准备您的 Azure shell 环境。您有两个选择,一个是使用 Azure 交互式 shell,另一个是在本地安装 Azure 命令行工具。下面是每个选项的说明。

    • 使用 Azure 交互式 shellAzure 门户 包含一个交互式 shell,您可以使用它与您的 Kubernetes 集群进行通信。要访问此 shell,请访问 portal.azure.com 并单击下面的按钮。

      ../../_images/cli_start.png

    注意

    • 如果您遇到类似 could not retrieve token from local cache 的错误,请尝试刷新您的浏览器窗口。

    • 第一次执行此操作时,系统会要求您创建一个存储帐户,您的 shell 文件系统将存储在其中。

    • 在本地安装命令行工具。您可以通过一个可以在本地安装的软件包访问 Azure CLI。

      为此,首先按照 Azure 文档中的安装说明 进行操作。然后运行以下命令将您的本地 CLI 连接到您的帐户

      az login
      

      您需要打开浏览器并按照终端中的说明登录。

  2. 激活正确的订阅。Azure 使用订阅的概念来管理支出。您可以通过运行以下命令获取您的帐户可以访问的订阅列表

    az account list --refresh --output table
    

    选择要用于创建集群的订阅,并将其设置为默认订阅。如果您只有一个订阅,则可以忽略此步骤。

    az account set --subscription <YOUR-CHOSEN-SUBSCRIPTION-NAME>
    
  3. 创建一个资源组。Azure 使用资源组的概念将相关的资源分组在一起。我们需要在给定的数据中心位置创建一个资源组。我们将在该资源组创建计算资源。

    az group create \
       --name=<RESOURCE-GROUP-NAME> \
       --location=centralus \
       --output table
    

    其中

    • --name 指定您的资源组的名称。我们建议使用一些能够唯一标识此集线器的名称。例如,如果您要为加州大学伯克利分校 2018 年春季 Data100 课程创建一个资源组,您可以将其命名为 <RESOURCE-GROUP-NAME>ucb_2018sp_data100_hub

    • --location 指定您希望资源所在的 data center 的位置。在本例中,我们使用了 centralus 位置。有关其他选项,请参阅 支持 AKS 的 Azure 位置列表。请注意,并非所有位置都提供所有 VM 大小。要查看推荐位置的列表,请访问 Azure 门户 > 虚拟机,单击“创建...”并查看 区域 下拉列表中的推荐位置列表。

    • --output table 指定输出应为人类可读格式,而不是默认的 JSON 输出。在手动执行大多数命令时,我们将使用此命令。

    考虑设置 Azure 云预算,以确保您不会意外花费超过您想要的金额。

  4. 选择一个集群名称。

    在以下步骤中,我们将运行要求您输入集群名称的命令。我们建议使用描述性且简短的名称。在本文档的其余部分,我们将将其称为 <CLUSTER-NAME>

    下一步将在您的文件系统上创建一些文件,因此首先创建一个文件夹来存放这些文件。我们建议使用与您的集群相同的名称。

    mkdir <CLUSTER-NAME>
    cd <CLUSTER-NAME>
    
  5. 创建一个 SSH 密钥来保护您的集群。

    ssh-keygen -f ssh-key-<CLUSTER-NAME>
    

    它将提示您添加密码,您可以选择留空。这将创建一个名为 ssh-key-<CLUSTER-NAME>.pub 的公钥和一个名为 ssh-key-<CLUSTER-NAME> 的私钥。确保这两个密钥都放入我们之前创建的文件夹中,并妥善保管它们!

    此命令还会在您的终端屏幕上打印一些内容。您无需对该文本进行任何操作。

  6. 创建一个虚拟网络和子网。

    Kubernetes 默认情况下不包含强制执行 networkpolicy 资源的控制器。 networkpolicy 资源非常重要,因为它们定义了 Kubernetes Pod 如何安全地相互通信以及与外部来源(例如互联网)通信。

    要在 Azure 中启用此功能,我们首先必须创建一个启用了 Azure 自身网络策略的虚拟网络

    本部分文档遵循 Microsoft Azure 关于创建 AKS 集群并启用网络策略的教程,其中包含有关使用Calico 网络策略的信息。

    az network vnet create \
       --resource-group <RESOURCE-GROUP-NAME> \
       --name <VNET-NAME> \
       --address-prefixes 10.0.0.0/8 \
       --subnet-name <SUBNET-NAME> \
       --subnet-prefix 10.240.0.0/16
    

    其中

    • --resource-group 是您创建的资源组。

    • --name 是您要分配给虚拟网络的名称,例如 hub-vnet

    • --address-prefixes 是虚拟网络的 IP 地址前缀。

    • --subnet-name 是您为子网选择的名称,例如 hub-subnet

    • --subnet-prefixes 是子网的CIDR 格式的 IP 地址前缀。

    现在,我们将检索刚刚创建的 VNet 和子网的应用程序 ID,并将它们保存到 bash 变量中。

    VNET_ID=$(az network vnet show \
       --resource-group <RESOURCE-GROUP-NAME> \
       --name <VNET-NAME> \
       --query id \
       --output tsv)
    SUBNET_ID=$(az network vnet subnet show \
       --resource-group <RESOURCE-GROUP-NAME> \
       --vnet-name <VNET-NAME> \
       --name <SUBNET-NAME> \
       --query id \
       --output tsv)
    

    我们将为集群创建一个 Azure Active Directory (Azure AD) 服务主体,并为 VNet 分配贡献者角色。确保 SERVICE-PRINCIPAL-NAME 是可识别的名称,例如 binderhub-sp

    SP_PASSWD=$(az ad sp create-for-rbac \
       --name <SERVICE-PRINCIPAL-NAME> \
       --role Contributor \
       --scopes $VNET_ID \
       --query password \
       --output tsv)
    SP_ID=$(az ad app list \
       --filter "displayname eq '<SERVICE-PRINCIPAL-NAME>'" \
       --query [0].appId \
       --output tsv)
    

    您需要对订阅拥有所有者角色才能成功执行此步骤。

  7. 创建一个 AKS 集群。

    在此阶段,您可能希望考虑自定义您的部署。 Hub23 部署指南 包含将 Kubernetes 集群部署到 Azure 的说明,其中包含自动缩放和多个节点池。这些说明可以组合起来,以便所有节点池都可以自动缩放。

    以下命令将在我们之前创建的资源组中请求一个 Kubernetes 集群。

    az aks create \
       --name <CLUSTER-NAME> \
       --resource-group <RESOURCE-GROUP-NAME> \
       --ssh-key-value ssh-key-<CLUSTER-NAME>.pub \
       --node-count 3 \
       --node-vm-size Standard_D2s_v3 \
       --service-principal $SP_ID \
       --client-secret $SP_PASSWD \
       --dns-service-ip 10.0.0.10 \
       --docker-bridge-address 172.17.0.1/16 \
       --network-plugin azure \
       --network-policy azure \
       --service-cidr 10.0.0.0/16 \
       --vnet-subnet-id $SUBNET_ID \
       --output table
    

    其中

    • --name 是您要用来引用集群的名称

    • --resource-group 是您创建的资源组。

    • --ssh-key-value 是创建的 SSH 公钥

    • --node-count 是您想要在 Kubernetes 集群中使用的节点数量

    • --node-vm-size 是您想要使用的节点的大小,它根据您使用集群的目的以及每个用户需要的 RAM/CPU 数量而有所不同。有一个 所有可能的节点大小列表 供您选择,但并非所有大小都可能在您的位置可用。如果您在创建集群时遇到错误,可以尝试更改区域或节点大小。

    • --service-principal 是我们创建的服务主体的应用程序 ID

    • --client-secret 是我们创建的服务主体的密码

    • --dns-service-ip 是分配给 Kubernetes DNS 服务 的 IP 地址

    • --docker-bridge-address 是 Docker 桥接的特定 IP 地址和网络掩码,使用标准 CIDR 表示法

    • --network-plugin 是要使用的 Kubernetes 网络插件。在本例中,我们使用了 Azure 的实现。

    • --network-policy 是要使用的 Kubernetes 网络策略。在本例中,我们使用了 Azure 的实现。

    • --service-cidr 是用于分配服务集群 IP 的 CIDR 表示法 IP 范围

    • vnet-subnet-id 是我们创建的子网的应用程序 ID

    • 此命令将安装默认版本的 Kubernetes。您可以传递 --kubernetes-version 来安装其他版本。

    这可能需要几分钟,并为您提供一个可用的 Kubernetes 集群!

    可选地,准备自动缩放,其中

    • --vm-set-type VirtualMachineScaleSets 将集群部署为规模集。

    • --enable-cluster-autoscaler 为您的集群启用自动缩放功能

    • --min-count 3 是最小节点数量

    • --max-count 6 是最大节点数量

    您也可以稍后启用自动缩放功能,方法是

    SP_POOLNAME=$(az aks nodepool list \
       --resource-group <RESOURCE-GROUP-NAME> \
       --cluster-name <CLUSTER-NAME> \
       --query [0].name \
       --output tsv)
    az aks nodepool update \
       --name $SP_POOLNAME \
       --cluster-name <CLUSTER-NAME> \
       --resource-group <RESOURCE-GROUP-NAME> \
       --enable-cluster-autoscaler \
       --min-count <DESIRED-MINIMUM-COUNT> \
       --max-count <DESIRED-MAXIMUM-COUNT>
    

    或使用 --update-cluster-autoscaler 更新参数。

    az aks update \
       --name <CLUSTER-NAME> \
       --resource-group <RESOURCE-GROUP-NAME> \
       --update-cluster-autoscaler \
       --min-count <DESIRED-MINIMUM-COUNT> \
       --max-count <DESIRED-MAXIMUM-COUNT> \
       --output table
    

    两者 --min-count--max-count 都必须定义。

    阅读有关自动缩放器可用选项的更多信息 此处

  8. 如果您在本地使用 Azure CLI,请安装 kubectl,这是一个用于从命令行访问 Kubernetes API 的工具

    az aks install-cli
    

    注意:kubectl 已经安装在 Azure 云 Shell 中。

  9. 从 Azure 获取凭据以使 kubectl 正常工作

    az aks get-credentials \
       --name <CLUSTER-NAME> \
       --resource-group <RESOURCE-GROUP-NAME> \
       --output table
    

    其中

    • --name 是您为集群提供的名称

    • --resource-group 是您创建的资源组。

    这会自动更新您的 Kubernetes 客户端配置文件。

  10. 检查您的集群是否完全正常

    kubectl get node
    

    响应应该列出三个正在运行的节点及其 Kubernetes 版本!每个节点的状态都应该是 Ready,请注意这可能需要几分钟。

注意

如果您使用 Azure 门户创建集群,则必须启用 RBAC。使用命令行工具时,RBAC 默认启用。

  1. 启用自动缩放(可选)

    如果您的集群已准备好进行自动缩放(--enable-cluster-autoscaler),请转到 Azure 门户以启用自动缩放并设置规则以管理集群自动缩放器。

    门户 上导航到您的活动订阅。

    在“资源”下,选择 VMSS。它应该命名为类似于 aks-nodepool1-<random-str>-vmss 的东西。

    ../../_images/select_vmss.png

    从左侧菜单中,选择“缩放”。单击蓝色的“自定义自动缩放”按钮,将出现一个用于缩放条件的自动生成的表单。我们将为此条件添加两个新规则

    • 当 10 分钟内的平均 CPU 使用率大于 70% 时,将实例数量增加 1

    • 当 10 分钟内的平均 CPU 使用率小于 5% 时,将实例数量减少 1

    ../../_images/scale_condition.png

    确保选择了“基于指标进行缩放”选项,然后单击“+ 添加新规则”,将出现另一个自动生成的表单。这将预先填充满足我们的第一个规则所需的设置,因此请通过单击“更新”保存它,然后再次单击“+ 添加新规则”。

    ../../_images/scale_out.png

    需要编辑第二个表单的第二个规则,当平均 CPU 使用率在 10 分钟内低于 5% 时,将实例数量减少 1。保存此规则,然后保存整体缩放条件,集群将自动更新。

    ../../_images/scale_in.png

    此表单也可以用来更改之前使用缩放条件的“实例限制”部分(分别为“默认”、“最小”和“最大”)设置的 --node-count/--min-count/--max-count

恭喜!现在您的 Kubernetes 集群已运行,是时候开始 设置 helm 了。