教程:部署 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 停止kubectl
watch进程。 以下示例输出显示向服务分配了有效的公共 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 实例的单个副本 (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
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