使用Azure DevOps CI/CD部署应用至本地K8s集群失败排查
Kubernetes CI/CD部署失败的排查要点
1. 镜像引用一致性问题
你构建的镜像标签是$(Build.BuildId),需确认manifest.yaml里的镜像是否正确使用该标签。比如:
image: 786786786raees/email1_monitoring:$(Build.BuildId)
若manifest用固定标签(如latest)或未替换变量,会导致拉取错误镜像或部署旧版本。
2. ServiceAccount权限覆盖不全
即便创建了ServiceAccount和Role/RoleBinding,需检查Role权限是否覆盖所有部署所需资源:
- 比如部署需要操作Deployment、Service、Pod等资源,Role规则需包含对应权限:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: conn-devops name: deploy-role rules: - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["create", "update", "patch", "get", "list", "watch", "delete"] - apiGroups: [""] resources: ["pods", "services", "configmaps"] verbs: ["create", "update", "patch", "get", "list", "watch", "delete"]
- 可本地用该ServiceAccount的token执行
kubectl apply -f manifest.yaml -n conn-devops,验证权限是否足够。
3. 私有镜像拉取凭证缺失
若Docker Hub镜像是私有仓库,需在conn-devops命名空间创建镜像拉取密钥:
kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=<你的Docker Hub用户名> --docker-password=<你的Docker Hub密码> --docker-email=<你的邮箱> -n conn-devops
并在Deployment的Pod模板中指定该密钥:
spec: template: spec: imagePullSecrets: - name: regcred
4. 流水线变量传递验证
添加步骤打印$(Build.BuildId),确认变量在Deploy阶段正常传递:
- script: echo "当前构建ID:$(Build.BuildId)" displayName: 打印构建ID
5. Manifest语法与任务参数问题
- 移除
--validate=false参数,让任务执行配置验证,排查manifest语法错误(如缩进、字段拼写错误)。 - 本地可执行
kubectl apply -f manifest.yaml --dry-run=client提前验证manifest合法性。
内容的提问来源于stack exchange,提问作者yasin
相关产品推荐
相关产品推荐

