使用 Azure PowerShell为 AKS 群集部署 Azure Linux 容器主机,开始使用 Azure Linux 容器主机。
在此快速入门中,您将学习如何:
- 安装 Kubernetes CLI
kubectl。 - 创建 Azure 资源组。
- 创建和部署 Azure Linux 容器主机群集。
- 配置
kubectl以连接到 Azure Linux 容器主机群集。 - 将示例多容器应用程序部署到群集。
先决条件
- 如果没有 Azure 试用版订阅,请在开始前创建一个。
- 在本地运行 PowerShell 时,请先安装
Az PowerShell模块,然后使用 [Connect-AzAccount -Environment AzureChinaCloud](https://learn.microsoft.com/powershell/module/az.accounts/Connect-AzAccount -Environment AzureChinaCloud) cmdlet 连接到 Azure 帐户。 有关安装 Az PowerShell 模块的详细信息,请参阅安装 Azure PowerShell。 - 用于创建群集的标识具有合适的最低权限。 有关 AKS 访问和标识的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的访问和标识选项。
创建资源组
Azure 资源组是用于部署和管理 Azure 资源的逻辑组。 在Azure中创建资源组时,需要指定位置。 此位置是资源组元数据的存储位置,如果在创建资源时未指定其他区域,则资源在Azure中运行的位置。
使用 New-AzResourceGroup cmdlet 创建资源组。 以下示例在 eastus 区域中创建名为 testAzureLinuxResourceGroup 的资源组:
New-AzResourceGroup -Name testAzureLinuxResourceGroup -Location chinanorth3
以下示例输出类似于成功创建资源组:
ResourceGroupName : testAzureLinuxResourceGroup
Location : chinanorth3
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testAzureLinuxResourceGroup
创建 Azure Linux 容器主机群集
使用 New-AzAksCluster cmdlet 创建 AKS 群集,并将 -NodeOsSKU 标志设置为 AzureLinux。 以下示例使用一个节点创建名为 testAzureLinuxCluster 的群集:
New-AzAksCluster -ResourceGroupName testAzureLinuxResourceGroup -Name testAzureLinuxCluster -NodeOsSKU AzureLinux
片刻之后,该命令将会完成,并返回有关群集的 JSON 格式信息。
连接至群集
若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。
使用
kubectlcmdlet 在本地安装Install-AzAksCliTool。Install-AzAksCliTool使用
kubectlcmdlet 将Import-AzAksCredential配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。Import-AzAksCredential -ResourceGroupName testAzureLinuxResourceGroup -Name testAzureLinuxCluster使用
kubectl get命令验证与群集之间的连接。 此命令将返回群集 pod 的列表。kubectl get pods --all-namespaces
部署应用程序
若要部署应用程序,请使用清单文件创建运行 AKS Store 应用程序所需的所有对象。 Kubernetes 清单文件定义群集的所需状态,例如要运行的容器映像。 该清单包含以下 Kubernetes 部署和服务:
- 门店:Web 应用程序,供客户查看产品和下单。
- 产品服务:显示产品信息。
- 订单服务:负责下单。
- Rabbit MQ:工单队列的消息队列。
Note
不建议在没有持久性存储用于生产的情况下,运行有状态容器(例如 Rabbit MQ)。 此处使用这些服务是为了简单起见,但我们建议使用托管服务,例如Azure Cosmos DB或Azure 服务总线。
创建名为
aks-store-quickstart.yaml的文件,并将以下清单复制到其中:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.azk8s.cn/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancer如果在本地创建并保存 YAML 文件,则可以通过选择“上传/下载文件”按钮并从本地文件系统中选择文件,将清单文件上传到 CloudShell 中的默认目录。
使用 kubectl apply 命令部署应用程序,并指定 YAML 清单的名称。
kubectl apply -f aks-store-quickstart.yaml以下示例输出显示部署和服务:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
测试应用程序
应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。
使用
kubectl get pods命令查看已部署的 Pod 的状态。 在继续操作之前,请确保所有 Pod 的状态为Running。kubectl get pods检查应用商店前端应用程序的公共 IP 地址。 使用带有
kubectl get service参数的--watch命令来监视进度。kubectl get service store-front --watch服务的 EXTERNAL-IP
store-front输出最初显示为“pending”:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m在 EXTERNAL-IP 地址从 pending 更改为实际公共 IP 地址后,请使用
CTRL-C来停止kubectl监视进程。以下示例输出显示向服务分配了有效的公共 IP 地址:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m打开 Web 浏览器并转到服务的外部 IP 地址,以查看 Azure 应用商店应用的实际效果。
删除群集
不再需要时可以清理不必要的资源,避免产生 Azure 费用。
使用 RemoveAzResourceGroup cmdlet 删除Azure资源组和所有相关资源。
Remove-AzResourceGroup -Name testAzureLinuxResourceGroup
相关内容
在本快速入门中,你部署了 Azure Linux 容器主机群集。 若要详细了解 Azure Linux 容器主机,请参阅以下资源: