如何 kubernetes "kubectl apply"不更新现有部署



我有一个 .网络核心网络应用程序。这会部署到 Azure 容器注册表。我使用

kubectl apply -f testdeployment.yaml

使用下面的 yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 1
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: mycontainerregistry.azurecr.io/myweb:latest
ports:
- containerPort: 80
imagePullSecrets:
- name: my-registry-key

这很好用,但是当我更改一些代码时,将新代码推送到容器并运行

kubectl apply -f testdeployment

同样,AKS/网站不会更新,直到我删除部署

kubectl remove deployment myweb

我应该怎么做才能让它覆盖部署的任何内容?我想在我的 yaml 文件中添加一些东西。(我试图在 Azure DevOps 中使用它进行持续交付(。

我相信你正在寻找的是imagePullPolicy。默认值为 ifNotPresent,这意味着不会拉取最新版本。

https://kubernetes.io/docs/concepts/containers/images/

apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 1
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: mycontainerregistry.azurecr.io/myweb
imagePullPolicy: Always
ports:
- containerPort: 80
imagePullSecrets:
- name: my-registry-key

要确保重新创建 pod,请运行:

kubectl delete -f testdeployment && kubectl apply -f testdeployment
kubectl

在部署 yaml 文件中看不到任何更改,因此不会进行任何更改。这是使用latest标签的问题之一。

将映像标记为某个增量版本或内部版本号,并在 CI 管道中将该标记替换为latest(例如,使用envsubst或类似标记(。这样kubectl就知道图像已更改。您还知道正在运行的映像版本。latest标记可以是任何映像版本。

Azure DevOps 的简化示例:

# <snippet>
image: mycontainerregistry.azurecr.io/myweb:${TAG}
# </snippet>

管道 YAML:

stages:
- stage: Build
jobs:
- job: Build
variables:
- name: TAG
value: $(Build.BuildId)
steps:
- script: |
envsubst '${TAG}' < deployment-template.yaml > deployment.yaml
displayName: Replace Environment Variables

或者,您也可以使用其他工具,例如替换令牌(不同的语法:#{TAG}#(。

首先通过在部署文件的相对路径上运行以下命令来删除部署配置文件。

kubectl delete -f .deployment-file-name.yaml

早些时候我曾经得到

deployment.apps/deployment-file-name 未更改

这意味着部署文件保持缓存状态。 当您修复部署 YAML 上的一些错误/拼写错误时,就会发生这种情况,一旦错误被清除,配置就会被缓存。

只有kubectl delete -f .deployment-file-name.yaml才能删除缓存。

稍后,您可以通过以下方式进行部署

kubectl apply -f .deployment-file-name.yaml

示例 yaml 文件如下:


api版本: apps/v1 种类:部署 元数据: 名称:部署文件名 规范: 副本: 1 选择器: 匹配标签: 应用:我的服务名称 模板: 元数据: 标签: 应用: 平台服务 规范: 器皿: - 名称:平台服务 图片:/平台服务:最新

最新更新