Kubernetes 持续更改kube环境变量的推荐方法
我们使用elasticsearch/kibana代替gcp进行日志记录(基于所述内容) 为了启动fluentd elsticsearch pod,我们在“计算实例模板”->“自定义元数据”->“kube环境”中设置了Kubernetes 持续更改kube环境变量的推荐方法,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我们使用elasticsearch/kibana代替gcp进行日志记录(基于所述内容) 为了启动fluentd elsticsearch pod,我们在“计算实例模板”->“自定义元数据”->“kube环境”中设置了日志记录\u DESTINATION=elasticsearch和启用节点\u LOGGING=“true” 虽然手动完成此操作后效果良好,但每次gcloud container clusters升级都会覆盖它,因为会创建一个带有默认值(LOGGING\u DESTINATION=g
日志记录\u DESTINATION=elasticsearch
和启用节点\u LOGGING=“true”
虽然手动完成此操作后效果良好,但每次gcloud container clusters升级
都会覆盖它,因为会创建一个带有默认值(LOGGING\u DESTINATION=gcp
…)的新实例模板
我的问题是:如何为GKE/GCE坚持这种配置
我曾考虑添加一个k8s用户启动脚本,但该脚本也在实例模板中定义,因此会被gcloud container clusters upgrade
覆盖。
我还尝试将k8s用户启动脚本添加到项目元数据中,但没有考虑到这一点
//编辑手动切换回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并启动fluentd es
//编辑#2
现在正在为此运行“启动脚本”守护程序:
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
在GKE中没有一种完全受支持的方式来重新配置kube env。正如您所发现的,您可以破解实例模板,但这不能保证在升级过程中正常工作
另一种方法是在不启用gcp日志记录的情况下创建集群,然后创建一个守护程序集,在每个节点上放置fluentd elasticsearch pod。使用这种技术,您不需要编写(脆弱的)启动脚本,也不需要依赖于这样一个事实,即在设置
LOGGING\u DESTINATION=elasticsearch
(即使未被覆盖,也可能会在升级过程中中断)时,内置启动脚本恰好工作 谢谢!我认为没有办法为现有集群禁用gcp日志记录,这对吗?不幸的是,没有。现在,它需要重新启动集群中的所有节点,此时您也可以创建一个新集群。