教程:部署 Linux 应用

适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

本教程介绍如何在 Azure Arc 启用的 AKS 的 Kubernetes 群集上部署包含 Web 前端和 Redis 数据库实例的多容器应用。你还将了解如何测试和缩放应用。

本教程假定你对 Kubernetes 概念有基本的了解。 有关详细信息,请参阅 Kubernetes 核心概念

准备阶段

验证是否已准备好以下要求:

  • 具有至少一个已启动并正在运行的 Linux 工作器节点的 AKS 群集。
  • 用于访问群集的 kubeconfig 文件。
  • 已安装 AksHci PowerShell 模块。 有关详细信息,请参阅 Install-AksHci

执行教程过程时:

  • 在使用管理权限打开的 PowerShell 窗口中运行命令。
  • 确保在适当的容器主机上承载特定于 OS 的工作负荷。 如果 Kubernetes 群集混合使用 Linux 和 Windows 工作器节点,则可以使用节点选择器或污点和容忍。 有关详细信息,请参阅使用节点选择器以及排斥和容许

注意

部署与其他目标群集共享网络的目标群集可能会导致负载均衡器 IP 地址冲突。 如果在共享同一 AksHciClusterNetwork 对象的目标群集中部署两个使用不同的端口的工作负荷,则可能会出现 IP 地址冲突。 由于 IP 地址和端口映射在 HA 代理内分配的方式,可能导致分配重复的 IP 地址。 如果发生这种情况,在重新部署工作负载之前,一个或两个工作负载可能会遇到随机网络连接问题。 重新部署工作负载时,可以使用同一端口(将服务 IP 地址分配给每个工作负荷),也可以在使用不同 AksHciClusterNetwork 对象的目标群集上重新部署工作负载。

部署应用

Kubernetes 清单文件定义群集的所需状态,例如要运行的容器映像。 本教程使用清单来创建运行 Azure 投票应用所需的所有对象。 此清单包括两个 Kubernetes 部署:一个用于示例 Azure Vote Python 应用,另一个用于 Redis 实例。 还创建了两个 Kubernetes 服务:一个用于 Redis 实例的内部服务和一个外部服务,用于从 Internet 访问 Azure Vote 应用。

创建名为 azure-vote.yaml 的文件,并复制/粘贴以下 YAML 定义:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

使用 kubectl apply 命令部署应用,并指定 YAML 清单的名称:

kubectl apply -f azure-vote.yaml

以下示例输出显示已成功创建的部署和服务:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

测试应用程序

应用运行时,Kubernetes 服务将向 Internet 公开应用前端。 此过程可能需要几分钟才能完成。

若要监视进度,请使用 kubectl get service 带有 参数的 --watch 命令:

kubectl get service azure-vote-front --watch

最初,azure-vote-front 服务的 EXTERNAL-IP 显示为挂起

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27      <pending>     80:30572/TCP   22m

EXTERNAL-IP 地址从挂起更改为实际公共 IP 地址时,请使用 CTRL-C 停止kubectlwatch进程。 以下示例输出显示向服务分配了有效的公共 IP 地址:

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   24m

若要查看 Azure Vote 应用的实际效果,请打开 Web 浏览器并转到服务的外部 IP 地址。

Azure 投票应用应用程序的主页的屏幕截图,该应用程序部署在 Azure 中的 Kubernetes 群集上。

缩放应用程序 Pod

我们创建了 Azure 投票应用前端和 Redis 实例的单个副本 (replica) 。 若要查看群集中 Pod 的数目和状态,请使用 kubectl get 命令:

kubectl get pods -n default

以下示例输出显示一个前端 Pod 和一个后端 Pod:

NAME                                READY     STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1       Running   0          25m
azure-vote-front-84c8bf64fc-cdq86   1/1       Running   0          25m

若要更改 azure-vote-front 部署中的 Pod 数,请使用 kubectl scale 命令。 以下示例将前端 Pod 数增加到 5:

kubectl scale --replicas=5 deployment/azure-vote-front

再次运行 kubectl get pods 以验证是否已创建其他 Pod。 一分钟左右之后,其他 Pod 会在群集中提供:

kubectl get pods -n default
Name                                READY   STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1     Running   0          31m
azure-vote-front-84c8bf64fc-cdq86   1/1     Running   0          31m
azure-vote-front-84c8bf64fc-56h64   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-djkp8   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-jmmvs   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-znc6z   1/1     Running   0          80s

后续步骤

使用 Azure Monitor 监视群集和应用程序