gpt4 book ai didi

kubernetes - 部署未检测到 init-container 中容器镜像标签的更改

转载 作者:行者123 更新时间:2023-12-04 00:16:29 25 4
gpt4 key购买 nike

自从 init-container 可用以来,我一直在使用它,并发现它们非常有用。我的核心镜像(下面称为 web-dev)变化不大,但我的 init-container 镜像(下面称为 web-data-dev)确实经常变化。

init-container 使用带有版本号的容器镜像。我将此版本号更改为最新值,然后执行 kubectl apply -f deployment.yaml

例如,我将 eu.gcr.io/project/web-data-dev:187 更改为 eu.gcr.io/project/web-data-dev:188 在运行 kubectl apply 之前。

然而,当我这样做时,没有部署发生,如果我对 init-container 使用的图像进行任何更改,部署仍然不会发生。我认为这是因为未检测到 init-container 更改。

然后我尝试在图像字段中放入一些垃圾,例如:"image": "thisIsNotAnImage" 并再次运行 kubectl apply -f,但更新仍然没有应用。

我的问题是 - 如何让 kubectl apply -f 检测 init-container 中的图像标签更改?我是不是做错了什么,这是一个错误,还是因为初始容器是 Alpha 版而尚未实现?

完整部署 YAML 如下。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 1
strategy:
rollingUpdate:
maxUnavailable: 0
template:
metadata:
labels:
app: web
tier: frontend
annotations:
pod.alpha.kubernetes.io/init-containers: '[
{
"name": "initialiser1",
"image": "eu.gcr.io/project/web-data-dev:187",
"command": ["cp", "-r", "/data-in/", "/opt/"],
"volumeMounts": [
{
"name": "file-share",
"mountPath": "/opt/"
}
]
}
]'
spec:
containers:

- image: eu.gcr.io/project/web-dev:20
name: web
resources:
requests:
cpu: 10m
memory: 40Mi
ports:
- containerPort: 80
name: http
- containerPort: 443
name: https
volumeMounts:
- name: file-share
mountPath: /opt/

volumes:
- name: file-share
emptyDir: {}

最佳答案

如果您使用的是 Kubernetes 1.4,请尝试将 pod.alpha.kubernetes.io/init-containers 更改为 pod.beta.kubernetes.io/init-containers .

我在 GitHub 上找不到合适的问题,但这两个注释的行为是不同的。我可以对第二个执行 kubectl apply -f 部署将被更新。

您可以使用下面的示例对其进行测试:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nginx
spec:
template:
metadata:
labels:
app: nginx
annotations:
pod.beta.kubernetes.io/init-containers: '[
{
"name": "install",
"image": "busybox",
"command": ["/bin/sh", "-c", "echo foo > /work-dir/index.html"],
"volumeMounts": [
{
"name": "workdir",
"mountPath": "/work-dir"
}
]
}
]'
spec:
volumes:
- name: workdir
emptyDir: {}
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html

尝试将 foo 更改为 bar 并查看结果:

$ cat nginx.yaml | kubectl apply -f -
deployment "nginx" created
$ curl $(minikube service nginx --url)
Waiting, endpoint for service is not ready yet...
foo
$ cat nginx.yaml | sed -e 's/foo/bar/g' | kubectl apply -f -
deployment "nginx" configured
$ curl $(minikube service nginx --url)
Waiting, endpoint for service is not ready yet...
bar

同样的事情使用pod.alpha.kubernetes.io/init-containers:

$ curl $(minikube service nginx --url)
Waiting, endpoint for service is not ready yet...
foo
$ cat nginx.yaml | sed -e 's/foo/bar/g' | kubectl apply -f -
deployment "nginx" configured
$ curl $(minikube service nginx --url)
foo

关于kubernetes - 部署未检测到 init-container 中容器镜像标签的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com