configmap 更改不会自动反映在相应的 pods

configmap change doesn't reflect automatically on respective pods

apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: consoleservice1
    spec:
      selector:
        matchLabels:
          app: consoleservice1
      replicas: 3 # tells deployment to run 3 pods matching the template
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
      minReadySeconds: 5
      template: # create pods using pod definition in this template
        metadata:
          labels:
            app: consoleservice1
        spec:
          containers:
          - name: consoleservice
            image: chintamani/insightvu:ms-console1
            readinessProbe:
              httpGet:
                path: /
                port: 8385
              initialDelaySeconds: 5
              periodSeconds: 5
              successThreshold: 1
            ports:
            - containerPort: 8384
            imagePullPolicy: Always
            volumeMounts:
              - mountPath: /deploy/config
                name: config
          volumes:
            - name: config
              configMap:
                name: console-config

为了创建 configmap,我使用了这个命令:

kubectl create configmap console-config --from-file=deploy/config

虽然在 configmap 中更改它不会自动反映,但每次我都必须重新启动 pod。我怎样才能自动完成?

谢谢你们。能够修复它,我正在使用重新加载程序来反映 pods 如果内部进行了任何更改 kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml

然后在 deployment.yml 文件中添加注释。

apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: consoleservice1
  annotations:
    configmap.reloader.stakater.com/reload: "console-config"

它将逐渐重新启动您的 pods。

Pod 和 configmap 在 Kubernetes 中是完全独立的,pods 如果 configmap 发生变化,不会自动重启。

实现这一目标的替代方案很少。

  1. 使用 wave,它是一个 Kubernetes 控制器,它会查找特定的注释并在 configmap 有任何变化时更新部署 https://github.com/pusher/wave

  2. 使用 https://github.com/stakater/Reloader,重新加载器可以观察 configmap 更改,并可以更新 pod 以选择新配置。

        kind: Deployment
        metadata:
          annotations:
            reloader.stakater.com/auto: "true"
        spec:
          template:
            metadata:
    
  3. 您可以在部署和 CI/CD 中添加自定义 configHash 注释,或者在部署应用程序时使用 yq 将该值替换为 configmap 的哈希值,因此如果configmap 中的任何更改。 Kubernetes 将检测部署注释的变化并使用新配置重新加载 pods。

yq w --inplace deployment.yaml spec.template.metadata.annotations.configHash $(kubectl get cm/configmap -oyaml | sha256sum)

        apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
        kind: Deployment
        metadata:
          name: application
        spec:
          selector:
            matchLabels:
              app: consoleservice1
          replicas: 3              
          template:
            metadata:
              labels:
                app: consoleservice1
              annotations:
                configHash: ""

参考:here