Azure Kubernetes中Ingress更新及Deployment YAML报错排查求助
问题排查与解决方案
YAML文件核心错误点
- 根字段前导缩进:每个资源块(
---之后)的apiVersion、kind等根字段前存在多余空格,YAML对缩进敏感,这会导致K8s无法解析正确的对象结构,是触发验证错误的主要原因。 - 资源限制配置无效:
- Deployment中CPU限制写为
'256',未指定单位(K8s中CPU单位为核心或毫核,如250m代表0.25核心),256核心远超常规节点配置,属于无效值。 - Memory限制
11400G明显不合理,建议调整为符合实际需求的单位(如256Mi)。 - 资源请求
cpu: '0'和memory: '0'会导致调度器无法合理分配资源,可能引发Pod调度失败,建议设置合理的最小请求值(如100mCPU、128Mi内存)。
- Deployment中CPU限制写为
- Ingress包含只读系统字段:从Azure Portal复制的Ingress包含
uid、resourceVersion、generation、status等字段,这些是K8s内部维护的只读字段,用户提交YAML时不应包含,否则会触发验证错误。 - AGIC必要注解缺失:使用Application Gateway Ingress Controller(AGIC)时,Ingress必须添加
kubernetes.io/ingress.class: azure/application-gateway注解,否则AGIC不会识别并同步该Ingress配置到Application Gateway。
修正后的YAML示例
Deployment与Service(deployment-service.yml)
--- apiVersion: apps/v1 kind: Deployment metadata: name: new-kuber-endpoint namespace: kuber-ut spec: replicas: 2 selector: matchLabels: app: new-kuber-endpoint template: metadata: labels: app: new-kuber-endpoint spec: nodeSelector: kubernetes.io/os: linux containers: - name: amica-endpoint image: mycontainerreg.azurecr.io/new-endpoint:20220707.1 ports: - containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi --- apiVersion: v1 kind: Service metadata: name: new-kuber-endpoint-service namespace: kuber-ut spec: type: ClusterIP # 使用AGIC时无需LoadBalancer,ClusterIP即可满足后端访问 ports: - targetPort: 80 name: port80 port: 80 protocol: TCP selector: app: new-kuber-endpoint
Ingress(ingress.yml)
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kuberdevingress namespace: kuber-ut annotations: kubernetes.io/ingress.class: azure/application-gateway # AGIC识别必备注解 spec: rules: - http: paths: - path: /old pathType: Prefix backend: service: name: old-endpoint-service port: number: 80 - path: /new pathType: Prefix backend: service: name: new-kuber-endpoint-service port: number: 80
正确操作流程
- 确认命名空间存在:若
kuber-ut命名空间未创建,执行命令:kubectl create namespace kuber-ut - 部署Deployment与Service:
kubectl apply -f deployment-service.yml - 验证后端状态:检查Pod是否正常运行:
检查Service是否创建成功:kubectl get pods -n kuber-utkubectl get svc -n kuber-ut - 部署修正后的Ingress:
kubectl apply -f ingress.yml - 确认AGIC同步状态:查看AGIC Pod运行状态:
查看AGIC日志确认配置同步情况:kubectl get pods -n kube-system -l app=ingress-azurekubectl logs -n kube-system <agic-pod-name>
内容的提问来源于stack exchange,提问作者evolmonster
相关产品推荐
相关产品推荐

