部署 Linux 应用
适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
本指南介绍如何在 Azure Arc 启用的 AKS 中部署包含 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: <path to image>/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 停止kubectl
监视过程。 以下示例输出显示向服务分配了有效的公共 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 地址。
缩放应用程序 Pod
我们创建了 Azure 投票应用前端和 Redis 实例的单个副本。 若要查看群集中 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