Google kubernetes engine 如何使用Helm更新GKE集群上运行的工作负载的ConfigMap?

Google kubernetes engine 如何使用Helm更新GKE集群上运行的工作负载的ConfigMap?,google-kubernetes-engine,prometheus,kubernetes-helm,kubectl,Google Kubernetes Engine,Prometheus,Kubernetes Helm,Kubectl,我有一个GKE集群,它以有状态集的形式运行普罗米修斯和普罗米修斯警报管理器。每个有状态集都运行收集度量的pod。普罗米修斯和警报管理器分别有两个配置映射(分别为alerts.yaml、rules.yaml和premoetheus.yaml)和(alertmanager.yml) 现在我有一项新任务,就是向Slack发送警报。我已经分别更新了alerts.yaml、rules.yaml和alertmanager.yml,以便将警报发送到Slack 我需要使用Helm更新集群中运行GKE中的工作负载

我有一个GKE集群,它以有状态集的形式运行普罗米修斯和普罗米修斯警报管理器。每个有状态集都运行收集度量的pod。普罗米修斯和警报管理器分别有两个配置映射(分别为alerts.yaml、rules.yaml和premoetheus.yaml)和(alertmanager.yml)

现在我有一项新任务,就是向Slack发送警报。我已经分别更新了alerts.yaml、rules.yaml和alertmanager.yml,以便将警报发送到Slack


我需要使用Helm更新集群中运行GKE中的工作负载和pod的Prometheus和alert manager的所有.yaml文件。有人能告诉我如何使用Helm实现这一点吗?

我也建议您使用Helm来管理您的服务,但您可以更新configMap,而无需使用Helm

首先,您可以使用
apply
更改confiMap中的数据

kubectl apply-f fileName.yaml
但这并没有更新加载在播客中的configMap信息,您需要重新启动播客以查看更改,因为您有一些不同的选项:

选项1

手动操作

删除POD,它会使部署控制器强制创建新的POD,以便在部署定义中具有您拥有的副本计数,并且POD在启动时采用新的configMap

kubectl删除pod
在这个解决方案中,你一个接一个地删除pod

向下/向上扩展部署,您可以手动将部署向下扩展到0,然后再次向上扩展,以创建使用新confirMap的新POD

kubectl规模部署--副本=0&&kubectl规模部署--副本=2
使用该解决方案,您不需要逐个删除

选项2

您可以在部署上使用env var定义来强制滚动更新,该变量不在pod内使用,但您可以通过编辑部署来使用ti来聚焦滚动更新

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: helloworld
  name: helloworld
spec:
  replicas: 1
  selector:
    matchLabels:
      run: helloworld
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: helloworld
    spec:
      containers:
      - image: helloworld
        name: helloworld
        env:
        - name: RELOAD_VAR
          value: TAG_VAR0
每次更改
RELOAD\u VAR
值时,部署将执行滚动更新,创建新的POD并加载新的confirMap

选项3

通过更自动化的方式,您可以使用一种特殊的控制器,该控制器使用注释来监视configMap上的更改,并重新加载具有与该confirMap关联的正确注释的POD

您可以查看,只需将其部署到集群上,并将注释放到部署中

kind: Deployment
metadata:
  annotations:
    configmap.reloader.stakater.com/reload: "foo-configmap"
spec:
  template:
    metadata:

每次更改配置图时,无论您如何更改,控制器都会检测到更改并自动重新加载吊舱。

您是否有普罗米修斯和警报管理器的舵图?否,我应该如何使用所有这些配置文件创建舵图?我的状态集已在GKE群集上运行。现在,我在prometheus和alertmanager.yml中添加了警报。我如何使用Helm now使用我在所有.yaml文件中的最新更改来更新steteful set configmaps?是的,您需要为此创建Helm图表,然后通过Helm版本您可以更新configmaps。谢谢你提供的信息。我是否可以不使用下面的命令直接创建/替换configmaps kubectl create configmap foo--从文件foo.properties-o yaml--干运行| kubectl replace-f-可以,但您也有同样的问题,除非重新创建POD,否则POD上的configmap中包含的信息不会更新。根据您的问题,我了解yaml文件包含部署和configMap。在这种情况下,请确保每次运行该命令时都重新创建POD。是的,我希望POD自动获得更新的ConfigMaps,而不是手动重新创建。您建议的选项3似乎是最好的,使POD自动适应新的ConfigMaps。但是我如何编辑已经运行的有状态集来为重载程序添加注释呢?另外,在Google Kubernetes引擎上部署这个重新加载程序安全吗?是的,部署它是安全的,我已经在生产服务中没有问题了。要编辑实际的有状态集,您只需编辑yaml文件并运行
kubectl apply-f
ok谢谢,还有一个问题,对于有状态集,我是否也可以使用所述的滚动更新策略来自动更新POD?在这种情况下,我不必删除和重新创建pod。一旦这样的命令是
kubectl patch statefulset web-p'{“spec”:{“updateStrategy”:{“type”:“RollingUpdate”}}