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