docker - 为什么不存在的镜像在Kubernetes部署中起作用

标签 docker kubernetes microservices

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

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.10.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/

    相关文章:

    ssl - 微服务之间如何实现TLS

    elasticsearch - 如何监控 Apache Kafka 指标?

    image - Docker 镜像 - 将用户添加到组

    docker - 如何创建准备使用 docker-compose 进行部署的镜像

    kubernetes - 无法验证Azure Kubernetes服务连接

    google-cloud-platform - Heapster 没有将指标推送到 Google 容器引擎上的 Stackdriver

    domain-driven-design - 微服务之间基于事件的通信没有共享事件库?

    azure - 如何将多个图像推送到azure注册表

    python - 在不再运行的容器中找到由 python 脚本编写的文件

    谷歌容器集群作为配置