Cow*_*org 2 kubernetes azure-kubernetes azure-aks
我有一个.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-keyRun Code Online (Sandbox Code Playgroud)
这很出色,但是当我更改一些代码时,将新代码推送到容器并运行
kubectl apply -f测试部署
再次,直到我使用以下命令删除部署后,AKS /网站才会更新
kubectl删除部署myweb
我应该怎么做才能使其覆盖已部署的内容?我想在我的yaml文件中添加一些内容。(我试图将其用于Azure DevOps中的连续交付)。
Dan*_*Lee 12
我相信您正在寻找的是 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
Run Code Online (Sandbox Code Playgroud)
要确保重新创建 pod,请运行:
kubectl delete -f testdeployment && kubectl apply -f testdeployment
Run Code Online (Sandbox Code Playgroud)
kubectl在您的部署yaml文件中看不到任何更改,因此不会进行任何更改。这是使用latest标签的问题之一。
将映像标记为某个增量版本或内部版本号,然后latest在CI管道中替换为该标记(例如envsubst或类似标记)。这样就kubectl知道图像已更改。您还知道正在运行什么版本的映像。该latest标签可以是任何图像版本。
Azure DevOps的简化示例:
# <snippet>
image: mycontainerregistry.azurecr.io/myweb:${TAG}
# </snippet>
Run Code Online (Sandbox Code Playgroud)
管道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
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用其他工具,例如“ 替换令牌”(不同的语法:)#{TAG}#。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |