使用更新的配置进行 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 抛出证书未找到错误,正如预期的那样,因为我没有设置这些。

"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

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

升级

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

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

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

有关此内容的相关文档位于此处和此处。

<小时 />

更新

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

  • 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}')
  • Istioctl 验证安装

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

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

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

然后运行以下验证安装命令以查看安装是否成功:

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

希望这对您有所帮助。

最新更新