На ранчере 2 большая часть управления рабочими нагрузками делегируется Kubernetes через его API или CLI (kubectl).
Вы можете установить исправление для развертывания, чтобы указать новое изображение / версию, но если вы используете тег типа :latest
, который перемещается, вам нужно будет заставить Kubernetes повторно развернуть модули, изменив что-то в спецификации развертывания.
Один из распространенных способов сделать это - изменить / добавить переменную среды, которая вызывает повторное развертывание.
В Gitlab задайте две переменные в вашем проекте или группе gitlab для передачи аутентификационной информации в сборку.
kubectl patch
обновит или добавит переменную среды с именем FORCE_RESTART_AT
к контейнеру вашего развертывания, которая будет вызывать повторное развертывание каждый раз, когда оно установлено, поскольку изменяется идентификатор конвейера Gitlab.
Вам нужно будет указать пространство имен, имя вашего развертывания, имя контейнера и изображение. Если тег изображения изменяется, нет необходимости указывать переменную окружения. Если вы используете :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"}]}]}}}}'