如何排查ArgoCD中MinIO Tenant持续处于Progressing状态的问题
问题:ArgoCD部署MinIO Tenant后卡在Progressing状态(已Synced)
- 已通过ArgoCD在K8s集群部署MinIO Tenant,应用显示Synced但一直卡在Progressing状态
- 仅Tenant资源被标记为Progressing,无相关事件,同步后无差异
- ArgoCD Pod日志、MinIO Tenant Pod日志均无异常
- Tenant功能正常,所有组件已正确部署
排查步骤
1. 检查MinIO Operator状态
- 确认MinIO Operator Pod是否正常运行:
kubectl get pods -n minio-operator - 查看Operator日志,排查Tenant相关处理异常:
kubectl logs -n minio-operator <operator-pod-name>
2. 深入检查Tenant资源状态
- 查看Tenant资源的详细状态,重点关注
status字段:kubectl get tenant minio-observability-staging -o yaml- 检查
status.phase是否为Ready,以及status.pools下每个节点的状态是否正常 - 确认是否存在未完成的初始化步骤(如bucket创建、证书同步等)
- 检查
3. 验证依赖资源完整性
- 检查配置中指定的Secret
minio-observability-staging-env-configuration是否存在且格式正确:kubectl describe secret minio-observability-staging-env-configuration - 确认Ingress关联的TLS Secret是否已被cert-manager正确签发:
kubectl get secret minio-tenant-observability-general-tls minio-tenant-observability-con-general-tls - 检查存储类
ext-nas-storage-class是否可用,PV是否正常绑定:kubectl get pv,pvc -l app=minio-observability-staging
4. 检查ArgoCD的健康检查配置
ArgoCD默认可能未适配MinIO Tenant自定义资源的健康判断逻辑,需手动配置:
- 编辑ArgoCD的ConfigMap添加自定义健康检查规则:
apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm namespace: argocd data: resource.customizations.health.tenants.minio.min.io: | hs = { status = "Healthy", message = "" } if obj.status ~= nil then if obj.status.phase == "Ready" then hs.status = "Healthy" hs.message = "Tenant is ready" else hs.status = "Progressing" hs.message = obj.status.phase end else hs.status = "Progressing" hs.message = "Waiting for status" end return hs - 应用配置后重启ArgoCD Server:
kubectl rollout restart deployment argocd-server -n argocd
5. 检查Helm Chart版本兼容性
- 确认MinIO Tenant Chart(v5.0.6)与集群中运行的MinIO Operator版本是否兼容
- 排查Chart文档,确认是否存在特定Kubernetes版本要求或已知的Progressing状态问题
提供的Helm Chart配置
apiVersion: v2 name: minio-observability-storage home: https://min.io icon: https://min.io/resources/img/logo/MINIO_wordmark.png version: 0.0.0 appVersion: 0.0.0 type: application description: A Helm chart for MinIO tenent dependencies: - name: tenant repository: https://operator.min.io/ version: 5.0.6
提供的Values配置
tenant: tenant: # Tenant name name: minio-observability-staging ## Secret name that contains additional environment variable configurations. ## The secret is expected to have a key named config.env containing environment variables exports. configuration: name: minio-observability-staging-env-configuration pools: - servers: 4 name: pool-0 volumesPerServer: 4 ## size specifies the capacity per volume size: 30Gi ## storageClass specifies the storage class name to be used for this pool storageClassName: ext-nas-storage-class securityContext: runAsUser: 100 runAsGroup: 1000 runAsNonRoot: true fsGroup: 1000 metrics: enabled: true port: 9000 protocol: http features: bucketDNS: true domains: console: https://s3-console.staging.domain.io minio: - https://s3.staging.domain.io buckets: - name: observability-staging region: eu-west-1 ## exposeServices defines the exposure of the MinIO object storage and Console services. exposeServices: # Tenant scrape configuration will be added to prometheus managed by the prometheus-operator. prometheusOperator: true ingress: api: enabled: true labels: {} annotations: cert-manager.io/cluster-issuer: letsencrypt-staging kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/server-snippet: | client_max_body_size 0; nginx.ingress.kubernetes.io/configuration-snippet: | chunked_transfer_encoding off; tls: - secretName: minio-tenant-observability-general-tls hosts: - s3.staging.domain.io host: s3.staging.domain.io path: / pathType: Prefix console: enabled: true labels: {} annotations: cert-manager.io/cluster-issuer: letsencrypt-staging kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/server-snippet: | client_max_body_size 0; nginx.ingress.kubernetes.io/configuration-snippet: | chunked_transfer_encoding off; tls: - secretName: minio-tenant-observability-con-general-tls hosts: - s3-console.staging.domain.io host: s3-console.staging.domain.io path: / pathType: Prefix
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

