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
指定你的资源组名称。我们建议使用能够唯一标识此 hub 的名称。例如,如果你正在为加州大学伯克利分校 2018 年春季 Data100 课程创建一个资源组,你可以给它一个<RESOURCE-GROUP-NAME>
为ucb_2018sp_data100_hub
的名称。--location
指定你希望资源所在的数据中心位置。在本例中,我们使用了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
是你创建的 ResourceGroup(资源组)--name
是你想分配给你的虚拟网络的名称,例如hub-vnet
--address-prefixes
是你的虚拟网络的 IP 地址前缀--subnet-name
是你期望的子网名称,例如hub-subnet
--subnet-prefixes
是子网的 CIDR 格式的 IP 地址前缀
我们现在将检索刚刚创建的虚拟网络和子网的应用程序 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) 服务主体供集群使用,并为虚拟网络分配参与者角色。确保
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 部署指南包含了在 Azure 上部署具有自动缩放和多个节点池的 Kubernetes 集群的说明。这些说明可以组合使用,以便所有节点池都可以自动缩放。
以下命令将在我们之前创建的资源组内请求一个 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
是你创建的 ResourceGroup(资源组)--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
是一个 CIDR 表示法的 IP 范围,用于分配服务集群 IPvnet-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 Cloud Shell 中。
从 Azure 获取凭据以使
kubectl
能够工作az aks get-credentials \ --name <CLUSTER-NAME> \ --resource-group <RESOURCE-GROUP-NAME> \ --output table
其中
--name
是你给集群起的名字--resource-group
是你创建的 ResourceGroup(资源组)
这会自动更新你的 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
确保选中“按指标缩放”选项,然后点击“+ 添加规则”,另一个自动生成的表单将会出现。这个表单将预先填写好满足我们第一条规则所需的设置,因此点击“更新”保存它,然后再次点击“+ 添加规则”。
第二个表单需要编辑以满足第二条规则,即当 10 分钟内平均 CPU 使用率小于 5% 时将实例计数减少 1。保存此规则,然后保存整个缩放条件,集群将自动更新。
此表单还可用于更改之前通过使用缩放条件的“实例限制”部分(分别为“默认”、“最小”和“最大”)设置的
--node-count
/--min-count
/--max-count
。
恭喜!现在你的 Kubernetes 集群已经运行起来,是时候开始设置 Helm了。