如何在正在运行的kubernetes集群中更改pod的映像(pod没有部署)



我有一个正在运行的magento2的kubernetes集群。它有一个用于elasticsearch的pod(您可以在这里看到代码)。

我需要将图像从elasticsearch:7.9.0更改为自定义图像。

自从使用定制,我尝试使用补丁:

部署/es-swap:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
metadata:
name: es_swap
bases:
- ../step-4
patchesJson6902:
- path: patch/es.json
target:
group: elasticsearch.k8s.elastic.co
version: v1
kind: Elasticsearch
name: elasticsearch

部署/es-swap/es.json:

[
{
"op": "replace",
"path": "/spec/nodeSets/0/podTemplate/spec/containers/0/name",
"value": "mydockerhubuser/elastic:v7.9.0_custom"
}
]

我像这样部署补丁:

$ kustomize build deploy/es_swap | kubectl apply -f -
serviceaccount/ingress-nginx unchanged
serviceaccount/ingress-nginx-admission unchanged
:
elasticsearch.elasticsearch.k8s.elastic.co/elasticsearch configured

,但它实际上没有工作,因为它仍然使用以前的图像:

$ k describe pod elasticsearch-es-elasticsearch-0 | grep image
Normal   Pulled                  25m   kubelet                  Container image "docker.elastic.co/elasticsearch/elasticsearch:7.9.0" already present on machine

当检查kustomize build deploy/es_swap的输出时,我看到mydockerhubuser/elastic:v7.9.0_custom是elasticsearch容器的图像。所以我不明白为什么不交换

我正在考虑的另一个选项是,而不是改变图像,我可以添加initContainers,在这里解释。我不完全确定该怎么做。

我试着检查rollout和kubernetes补丁,但我只看到将它们应用于部署的示例。

如何改变这个跑步舱的图像?

kubernetes不允许在非托管pod中更改映像。就是这样。

如果你需要依赖简单的pod,你需要删除并重新创建你的资源。

但是,您可以创建与您的pod的当前标签相匹配的部署,这将使该pod由部署管理。然后,您可以在部署中更改映像,从而创建具有更新映像的pod

相关内容

最新更新