【问题标题】:Recommended way to persistently change kube-env variables持续更改 kube-env 变量的推荐方法
【发布时间】:2016-05-10 12:24:45
【问题描述】:

我们正在使用 elasticsearch/kibana 而不是 gcp 进行日志记录(基于 here 的描述)。

为了启动 fluentd-elsticsearch pod,我们在“计算实例模板”->“自定义元数据”->“kube-env”中设置了 LOGGING_DESTINATION=elasticsearchENABLE_NODE_LOGGING="true"

虽然这在手动完成时可以正常工作,但它会被每个 gcloud container clusters upgrade 覆盖,因为创建了具有默认值 (LOGGING_DESTINATION=gcp ...) 的新实例模板。

我的问题是:如何为 GKE/GCE 保留这种配置?

我考虑过添加一个k8s-user-startup-script,但它也在实例模板中定义,因此被gcloud container clusters upgrade 覆盖。 我还尝试将 k8s-user-startup-script 添加到项目元数据中,但没有考虑到这一点。

//编辑
当前手动切换回弹性搜索的解决方法(不重新创建实例模板和实例)是:

for node in $(kubectl get nodes -o name | cut -f2 -d/); do
    gcloud compute ssh $node \
      --command="sudo cp -a /srv/salt/fluentd-es/fluentd-es.yaml /etc/kubernetes/manifests/; sudo rm /etc/kubernetes/manifests/fluentd-gcp.yaml";
done

kubelet 会选择它,杀死 fluentd-gcp 并启动​​ fluentd-es。

//编辑#2 现在为此运行“启动脚本” DaemonSet:

kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: startup-script
  namespace: kube-system
  labels:
    app: startup-script
spec:
  template:
    metadata:
      labels:
        app: startup-script
    spec:
      hostPID: true
      containers:
        - name: startup-script
          image: gcr.io/google-containers/startup-script:v1
          securityContext:
            privileged: true
          env:
          - name: STARTUP_SCRIPT
            value: |
              #! /bin/bash

              set -o errexit
              set -o pipefail
              set -o nounset

              # Replace Google-Cloud-Logging with EFK
              if [[ ! -f /etc/kubernetes/manifests/fluentd-es.yaml ]]; then
                if [[ -f /home/kubernetes/kube-manifests/kubernetes/fluentd-es.yaml ]]; then
                  # GCI images
                  cp -a /home/kubernetes/kube-manifests/kubernetes/fluentd-es.yaml /etc/kubernetes/manifests/
                elif [[ -f /srv/salt/fluentd-es/fluentd-es.yaml ]]; then
                  # Debian based GKE images
                  cp -a /srv/salt/fluentd-es/fluentd-es.yaml /etc/kubernetes/manifests/
                fi
                test -f /etc/kubernetes/manifests/fluentd-es.yaml && rm /etc/kubernetes/manifests/fluentd-gcp.yaml
              fi

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    在 GKE 中重新配置 kube-env 没有完全受支持的方法。正如您所发现的,您可以破解实例模板,但这不能保证在升级过程中有效。

    另一种方法是在不启用 gcp 日志记录的情况下创建集群,然后创建一个 DaemonSet,在每个节点上放置一个 fluentd-elasticsearch pod。使用这种技术,您不需要编写(脆弱的)启动脚本或依赖于内置启动脚本在设置 LOGGING_DESTINATION=elasticsearch 时恰好可以工作的事实(即使它没有被覆盖也可能会中断升级)。

    【讨论】:

    • 谢谢!我是否认为无法为现有集群禁用 gcp 日志记录?
    • 不幸的是没有。现在它需要重新启动集群中的所有节点,此时您不妨创建一个新集群。
    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多