从 CLI 升级 Rancher 2 工作负载

Upgrade Rancher 2 workload from CLI

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

在 rancher 2 中,大部分工作负载管理通过其 api 或 CLI (kubectl) 委托给 Kubernetes。

您可以修补部署以指定一个新的 image/version,但是如果您使用的是像 :latest 这样移动的标签,您将需要强制 Kubernetes 重新部署 pods通过更改有关部署规范的内容。

执行此操作的一种常见方法是 change/add 一个环境变量,这会强制重新部署。

在 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"}]}]}}}}'