首页 > 解决方案 > 为什么不存在的图像在 Kubernetes 部署中起作用

问题描述

首先,我创建了两个不同版本的图像,如下所示

泊坞窗图像 ls

REPOSITORY     |    TAG      |    IMAGE ID
isaac88/posts  |    0.0.1    |    xxx
isaac88/posts  |    0.0.5    |    yyy

然后我创建了一个 Kubernetes 部署文件,如下所示

post-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.10.0.5执行以下命令以查看差异

  1. kubectl apply -f posts-depl.yaml
  2. kubectl get pods
  3. kubectl logs xxxxxxxxx

到目前为止一切正常。

现在我尝试0.0.1从部署中删除 yaml,我想知道它的行为方式,因为我没有将最新版本标记到我的 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,令人惊讶的是它能够成功创建部署,我继续在kubectl logs xxxxx创建的最新 pod 上执行,我看到属于 version 的日志0.0.1。我不明白背后的原因

标签: dockerkubernetesmicroservices

解决方案


这是因为您的部署未能获取带有最新标签的图像并回滚到您指定标签 0.0.1 的部署的先前版本

滚动更新是更新应用程序运行版本的默认策略。

你可以在这里阅读更多关于它的信息


推荐阅读