You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:在本地AKS中部署Azure Form Recognizer发票与布局容器

本地AKS部署Azure Form Recognizer Invoice & Layout容器实操指南

先明确核心前提:你已经持有两个服务的Docker镜像,现在要在本地AKS(离线/内网环境)完成部署,以下是踩坑后的实操步骤:

1. 确保镜像在本地集群可访问

离线环境下AKS无法拉取公网镜像,必须把镜像放到集群可达的位置:

  • 将已有镜像打包为tar文件:
    docker save -o invoice-container.tar mcr.microsoft.com/azure-cognitive-services/form-recognizer/invoice:latest
    docker save -o layout-container.tar mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout:latest
    
  • 把tar包拷贝到本地AKS的所有节点,加载镜像到节点本地:
    docker load -i invoice-container.tar
    docker load -i layout-container.tar
    
    若有本地私有镜像仓库(如Harbor),也可将镜像推送到仓库,后续配置中替换为私有仓库的镜像地址即可。

2. 编写K8s部署配置文件

用单个yaml文件完成两个服务的Deployment和Service配置,记得替换其中的BILLING端点与API_KEY(使用你自身Azure资源的对应信息):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: form-recognizer-invoice
spec:
  replicas: 1
  selector:
    matchLabels:
      app: invoice-service
  template:
    metadata:
      labels:
        app: invoice-service
    spec:
      containers:
      - name: invoice-container
        image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/invoice:latest
        # 使用私有仓库则替换为:harbor.local/form-recognizer/invoice:latest
        ports:
        - containerPort: 5000
        env:
        - name: EULA
          value: "accept"
        - name: BILLING
          value: "<你的Azure资源Billing端点>"
        - name: API_KEY
          value: "<你的Azure资源API密钥>"
        resources:
          requests:
            cpu: "4"
            memory: "8Gi"
          limits:
            cpu: "8"
            memory: "16Gi"
        imagePullPolicy: IfNotPresent # 关键:避免集群尝试从公网拉取镜像
---
apiVersion: v1
kind: Service
metadata:
  name: invoice-service
spec:
  type: ClusterIP
  ports:
  - port: 5000
    targetPort: 5000
  selector:
    app: invoice-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: form-recognizer-layout
spec:
  replicas: 1
  selector:
    matchLabels:
      app: layout-service
  template:
    metadata:
      labels:
        app: layout-service
    spec:
      containers:
      - name: layout-container
        image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout:latest
        # 使用私有仓库则替换为:harbor.local/form-recognizer/layout:latest
        ports:
        - containerPort: 5000
        env:
        - name: EULA
          value: "accept"
        - name: BILLING
          value: "<你的Azure资源Billing端点>"
        - name: API_KEY
          value: "<你的Azure资源API密钥>"
        resources:
          requests:
            cpu: "4"
            memory: "8Gi"
          limits:
            cpu: "8"
            memory: "16Gi"
        imagePullPolicy: IfNotPresent # 关键:避免集群尝试从公网拉取镜像
---
apiVersion: v1
kind: Service
metadata:
  name: layout-service
spec:
  type: ClusterIP
  ports:
  - port: 5000
    targetPort: 5000
  selector:
    app: layout-service

注意:Form Recognizer容器资源要求较高,至少需4核8G的请求配额,否则Pod会因资源不足启动失败。

3. 部署到本地AKS

  • 应用配置文件:
    kubectl apply -f form-recognizer-deploy.yaml
    
  • 检查Pod状态:
    kubectl get pods
    
    若Pod状态为CrashLoopBackOff或Error,直接查看日志定位问题:
    kubectl logs <pod-name>
    

4. 离线环境必注意事项

  • 授权验证:Form Recognizer容器需定期连接Azure验证API密钥与计费信息,因此本地AKS节点必须能出站访问对应Azure端点;若完全断网,容器会启动失败,有代理则需为Pod配置HTTP_PROXY/HTTPS_PROXY环境变量。
  • 镜像拉取策略:务必添加imagePullPolicy: IfNotPresent,否则K8s会默认尝试从公网拉取镜像,直接导致部署失败。
  • 资源配额:本地AKS节点需预留足够CPU与内存,每个容器至少保证8G内存和4核CPU,否则会出现调度失败。

5. 常见故障排查

  • Pod启动失败:
    • 日志显示授权错误:检查BILLING端点与API_KEY是否填写正确,确认Azure资源有效。
    • 日志显示资源不足:调整节点资源配额,或修改Deployment中的resources配置(不可低于最低要求)。
  • 服务无法访问:
    • 用端口转发本地测试:kubectl port-forward service/invoice-service 5000:5000,访问http://localhost:5000/status查看是否返回正常状态。
    • 检查Service的selector是否与Pod的labels匹配。

内容的提问来源于stack exchange,提问作者Eswar RDS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:36:22