当我实现 CI/CD 管道时,我使用 docker、kubernetes 和 jenkins 来实现。我将生成的 Docker 映像推送到 Dockerhub 存储库。
当我拉取它时,它并没有从 Dockerhub.com 注册表中拉取最新版本。所以它没有在我的应用程序中显示更新的响应。我添加了testdeployment.yaml如下文件。存储库凭据仅存储在 Jenkinsfile 中。
spec:
containers:
- name: test-kube-deployment-container
image: "spacestudymilletech010/spacestudykubernetes:latest"
imagePullPolicy: Always
ports:
- name: http
containerPort: 8085
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
詹金斯文件
sh 'docker build -f /var/lib/jenkins/workspace/jpipeline/pipeline/Dockerfile -t spacestudymilletech010/spacestudykubernetes:latest /var/lib/jenkins/workspace/jpipeline/pipeline'
sh 'docker login --username=<my-username> --password=<my-password>'
sh 'docker push spacestudymilletech010/spacestudykubernetes:latest'
Run Code Online (Sandbox Code Playgroud)
我如何确定为什么它没有从 Dockerhub.com 提取最新的镜像?
看起来你是在反复推:latest送到 dockerhub 吗?
如果是这样,那么这就是您的问题的原因。您从 Jenkins 作业将最新版本推送到集线器,但如果运行部署 Pod 的 k8s 节点已经有一个名为“latest存储在本地”的标签,那么它将使用该标签。
澄清一下 -latest只是一个字符串,它同样可以是foobar。这实际上并不意味着docker 将拉取最新版本的容器。
从中可以得出两个结论:
latest。关于使用latest。这是来自个人经验,在我的工作场所,在我们采用 k8s 的早期,我们到处都在使用它。直到有一天我们发现我们的木偶服务器不再工作了。经过调查,我们发现该节点已经死亡,pod 在不同的节点上重新旋转,并且latest拉出了一个不同的节点,这是一个新的主要版本,破坏了一些东西。
这并不明显,因为kubectl describe pod显示了与以前相同的标签名称,所以显然没有任何改变。
添加评论中提到的一个很好的观点:你有ImagePullPolicy: 'Always',但是如果你正在使用kubectl apply -f mypod.yaml相同的标签名称,k8s无法知道你实际上已经更改了图像
| 归档时间: |
|
| 查看次数: |
3259 次 |
| 最近记录: |