Forma recomendada para cambiar persistentemente las variables kube-env
Estamos utilizando elasticsearch / kibana en lugar de gcp para iniciar sesión (según lo que se describeaquí)
Para lanzar las cápsulas de fluentd-elsticsearch, hemos establecidoLOGGING_DESTINATION=elasticsearch
yENABLE_NODE_LOGGING="true"
en la "Plantilla de instancia de proceso" -> "Metadatos personalizados" -> "kube-env".
Si bien esto funciona bien cuando se hace manualmente, se sobrescribe con cadagcloud container clusters upgrade
como una nueva plantilla de instancia con valores predeterminados (LOGGING_DESTINATION=gcp
...) es creado.
Mi pregunta es: ¿Cómo persisto este tipo de configuración para GKE / GCE?
Pensé en agregar unscript de inicio de usuario k8s pero eso también se define en la Plantilla de instancia y, por lo tanto, se sobrescribe congcloud container clusters upgrade
. También he intentado agregar unscript de inicio de usuario k8s a los metadatos del proyecto pero eso no se tiene en cuenta.
//EDITAR
La solución actual (sin recrear la plantilla de instancia y las instancias) para volver a cambiar manualmente a elasticsearch es:
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 lo recogerá, matará fluentd-gcp y comenzará a fluentd-es.
// EDITAR # 2 Ahora ejecuta un DaemonSet "startup-script" para esto:
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