首先,我创建了两个不同版本的图像,如下所示
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.0.1的部署的先前版本
滚动更新是更新应用程序运行版本的默认策略。
您可以阅读有关它的更多信息here
关于docker - 为什么不存在的镜像在Kubernetes部署中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62133307/