在Kubernetes中动态标记部署图像

115 阅读1分钟

值得注意的是,如果没有为Docker镜像设置一个特定的标签,就很难进行部署回滚。在这个例子中,我们将在每次我们的应用程序有新的更新时对Docker镜像进行标记,将其推送到Docker Hub并部署到Kubernetes。

对镜像进行标记

假设你已经更新了你的应用程序。让我们构建、标记并将其推送到Docker Hub。

IMAGE_TAG := $(shell git rev-parse --short HEAD)

如你所见,我们使用了最新的Git提交哈希值作为镜像标签。你也可以使用GitHub发布的版本标签,如v1.0.0 等。我们应该看到终端输出的样子如下。

Successfully built 11416713s43z

部署

我们的部署文件看起来像下面这样。正如你所看到的,我们将图像标签设置为latest ,但现在不用担心。当我们用下面的命令进行部署时,它将被覆盖。如果你感到困惑,你可以去掉latest

apiVersion: apps/v1
IMAGE_TAG := $(shell git rev-parse --short HEAD)

你可以用下面的命令代替kubectl set image ,这样做也是一样的。

kubectl patch deployment address-finder-deployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"go","image":"you/address-finder-go:$(IMAGE_TAG)"}]}}}}'

让我们来设置我们的Kubernetes环境。这是必要的,因为这是第一次的应用程序设置过程。它将使用latest 图像标签。

$ make k8s-setup

让我们检查一下附加在组件上的图像标签。正如所见,它是latest

$ kubectl describe deployment.apps/address-finder-deployment | grep Image

我们已经知道,我们的镜像在Docker Hub中被标记为v225062 。这也是我们应用程序的最新提交哈希值,所以让我们部署它。

$ make k8s-deploy

让我们确认一下这些变化。

$ kubectl describe deployment.apps/address-finder-deployment | grep Image