从CLI升级Rancher 2工作负载

问题描述 投票:2回答:2

我在Rancher上创建了一个工作负载。此工作负载是从托管在gitlab-ci项目注册表上的映像创建的。

我想强制牧场主下载此图像的新版本并升级工作负载。

我想从.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
kubernetes gitlab gitlab-ci kubectl rancher
2个回答
3
投票

在牧场主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
投票

@nidomo,只需使用API​​发布pause然后发布resume,它将导致工作负载经历升级,繁荣,最新版本的容器获取和部署。

© www.soinside.com 2019 - 2024. All rights reserved.