我知道有人谈论在配置映射发生变化时自动重启pod的能力,但据我所知,Kubernetes 1.2尚未提供.
那么(我认为)我想做的是与使用配置映射的pod相关联的部署资源的"滚动重启" .是否有可能,如果是这样,如何在Kubernetes中强制重新启动部署而不更改实际模板中的任何内容?这是目前最好的方式还是有更好的选择?
Sym*_*ric 113
当前解决此问题的最佳解决方案(在兄弟答案中链接的https://github.com/kubernetes/kubernetes/issues/22368中深入引用)是使用Deployments,并认为您的ConfigMaps是不可变的.
如果要更改配置,请使用要进行的更改创建新的ConfigMap,并将部署指向新的ConfigMap.如果新配置中断,部署将拒绝缩小您正在工作的ReplicaSet.如果新配置有效,则旧的ReplicaSet将缩放为0个副本并删除,新的pod将使用新配置启动.
不像仅仅编辑ConfigMap那么快,但更安全.
Pra*_*h B 47
在配置地图更新上发信号通知pod是一项功能(https://github.com/kubernetes/kubernetes/issues/22368).
您可以随时编写一个自定义pid1,注意到confimap已更改并重新启动您的应用.
您还可以例如:在2个容器中安装相同的配置映射,如果配置映射内容的散列发生更改,则在第二个容器中显示http运行状况检查,并将其作为第一个容器的活动探测器(因为容器中的容器) pod共享相同的网络命名空间).当探针失败时,kubelet将为您重新启动第一个容器.
当然,如果你不关心pod所在的节点,你可以简单地删除它们,复制控制器将为你"重启"它们.
Vin*_*nay 24
对于我来说k8s
>
1.15
,作为 CI/CD 的一部分,将应用程序配置路径与卷挂载连接起来,重新启动部署对我来说效果最好。部署清单 YML 中的重新加载器插件或设置restartPolicy: Always
对我不起作用。无需更改应用程序代码,适用于静态资产和微服务。
kubectl rollout restart deployment/<deploymentName> -n <namespace>
Run Code Online (Sandbox Code Playgroud)
qua*_*nta 22
配置映射或秘密通常作为配置文件注入容器中.根据应用程序的不同helm upgrade
,如果使用后续应用程序进行更新,则可能需要重新启动,但如果部署规范本身未更改,则应用程序将继续使用旧配置运行,从而导致部署不一致.
该sha256sum
函数可与include
函数一起使用,以确保在另一个规范更改时更新部署模板部分:
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
[...]
Run Code Online (Sandbox Code Playgroud)
在我的情况下,由于某些原因,$.Template.BasePath
没有工作,但$.Chart.Name
确实:
spec:
replicas: 1
template:
metadata:
labels:
app: admin-app
annotations:
checksum/config: {{ include (print $.Chart.Name "/templates/" $.Chart.Name "-configmap.yaml") . | sha256sum }}
Run Code Online (Sandbox Code Playgroud)
小智 19
我发现这样做的最好方法是运行Reloader
https://github.com/stakater/Reloader
它允许您定义要监视的配置映射或机密,当它们更新时,将执行部署的滚动更新.这是一个例子:
您有一个部署foo
和一个名为ConfigMap的foo-configmap
.您希望每次更改configmap时都滚动部署的pod.您需要运行Reloader:
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
Run Code Online (Sandbox Code Playgroud)
然后在部署中指定此批注:
kind: Deployment
metadata:
annotations:
configmap.reloader.stakater.com/reload: "foo-configmap"
name: foo
...
Run Code Online (Sandbox Code Playgroud)
您可以更新与您的部署无关的元数据标签。它将触发滚动更新
例如:
metadata:
labels:
configmap-version: 1
Run Code Online (Sandbox Code Playgroud)
在部署位于子图表中并且控制它的值位于父图表的值文件中时遇到了这个问题。这是我们用来触发重启的:
spec:
template:
metadata:
annotations:
checksum/config: {{ tpl (toYaml .Values) . | sha256sum }}
Run Code Online (Sandbox Code Playgroud)
显然,这将在任何值更改时触发重新启动,但它适用于我们的情况。子图表中最初的内容只有在子图表中的 config.yaml 本身发生更改时才有效:
checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
67811 次 |
最近记录: |