[英]Kubernetes deployment rolling update with semantic container names
我想使用Kubernetes 部署并使用语义标记名称引用容器映像。 例如application:latest
, application:testing
, application: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
它基本上始终保持不变,但是相关的容器映像在后台更新。
...
干杯
似乎使用一个语义标记是不可能的。 这是我开始使用两个或多个标签的方法。
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.