我已经在Rancher上创建了工作负载。此工作负载是由gitlab-ci项目注册表中托管的映像创建的。
我想强制rancher下载该映像的新版本并升级工作负载。
我想从.gitlab-ci.yml脚本执行此操作。如何使用Rancher 版本2 ?在Rancher 1.6中,我使用了以下脚本:
deploy:
stage: deploy
image: cdrx/rancher-gitlab-deploy
script:
- upgrade --stack mystack --service myservice --no-start-before-stopping
答案 0 :(得分:2)
在牧场主2中,大部分工作负载管理都是通过其api或CLI(kubectl)委派给Kubernetes的。
您可以修补部署以指定新的映像/版本,但是如果您使用的标签如:latest
会移动,则需要通过更改有关部署规范的方法来强制Kubernetes重新部署Pod。
执行此操作的一种常见方法是更改/添加环境变量,这会强制重新部署。
在Gitlab中,在gitlab项目或组中设置两个变量,以将身份验证信息传递到构建中。
kubectl patch
将在部署的容器上更新或添加一个名为FORCE_RESTART_AT
的环境变量,由于Gitlab的管道ID发生更改,因此每次设置后都会强制重新部署。
您将需要指定名称空间,部署名称,容器名称和映像。如果图像标签正在更改,则无需提供环境变量。如果您使用的是:latest
,请确保已设置容器的imagePullPolicy: Always
,如果Kubernetes使用:latest
检测到图像,则这是默认设置。
图像diemscott/rancher-cli-k8s
是源自rancher/cli
的简单图像,其中还包含kubectl
。
RANCHER_SERVER_URL=https://rancher.example.com
RANCHER_API_TOKEN="token-sd5kk:d27nrsstx6z5blxgkmspqv94tzkptnrpj7rkcrt7vtxt28tvw4djxp"
deploy:
stage: deploy
image: diemscott/rancher-cli-k8s:v2.0.2
script:
- rancher login "$RANCHER_SERVER_URL" -t "$RANCHER_API_TOKEN"
- rancher kubectl --namespace=default patch deployment nginx --type=strategic -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image": "nginx","env":[{"name":"FORCE_RESTART_AT","value":"$CI_PIPELINE_ID"}]}]}}}}'
答案 1 :(得分:1)
@nidomo,只需使用API发出一个pause
然后发出一个resume
,这将导致工作负载经历升级,繁荣,获取和部署的容器的最新版本。