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)
在 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)
| 归档时间: |
|
| 查看次数: |
3065 次 |
| 最近记录: |