请求协助:在本地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的所有节点,加载镜像到节点本地:
若有本地私有镜像仓库(如Harbor),也可将镜像推送到仓库,后续配置中替换为私有仓库的镜像地址即可。docker load -i invoice-container.tar docker load -i layout-container.tar
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状态:
若Pod状态为CrashLoopBackOff或Error,直接查看日志定位问题:kubectl get podskubectl 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
相关产品推荐
相关产品推荐

