首页 > 其他分享 >快速入门:使用 Azure CLI 部署 Azure Kubernetes 服务 (AKS) 群集

快速入门:使用 Azure CLI 部署 Azure Kubernetes 服务 (AKS) 群集

时间:2023-11-27 15:45:28浏览次数:37  
标签:name service AKS rabbitmq 群集 Azure Kubernetes store

原文:https://learn.microsoft.com/zh-cn/azure/aks/learn/quick-kubernetes-deploy-cli

本文内容

  1. 开始之前
  2. 创建资源组
  3. 创建 AKS 群集
  4. 连接到群集

Azure Kubernetes 服务 (AKS) 是可用于快速部署和管理群集的托管式 Kubernetes 服务。 在本快速入门中,请执行以下操作:

  • 使用 Azure CLI 部署 AKS 群集。
  • 使用一组微服务和模拟零售场景的 Web 前端运行示例多容器应用程序。

 备注

此示例应用程序仅用于演示目的,并不代表 Kubernetes 应用程序的所有最佳做法。

Screenshot of browsing to Azure Store sample application.

开始之前

  • 本快速入门假设读者基本了解 Kubernetes 的概念。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 Kubernetes 核心概念

  • 需要一个具有活动订阅的 Azure 帐户。 如果你没有帐户,请免费创建一个

  • 若要详细了解如何创建 Windows Server 节点池,请参阅创建支持 Windows Server 容器的 AKS 群集

  • 本文需要 Azure CLI 2.0.64 或更高版本。 如果你使用的是 Azure Cloud Shell,则表示已安装最新版本。

  • 确保用于创建群集的标识具有适当的最低权限。 有关 AKS 访问和标识的详细信息,请参阅 Azure Kubernetes Service (AKS) 的访问和标识选项

  • 如果你有多个 Azure 订阅,请使用 az account 命令选择应在其中计收资源费用的相应订阅 ID。

  • 验证是否已在订阅中注册 Microsoft.OperationsManagement 和 Microsoft.OperationalInsights 提供程序。 这些 Azure 资源提供程序是支持容器见解所必需的。 使用以下命令检查注册状态:

    Azure CLI
    az provider show -n Microsoft.OperationsManagement -o table
    az provider show -n Microsoft.OperationalInsights -o table
    

    如果它们未注册,请使用以下 命令进行注册:

    Azure CLI
    az provider register --namespace Microsoft.OperationsManagement
    az provider register --namespace Microsoft.OperationalInsights
    

 备注

如果你打算在本地而不是在 Azure Cloud Shell 中运行命令,请以管理员权限运行这些命令。

 备注

Azure Linux 节点池现已正式发布 (GA)。 若要了解权益和部署步骤,请参阅适用于 AKS 的 Azure Linux 容器主机简介

创建资源组

Azure 资源组是用于部署和管理 Azure 资源的逻辑组。 创建资源组时,系统会提示你指定一个位置。 此位置是资源组元数据的存储位置,也是资源在 Azure 中运行的位置(如果你在创建资源期间未指定其他区域)。

以下示例在“eastus”位置创建名为“myResourceGroup”的资源组。

  • 使用 az group create 命令创建资源组。

    Azure CLI
    az group create --name myResourceGroup --location eastus
    

    以下示例输出类似于成功创建资源组:

    输出
    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    

创建 AKS 群集

以下示例使用一个节点创建名为 myAKSCluster 的群集,并启用系统分配的托管标识。

  • 使用带有 --enable-addons monitoring 和 --enable-msi-auth-for-monitoring 参数的 az aks create 命令创建 AKS 群集,以启用带有托管标识身份验证的 Azure Monitor 容器见解(预览版)。

    Azure CLI
    az aks create -g myResourceGroup -n myAKSCluster --enable-managed-identity --node-count 1 --enable-addons monitoring --enable-msi-auth-for-monitoring  --generate-ssh-keys
    

    片刻之后,该命令将会完成,并返回有关群集的 JSON 格式信息。

     备注

    当你创建新群集时,AKS 会自动创建第二个资源组来存储 AKS 资源。 有关详细信息,请参阅为什么使用 AKS 创建两个资源组?

连接到群集

若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 如果使用的是 Azure Cloud Shell,则 kubectl 已安装。

  1. 使用 az aks install-cli 命令在本地安装 kubectl

    Azure CLI
    az aks install-cli
    
  2. 使用 az aks get-credentials 命令将 kubectl 配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。

    Azure CLI
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. 使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

    Azure CLI
    kubectl get nodes
    

    以下示例输出显示在上一步创建的单个节点。 确保节点状态为“就绪”。

    输出
    NAME                       STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31718369-0   Ready    agent   6m44s   v1.12.8
    

部署应用程序

若要部署应用程序,请使用清单文件创建运行 AKS 应用商店应用程序所需的所有对象。 Kubernetes 清单文件定义群集的所需状态,例如,要运行哪些容器映像。 清单包含以下 Kubernetes 部署和服务:

Screenshot of Azure Store sample architecture.

  • 门店:Web 应用程序,供客户查看产品和下单。
  • 产品服务:显示产品信息。
  • 订单服务:下单。
  • Rabbit MQ:订单队列的消息队列。

 备注

