首页 > 解决方案 > 使用更新的配置安装 Istio 不会删除 Prometheus ServiceMonitor 对象

问题描述

我使用外部 Prometheus 配置了 Istio(版本 1.16.3),并且根据本期的讨论,我使用内置 Prometheus 运算符配置了 Prometheus ServiceMonitor 对象:https ://github.com/istio/istio/issues/ 21187

在大多数情况下,这工作正常,除了我注意到 kubernetes-services-secure-monitor 和 kubernetes-pods-secure-monitor 也被创建,这导致 Prometheus throwing certificate not found 错误,正如预期的那样,因为我没有设置这些了。

"level=error ts=2020-07-06T03:43:33.464Z caller=manager.go:188 component="scrape manager" msg="error creating new scrape pool" err="error creating HTTP client: unable to load specified CA cert /etc/prometheus/secrets/istio.prometheus/root-cert.pem: open /etc/prometheus/secrets/istio.prometheus/root-cert.pem: no such file or directory" scrape_pool=istio-system/kubernetes-pods-secure-monitor/0

我还注意到,可以通过使用 Values.prometheus.provisionPrometheusCert 标志来禁用服务监视器的创建,如下所示:

istio/manifests/charts/istio-telemetry/prometheusOperator/templates/servicemonitors.yaml

 {{- if .Values.prometheus.provisionPrometheusCert }} 

但是,使用 `istioctl install 重新应用配置并没有删除这些服务监视器。

istioctl install 命令不会删除/修剪现有资源吗?

这是我的完整配置:

apiVersion: install.istio.io/v1alpha1
kind: IstioControlPlane
metadata:
  namespace: istio-system
  name: istio-controlplane
  labels:
    istio-injection: enabled
spec:
  profile: default
  addonComponents:
    prometheus:
      enabled: false
    prometheusOperator:
      enabled: true
    grafana:
      enabled: false
    kiali:
      enabled: true
      namespace: staging
    tracing:
      enabled: false
  values:
    global:
      proxy:
        logLevel: warning
      mountMtlsCerts: false
      prometheusNamespace: monitoring
      tracer:
        zipkin:
          address: jaeger-collector.staging:9411

    prometheusOperator:
      createPrometheusResource: false

    prometheus:
      security:
        enabled: false
      provisionPrometheusCert: false

标签: istioprometheus-operator

解决方案


两个不同的问题:升级到新版本的 Istio 和更新配置。

升级

据我所知,在将 istio 从旧版本升级到 1.4、1.5、1.6 时会遇到很多问题,但是最近当istioctl upgrade出现时,您不必担心升级集群。

istioctl upgrade 命令执行 Istio 的升级。在执行升级之前,它会检查 Istio 安装是否符合升级资格标准。此外,如果检测到 Istio 版本之间的配置文件默认值有任何变化,它也会提醒用户。

此外,Istio 1.6 将支持新的升级模型,以安全地金丝雀部署新版本的 Istio。在这个新模型中,代理将与他们使用的特定控制平面相关联。这允许以较小的风险将新版本部署到集群 - 在用户明确选择之前,没有代理连接到新版本。这允许逐步将工作负载迁移到新的控制平面,同时使用 Istio 遥测监控更改以调查任何问题

相关文档在此处此处


更新

正如我在评论中提到的,我发现可能有帮助的两件事是

  • istioctl 操作员日志

如果您的更新出现问题,那么它将出现在 istio 操作员日志中,并且更新将失败。

您可以通过检查操作员控制器日志来观察控制器在集群中响应 IstioOperator CR 更新所做的更改:

$ kubectl logs -f -n istio-operator $(kubectl get pods -n istio-operator -lname=istio-operator -o jsonpath='{.items[0].metadata.name}')

验证安装是否成功 您可以使用 verify-install 命令检查 Istio 安装是否成功,该命令将集群上的安装与您指定的清单进行比较。

如果您在部署之前没有生成清单,请运行以下命令立即生成它:

$ istioctl manifest generate <your original installation options> > $HOME/generated-manifest.yaml

然后运行以下 verify-install 命令查看是否安装成功:

$ istioctl verify-install -f $HOME/generated-manifest.yaml

希望您觉得这个有帮助。


推荐阅读