0

我想使用 Kubernetes部署并引用具有语义标签名称的容器映像。例如application:latest, application:testing, application:production.

设置它是直截了当的,并且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

缺点是所有 pod 都在新的 pod 准备好之前被杀死。因此,我希望进行滚动更新。

一种解决方案是删除语义标签名称并使用某物。喜欢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

它基本上会一直保持不变,但相关的容器图像会在后台更新。

...

干杯

4

2 回答 2

0

对不起,可能我误解了这个问题,但你为什么不使用

kubectl 应用 -f

(参考这里

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

  • 最大浪涌
  • 最大不可用

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

于 2016-10-27T12:12:56.520 回答
0

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

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
于 2017-01-13T08:40:26.397 回答