建议持久更改kube-env变量的方法

时间:2016-05-10 12:24:46

标签: kubernetes google-kubernetes-engine

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

为了推出流利的elsticsearch pod,我们在" Compute Instance Template"中设置了LOGGING_DESTINATION=elasticsearchENABLE_NODE_LOGGING="true"。 - > "自定义元数据" - > " KUBE-ENV"

虽然手动完成后效果很好,但每次gcloud container clusters upgrade都会覆盖它,因为新的实例模板会创建默认值(LOGGING_DESTINATION=gcp ...)。

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

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

// EDIT
手动切换回elasticsearch的当前解决方法(无需重新创建实例模板和实例)是:

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并开始流利。

//编辑#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

1 个答案:

答案 0 :(得分:3)

在GKE中没有完全支持的方法来重新配置kube-env。正如您所发现的那样,您可以破解实例模板,但不保证可以跨升级工作。

另一种方法是创建没有启用gcp日志记录的集群,然后创建一个DaemonSet,在每个节点上放置一个流畅的弹性搜索窗格。使用这种技术,您不需要编写(脆弱的)启动脚本或依赖于内置启动脚本在设置LOGGING_DESTINATION=elasticsearch时可能正常工作的事实(即使不是,也可能会破坏升级)被覆盖)。