从 CLI 升级 Rancher 2 工作负载

nid*_*omo 4 gitlab gitlab-ci kubernetes rancher kubectl

我在 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
Run Code Online (Sandbox Code Playgroud)

Sco*_*son 5

在 rancher 2 中,大部分工作负载管理都通过 Kubernetes 的 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"}]}]}}}}'
Run Code Online (Sandbox Code Playgroud)

  • 似乎更改部署`kubectl patch部署nginx-test -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\": {\"日期\":\"`日期 +'%s'`\"}}}}}"` (3认同)