不建议在没有持久性存储用于生产的情况下,运行有状态容器(例如 Rabbit MQ)。 为简单起见,建议使用托管服务,例如 Azure CosmosDB 或 Azure 服务总线。

  1. 创建名为 aks-store-quickstart.yaml 的文件,并将以下清单复制到其中:

    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.microsoft.com/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 清单文件的明细,请参阅部署和 YAML 清单

  2. 使用 kubectl apply 命令部署应用程序,并指定 YAML 清单的名称。

    Azure CLI
    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 公开应用程序前端。 此过程可能需要几分钟才能完成。

  1. 使用 kubectl get pods 命令查看已部署的 Pod 的状态。 在继续操作之前,将所有 Pod 都设置为 Running

  2. 检查应用商店前端应用程序的公共 IP 地址。 使用带有 --watch 参数的 kubectl get service 命令来监视进度。

    Azure CLI
    kubectl get service store-front --watch
    

    store-front 服务的 EXTERNAL-IP 输出最初显示为正在挂起

    输出
    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    
  3. 在 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
    
  4. 打开 Web 浏览器并转到服务的外部 IP 地址,以查看 Azure 应用商店应用的实际效果。

    Screenshot of AKS Store sample application.

删除群集

如果你不打算完成以下教程,请清理不需要的资源以避免产生 Azure 费用。

  • 使用 az group delete 命令删除资源组、容器服务和所有相关资源。

    Azure CLI
    az group delete --name myResourceGroup --yes --no-wait
    

     备注

    AKS 群集是使用系统分配的托管标识创建的,这是本快速入门中使用的默认标识选项。 平台将负责管理此标识,因此你无需手动删除它。

后续步骤

在本快速入门中,你部署了一个 Kubernetes 群集,并在其中部署了一个简单的多容器应用程序。

若要详细了解 AKS 并演练完整的部署示例代码,请继续阅读教程“Kubernetes 群集”。

标签:name,service,AKS,rabbitmq,群集,Azure,Kubernetes,store
From: https://www.cnblogs.com/bruce1992/p/17859516.html

相关文章

  • Kubernetes全面指南:从入门到精通
    Kubernetes,简称K8s,作为云原生时代的领军者,已经成为容器编排和管理的事实标准。无论您是初学者还是有经验的开发者,本篇博文将带您深入了解Kubernetes,从基础概念到高级技术,逐步引领您进入这个强大的开源平台的世界。第一部分:初识Kubernetes1.1什么是Kubernetes?Kubernetes是一个开源......
  • [MDP.NetCore] 使用Azure Portal,開發一個從GitHub持續佈署到Azure Container Apps的We
    使用AzurePortal,開發一個從GitHub持續佈署到AzureContainerApps的Web站台程式碼簽入GitHub之後,啟動GitHubAction流程,編譯並部署程式到AzureContainerApps,是開發系統時常見的功能需求。本篇範例協助開發人員使用GitHub與AzurePortal,逐步完成必要的設計和實作。範例下載:Sl......
  • 平台工程时代的 Kubernetes 揭秘:2023年生产状况报告深度剖析
    Kubernetes在生产环境中的复杂性已经成为常态,在2023年这个平台工程盛行的时代,容器管理的最大亮点可能在于其灵活性,然而在运维政策和治理等方面仍然存在诸多挑战。八年过去了,在生产环境中使用Kubernetes仍然需要面临许多挑战。 SpectroCloud刚刚与DimensionalResearch合......
  • Kubernetes进阶之使用二进制包部署集群
    前言之前关于Kubernetes有写过文档参考:Kubernetes入门进阶课程https://www.cnblogs.com/minseo/category/1654539.html本文针对操作系统以及软件的新版本补充使用二进制包部署集群之前版本部署参考:https://www.cnblogs.com/minseo/p/12361731.html......
  • 【Kubernetes】 容器探针
    【Kubernetes】容器探针Kubernetes提供了探针,通过Kubelet对容器执行定期诊断,以了解容器内应用的状态,以探测结果来决定做哪些操作(比如重启容器、关闭流量),kubernetes中提供了三种探针,分别是就绪探针、存活探针、启动探针,如果不使用探针,默认认为是成功的。每种探针又提供了四种探......
  • Explore change feed in Azure Cosmos DB
    ExplorechangefeedinAzureCosmosDBReadingchangefeedwithapushmodelTherearetwowaysyoucanreadfromthechangefeedwithapushmodel:AzureFunctionsAzureCosmosDBtriggers,andthechangefeedprocessorlibrary. ChangefeedprocessorT......
  • 【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret
    问题描述使用.NETAzure.Identity中的 DefaultAzureCredential 认证并连接到AzureKeyVault中,在KeyVault的示例中,并没有介绍如何在代码中设置连接到中国区Azure中。如果直接运行DefaultAzureCredential,会默认连接到GlobalAzure,那需要如何修改才能连接到ChinaAzure中呢? ......
  • 【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret
    问题描述使用.NETAzure.Identity中的 DefaultAzureCredential认证并连接到AzureKeyVault中,在KeyVault的示例中,并没有介绍如何在代码中设置连接到中国区Azure中。如果直接运行DefaultAzureCredential,会默认连接到GlobalAzure,那需要如何修改才能连接到ChinaAzure中呢......
  • WEBSITE_LOCAL_CACHE_OPTION Environment variables and app settings in Azure App S
    EnvironmentvariablesandappsettingsinAzureAppService SettingnameDescriptionWEBSITE_LOCAL_CACHE_OPTIONWhetherlocalcacheisenabled.Availableoptionsare:-Default:Inheritthestamp-levelglobalsetting.-Always:Enablefortheapp.......
  • 滚动更新和回滚部署在 Kubernetes 中的工作原理
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。在过去的几年中,Kubernetes在生产环境中被广泛使用,它通过其声明式API提供了大量解决方案,用于编排容器。Kubernetes的一个显著特性是其具有弹性的能力,能够执行滚动更新和回滚部署,而能够完成这......