【发布时间】:2019-11-06 03:30:26
【问题描述】:
我使用 azure 的 kubernates 服务创建了一个应用程序。 在我的 yaml 中,我为我使用的每个图像指定了“最新”作为图像版本。
是否有任何选项可以使,当我更新镜像注册表以便“最新”更改时,kubernates 会自动部署它?并且一切都被管理以便它只更新一个副本然后扩展以便在部署期间服务不会中断?
【问题讨论】:
标签: azure kubernetes azure-aks
我使用 azure 的 kubernates 服务创建了一个应用程序。 在我的 yaml 中,我为我使用的每个图像指定了“最新”作为图像版本。
是否有任何选项可以使,当我更新镜像注册表以便“最新”更改时,kubernates 会自动部署它?并且一切都被管理以便它只更新一个副本然后扩展以便在部署期间服务不会中断?
【问题讨论】:
标签: azure kubernetes azure-aks
Kubernetes 不知道注册表中的更改,它不会监视新的容器映像。您需要创建一个在发布新版本并更新 Kubernetes 部署时触发的流程。您可以为此使用 CI/CD 工具,或者 Azure Functions、Azure 自动化等。
为了在不停机的情况下进行部署,您需要查看滚动更新。
【讨论】:
你真的应该为此使用发布管理或类似 gitops 的东西,当新版本的容器可用时会触发更新。为此使用 Azure Functions\Automation 是不对的。它不是为了那个,它会很复杂\不可靠。
【讨论】:
是否有任何选项可以使当我更新映像注册表以使“最新”更改时,kubernates 自动部署它?
处理这个不是 Kubernetes 的工作。有两个陡峭的工作要做:
在 docker 注册表上添加 webhook,对于 docker-hub,它是 Docker Hub Webhooks。当新图像被推送到注册表时,您可以向某处发送POST 请求作为通知。
部署 CI/CD 以接收该通知并滚动更新您的应用程序。或者只是创建一个简单的 HTTP 服务器来处理通知请求并执行类似kubectl ... 的操作。
所有的东西都是被管理的,所以它只更新一个副本,然后扩展,以便在部署期间服务不会中断?
Kubernetes 由 rolling update 处理此问题。对于Deployment 或StatefulSet,当前kubernetes 通过滚动更新自动更新pod,您只需kubectl apply -f new-spec.yaml。
【讨论】:
imagePullPolicy = Always,docker会检查注册中心最新的镜像是否与本地相同。