繁体   English   中英

Kubernetes部署使用语义容器名称的滚动更新

[英]Kubernetes deployment rolling update with semantic container names

我想使用Kubernetes 部署并使用语义标记名称引用容器映像。 例如application:latestapplication:testingapplication:production

使用imagePullPolicy: Always可以直接进行设置imagePullPolicy: Always在我的容器规范内,我还可以使用以下方法快速推出新版本:

 $ REPLICAS=$(kubectl get deployment application --template="{{.spec.replicas}}")
 $ kubectl scale --replicas=0 deployment application
 deployment "application" scaled
 $ kubectl scale --replicas=$REPLICAS deployment application
 deployment "application" scaled

缺点是所有吊舱在新吊舱准备就绪之前就被杀死。 因此,我希望获得滚动更新。

一种解决方案是删除语义标记名称并使用sth。 application:v123 但是我希望保持脚本简单,并保留语义名称。 有什么办法吗?

...

编辑/更新...这是我的deployment.yaml配置如下所示:

apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
   name: nginx-deployment
 spec:
   replicas: 3
   template:
     metadata:
       labels:
         app: application
     spec:
       containers:
       - name: application
         image: application:latest
         imagePullPolicy: Always

它基本上始终保持不变,但是相关的容器映像在后台更新。

...

干杯

抱歉,可能我误解了这个问题,但是为什么不使用

kubectl适用-f

(参考这里

然后,您可以决定部署设置的速度

  • maxSurge
  • maxUnavailable

在您的部署文件中。 (参考这里

似乎使用一个语义标记是不可能的。 这是我开始使用两个或多个标签的方法。

1)了解我们当前部署的内容:

 DEPLOYED_IMAGE=$(kubectl get deployment/nginx-deployment -o jsonpath="{.spec.template.spec.containers[0].image}")

2)查找未使用的标签:

if [[ "$DEPLOYED_IMAGE" =~ :green$ ]]; then 
   IMAGE="application:latest-blue"
else 
   IMAGE="application:latest-green"
fi

3)使用新标签构建图像:

docker build -t $IMAGE .
docker push $IMAGE

4)部署

kubectl set image deployment/nginx-deployment application=$IMAGE

5)等到部署完成

kubectl rollout status deployment nginx-deployment -w

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM