我确实有单荚部署,我的自定义docker映像如下:
containers:
- name: mycontainer
image: myimage:latest
在开发期间,我想推出新的最新版本,并使部署更新。 找不到如何做到这一点,没有显式定义标签/版本和增量它为每个构建,做
kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1
我确实有单荚部署,我的自定义docker映像如下:
containers:
- name: mycontainer
image: myimage:latest
在开发期间,我想推出新的最新版本,并使部署更新。 找不到如何做到这一点,没有显式定义标签/版本和增量它为每个构建,做
kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1
当前回答
k8s似乎希望我们为每次部署提供不同的图像标记。我的默认策略是让CI系统生成并推送docker映像,并将它们标记为构建号:xpmatteo/foobar:456。
对于本地开发,可以方便地使用脚本或makefile,如下所示:
# create a unique tag
VERSION:=$(shell date +%Y%m%d%H%M%S)
TAG=xpmatteo/foobar:$(VERSION)
deploy:
npm run-script build
docker build -t $(TAG) .
docker push $(TAG)
sed s%IMAGE_TAG_PLACEHOLDER%$(TAG)% foobar-deployment.yaml | kubectl apply -f - --record
sed命令将部署文档中的占位符替换为实际生成的图像标记。
其他回答
kubectl rollout restart deployment myapp
这是当前触发滚动更新并保留旧副本集的方式,用于kubectl rollout提供的其他操作(如回滚)。
另一个更适合调试但值得一提的选项是检查你的版本的修订历史:
$ kubectl rollout history deployment my-dep
deployment.apps/my-dep
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
要查看每个修订的详细信息,请运行:
kubectl rollout history deployment my-dep --revision=2
然后运行以下命令返回到之前的版本:
$kubectl rollout undo deployment my-dep --to-revision=2
然后再回到新的地方。 比如运行ctrl+z -> ctrl+y (:
(*) CHANGE-CAUSE是<none>,因为你应该像这里提到的——record标志一样运行更新:
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
(**)有一个关于弃用这个标志的讨论。
我们可以使用以下命令更新它:
Kubectl set image deployment/<<deploy -name>> -n=<<namespace>> <<container_name>>=<<your_dockerhub_username>>/<<image_name you want set now>>:<<tag_of_the_image_you_want>>
例如,
Kubectl设置镜像部署/my-deployment -n=sample-namespace my-container=alex/my-sample-image-from-dockerhub:1.1
地点:
kubectl set image deployment/my-deployment - we want to set the image of the deployment named my-deployment -n=sample-namespace - this deployment belongs to the namespace named as sample-namespace. If your deployment belongs to the default namespace, no need to mention this part in your command. my-container is the container name which was previously mentioned in the YAML file of your deployment configuration. alex/my-sample-image-from-dockerhub:1.1 is the new image which you want to set for the deployment and run the container for. Here, alex is the username of the dockerhub image(if applicable), my-sample-image-from-dockerhub:1.1 the image and tag you want to use.
我使用Gitlab-CI构建映像,然后将其直接部署到GCK。如果使用一个巧妙的小技巧来实现滚动更新,而不改变容器的任何实际设置,即将标签更改为当前的commit-short-sha。
我的命令如下所示:
kubectl patch deployment my-deployment -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"build\":\"$CI_COMMIT_SHORT_SHA\"}}}}}}"
在这里,您可以使用标签的任何名称和任何值,只要它随每次构建而更改。
玩得开心!
k8s似乎希望我们为每次部署提供不同的图像标记。我的默认策略是让CI系统生成并推送docker映像,并将它们标记为构建号:xpmatteo/foobar:456。
对于本地开发,可以方便地使用脚本或makefile,如下所示:
# create a unique tag
VERSION:=$(shell date +%Y%m%d%H%M%S)
TAG=xpmatteo/foobar:$(VERSION)
deploy:
npm run-script build
docker build -t $(TAG) .
docker push $(TAG)
sed s%IMAGE_TAG_PLACEHOLDER%$(TAG)% foobar-deployment.yaml | kubectl apply -f - --record
sed命令将部署文档中的占位符替换为实际生成的图像标记。