当与后台程序集关联的Kubernetes Pod的configmap更新时,如何自动重新启动它们?
根据kubernetes文档,当configmap卷挂载更新时,它会自动更新POD。但是,我并不认为后台进程集会发生这种情况。我错过了什么?
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-bit-update
namespace: default
labels:
k8s-app: fluent-bit
data:
# Configuration files: server, input, filters and output
# ======================================================
fluent-bit.conf: |
[SERVICE]
Flush 1
Log_Level info
Daemon off
Parsers_File parsers.conf
@INCLUDE input-kubernetes.conf
@INCLUDE filter-kubernetes.conf
@INCLUDE output-logaggregator.conf
input-kubernetes.conf: |
[INPUT]
Name tail
Tag kube.*
Path /var/log/containers/abc.log
Parser docker
DB /var/log/tail-containers-state.db
DB.Sync Normal
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
Rotate_Wait 60
Docker_Mode On
filter-kubernetes.conf: |
[FILTER]
Name kubernetes
Match kube.*
Kube_URL https://kubernetes.default.svc:443
Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
Kube_Tag_Prefix kube.var.log.conatiners.
Merge_Log On
Keep_Log Off
K8S-Logging.Parser On
K8S-Logging.Exclude Off
Labels On
Annotations On
output-kubernetes.conf: |
[OUTPUT]
Name cloudwatch
Match kube.*
region us-west-2
log_group_name fluent-bit-cloudwatch
log_stream_prefix from-fluent-bit
auto_create_group true
parsers.conf: |
[PARSER]
Name docker
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep On
Decode_Field_As escaped_utf8 log do_next
Decode_Field_As json log
[PARSER]
Name docker_default
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep On
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: fluent-bit-update
namespace: default
labels:
k8s-app: fluent-bit-logging
version: v1
kubernetes.io/cluster-service: "true"
spec:
template:
metadata:
labels:
k8s-app: fluent-bit-logging
version: v1
kubernetes.io/cluster-service: "true"
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "2020"
prometheus.io/path: /api/v1/metrics/prometheus
spec:
containers:
- name: aws-for-fluent-bit
image: amazon/aws-for-fluent-bit:latest
imagePullPolicy: Always
ports:
- containerPort: 2020
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
- name: fluent-bit-volume
mountPath: /fluent-bit/etc/
terminationGracePeriodSeconds: 10
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
- name: fluent-bit-volume
configMap:
name: fluent-bit-update
serviceAccountName: fluent-bit
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
- operator: "Exists"
effect: "NoExecute"
- operator: "Exists"
effect: "NoSchedule"
当我更新configmap中的path
字段以读取另一个日志文件时,虽然我看到卷挂载正在更新,但我看不到POD正在接收更改,除非我删除并重新创建后台启动。
有没有一种方法可以在不重新启动后台启动的情况下自动实现这一点?我希望得到一些关于这一点的指导。谢谢
根据您指出的文档,Kubernetes将更新configmap(在您的情况中为fluent-bit配置),但选择更新的配置是应用程序的职责。通常,应用程序在启动时接受配置,但要定期更新配置,您的应用程序应该支持此配置,或者应该使用另一个模块(如配置更新器),当配置发生变化时,该模块将重新启动应用程序(而不是重新启动pod)。对于fluent-bit,您可以参考github的动态配置问题。普罗米修斯已经这样支持了。
我有一个部署,其中包括一个configMap、persistentVolumeClaim和一个服务。我已经更改了configMap并将部署重新应用到我的集群中。我了解到此更改不会在部署中自动重启pod: 下面是Wiki.yaml的样子:
ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中,下文主要是探究 ConfigMap 的创建和更新流程,以及对 ConfigMap 更新后容器内挂载的内容是否同步更新的测试。 测试示例 假设我们在 default namespace 下有一个名为 nginx-config 的 ConfigMap,可以使用 kubectl命令来获取: $ kube
我有一个kubernetes集群,安装了保险库(通过头盔图表)。 我想将机密从vault填充到pod中的文件(例如nginx),并每5分钟刷新一次机密。 我使用以下配置对其进行了测试(使用适当的vault策略/后端身份验证): namespace.yaml Service_account.yaml nginx-deployment.yaml 当我将此配置应用于kubernetes集群时,将创建部署
未解决最初的关闭原因 让我们假设出现这种情况: 为什么? 有没有一种方法可以在Spring-Data中“同步”(开箱即用)对象(或者强制刷新)?还是我在要求奇迹?我不是讽刺,但也许我不是那么内行,也许(或者可能)是我的无知。如果是这样,请解释我为什么,并(如果你想)分享一些关于这个惊人的框架的先进知识。