我有一个.NET核心的Web应用程序。这已部署到Azure容器注册表。我使用以下命令将其部署到我的Azure Kubernetes服务
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测试部署
再次,直到我使用以下命令删除部署后,AKS /网站才会更新
kubectl删除部署myweb
我应该怎么做才能使其覆盖已部署的内容?我想在我的yaml文件中添加一些内容。(我试图将其用于Azure DevOps中的连续交付)。
kubectl
在您的部署yaml文件中看不到任何更改,因此不会进行任何更改。这是使用latest
标签的问题之一。
将映像标记为某个增量版本或内部版本号,然后latest
在CI管道中替换为该标记(例如envsubst
或类似标记)。这样就kubectl
知道图像已更改。您还知道正在运行什么版本的映像。该latest
标签可以是任何图像版本。
Azure DevOps的简化示例:
#image: mycontainerregistry.azurecr.io/myweb:${TAG} #
管道YAML:
stages: - stage: Build jobs: - job: Build variables: - name: TAG value: $(Build.BuildId) steps: - script: | envsubst '${TAG}'deployment.yaml displayName: Replace Environment Variables
或者,您也可以使用其他工具,例如“ 替换令牌”(不同的语法:)#{TAG}#
。