具有语义容器名称的 Kubernetes 部署滚动更新
Kubernetes deployment rolling update with semantic container names
我想使用 Kubernetes deployment 并引用带有语义标签名称的容器镜像。例如。 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
缺点是所有 pods 在新的准备好之前就被杀死了。因此,我希望获得滚动更新。
一个解决方案是删除语义标签名称并使用某物。喜欢 application:v123
。但我希望保持脚本简单并保留语义名称。有什么办法吗?
...
Edit/update ...这就是我的 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 apply -f
(参考 here)
然后您可以决定部署设置的速度
- 最大浪涌
- 最大不可用
在您的部署文件中。 (参考 here)
似乎使用一个语义标签是不可能的。这是我开始使用两个或更多标签的内容。
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
我想使用 Kubernetes deployment 并引用带有语义标签名称的容器镜像。例如。 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
缺点是所有 pods 在新的准备好之前就被杀死了。因此,我希望获得滚动更新。
一个解决方案是删除语义标签名称并使用某物。喜欢 application:v123
。但我希望保持脚本简单并保留语义名称。有什么办法吗?
...
Edit/update ...这就是我的 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 apply -f
(参考 here)
然后您可以决定部署设置的速度
- 最大浪涌
- 最大不可用
在您的部署文件中。 (参考 here)
似乎使用一个语义标签是不可能的。这是我开始使用两个或更多标签的内容。
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