首先,我创建了以下两个不同版本的图像
docker image ls
REPOSITORY | TAG | IMAGE ID
isaac88/posts | 0.0.1 | xxx
isaac88/posts | 0.0.5 | yyy
然后我创建了一个如下所示的kubernetes部署文件
posts-depl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: posts-depl
spec:
replicas: 1
selector:
matchLabels:
app: posts
template:
metadata:
labels:
app: posts
spec:
containers:
- name: posts
image: isaac88/posts:0.0.1
如果您注意到了,我在部署yaml文件中指定了映像的版本。通过在0.0.1
和0.0.5
之间交换版本,并在以下命令中执行以查看差异
kubectl apply -f posts-depl.yaml
kubectl get pods
kubectl logs xxxxxxxxx
到目前为止一切正常。
现在,我尝试从部署Yaml中删除0.0.1
,我想知道它的行为,因为我没有将最新版本标记到我的Docker映像中。我已经使用docker image ls
下面是我最新的yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: posts-depl
spec:
replicas: 1
selector:
matchLabels:
app: posts
template:
metadata:
labels:
app: posts
spec:
containers:
- name: posts
image: isaac88/posts
删除版本后,我运行了kubectl apply -f posts-depl.yaml
,令人惊讶的是它能够成功创建部署,并且我继续对创建的最新Pod执行kubectl logs xxxxx
,我看到了属于版本0.0.1
。我不明白背后的原因
答案 0 :(得分:3)
答案 1 :(得分:2)
这可能是因为部署仍在使用旧映像。通过使用kubectl get events
检查是否存在失败的图像提取事件,并通过kubectl rollout history deployment.v1.apps/posts-depl
检查部署历史。
通过kubectl describe deployment posts-depl