在 Microsoft Azure Kubernetes 服务 (AKS) 上运行 Kubernetes#
您可以通过 Azure 门户网站或使用 Azure 命令行工具 创建 Kubernetes 集群。
本页介绍使用命令行设置 Kubernetes 集群所需的命令。如果您更喜欢使用 Azure 门户,请参阅 Azure Kubernetes 服务快速入门。
准备您的 Azure shell 环境。您有两个选择,一个是使用 Azure 交互式 shell,另一个是在本地安装 Azure 命令行工具。下面是每个选项的说明。
使用 Azure 交互式 shell。 Azure 门户 包含一个交互式 shell,您可以使用它与您的 Kubernetes 集群进行通信。要访问此 shell,请访问 portal.azure.com 并单击下面的按钮。
注意
如果您遇到类似
could not retrieve token from local cache
的错误,请尝试刷新您的浏览器窗口。第一次执行此操作时,系统会要求您创建一个存储帐户,您的 shell 文件系统将存储在其中。
在本地安装命令行工具。您可以通过一个可以在本地安装的软件包访问 Azure CLI。
为此,首先按照 Azure 文档中的安装说明 进行操作。然后运行以下命令将您的本地 CLI 连接到您的帐户
az login
您需要打开浏览器并按照终端中的说明登录。
激活正确的订阅。Azure 使用订阅的概念来管理支出。您可以通过运行以下命令获取您的帐户可以访问的订阅列表
az account list --refresh --output table
选择要用于创建集群的订阅,并将其设置为默认订阅。如果您只有一个订阅,则可以忽略此步骤。
az account set --subscription <YOUR-CHOSEN-SUBSCRIPTION-NAME>
创建一个资源组。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 云预算,以确保您不会意外花费超过您想要的金额。
选择一个集群名称。
在以下步骤中,我们将运行要求您输入集群名称的命令。我们建议使用描述性且简短的名称。在本文档的其余部分,我们将将其称为
<CLUSTER-NAME>
。下一步将在您的文件系统上创建一些文件,因此首先创建一个文件夹来存放这些文件。我们建议使用与您的集群相同的名称。
mkdir <CLUSTER-NAME> cd <CLUSTER-NAME>
创建一个 SSH 密钥来保护您的集群。
ssh-keygen -f ssh-key-<CLUSTER-NAME>
它将提示您添加密码,您可以选择留空。这将创建一个名为
ssh-key-<CLUSTER-NAME>.pub
的公钥和一个名为ssh-key-<CLUSTER-NAME>
的私钥。确保这两个密钥都放入我们之前创建的文件夹中,并妥善保管它们!此命令还会在您的终端屏幕上打印一些内容。您无需对该文本进行任何操作。
创建一个虚拟网络和子网。
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)
您需要对订阅拥有所有者角色才能成功执行此步骤。
创建一个 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
都必须定义。阅读有关自动缩放器可用选项的更多信息 此处。
如果您在本地使用 Azure CLI,请安装 kubectl,这是一个用于从命令行访问 Kubernetes API 的工具
az aks install-cli
注意:kubectl 已经安装在 Azure 云 Shell 中。
从 Azure 获取凭据以使
kubectl
正常工作az aks get-credentials \ --name <CLUSTER-NAME> \ --resource-group <RESOURCE-GROUP-NAME> \ --output table
其中
--name
是您为集群提供的名称--resource-group
是您创建的资源组。
这会自动更新您的 Kubernetes 客户端配置文件。
检查您的集群是否完全正常
kubectl get node
响应应该列出三个正在运行的节点及其 Kubernetes 版本!每个节点的状态都应该是
Ready
,请注意这可能需要几分钟。
注意
如果您使用 Azure 门户创建集群,则必须启用 RBAC。使用命令行工具时,RBAC 默认启用。
启用自动缩放(可选)
如果您的集群已准备好进行自动缩放(
--enable-cluster-autoscaler
),请转到 Azure 门户以启用自动缩放并设置规则以管理集群自动缩放器。在 门户 上导航到您的活动订阅。
在“资源”下,选择 VMSS。它应该命名为类似于
aks-nodepool1-<random-str>-vmss
的东西。从左侧菜单中,选择“缩放”。单击蓝色的“自定义自动缩放”按钮,将出现一个用于缩放条件的自动生成的表单。我们将为此条件添加两个新规则
当 10 分钟内的平均 CPU 使用率大于 70% 时,将实例数量增加 1
当 10 分钟内的平均 CPU 使用率小于 5% 时,将实例数量减少 1
确保选择了“基于指标进行缩放”选项,然后单击“+ 添加新规则”,将出现另一个自动生成的表单。这将预先填充满足我们的第一个规则所需的设置,因此请通过单击“更新”保存它,然后再次单击“+ 添加新规则”。
需要编辑第二个表单的第二个规则,当平均 CPU 使用率在 10 分钟内低于 5% 时,将实例数量减少 1。保存此规则,然后保存整体缩放条件,集群将自动更新。
此表单也可以用来更改之前使用缩放条件的“实例限制”部分(分别为“默认”、“最小”和“最大”)设置的
--node-count
/--min-count
/--max-count
。
恭喜!现在您的 Kubernetes 集群已运行,是时候开始 设置 helm 了。