从CLI升级Rancher 2工作负载

时间:2018-07-02 15:10:57

标签: kubernetes gitlab gitlab-ci kubectl rancher

我已经在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

2 个答案:

答案 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,这将导致工作负载经历升级,繁荣,获取和部署的容器的最新版本。