#kubernetes
#kubernetes
Вопрос:
Теперь у нас есть запланированные задания в Kubernetes 1.4 — возможно ли с помощью этого выполнить обновление контейнера (новое изображение) для кластера? Основная идея заключается в том, что мне нужен простой способ автоматического развертывания обновлений через каждый установленный интервал.
«Традиционный» способ выполнения обновлений заключается в том, чтобы CI нажимал веб-хук на главном сервере Kube, но я хочу избежать публичного доступа к сервисам и предпочел бы просто периодически проверять наличие обновлений.
Ответ №1:
Я думаю, что в целом безопасно предоставлять доступ к вашему главному серверу и отправлять на него обновления из вашей системы CI, но вы определенно можете настроить запланированное задание для обновления развертывания до последней версии. В Kubernetes есть концепция, называемая учетными записями служб для аутентификации с помощью API из кластера, и Они хорошо интегрированы kubectl
(т. Е. Он будет автоматически использовать данные учетной записи службы для авторизации). Кластер также предоставляет kubernetes
сервис для главного API. Таким образом, вы можете развернуть контейнер со kubectl
сценарием и использовать его для периодического обновления развертывания.
Вам понадобится механизм, чтобы выяснить, какая последняя версия. Возможно, вы могли бы сохранить информацию о последней версии в текстовом файле или что-то, записанное в GCS или S3, и извлечь этот файл, чтобы получить последнюю версию.
Допустим, у вас есть развертывание.yaml, подобный этому:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp
spec:
template:
spec:
containers:
- name: myapp
image: myapp:<latest-ver>
И затем вы можете сгенерировать и обновить развертывание в скрипте следующим образом:
#!/bin/sh
wget -o VERSION http://url/to/VERSION
sed "s/<latest-ver>/$(cat VERSION)/" deploy.yaml | kubectl apply -f -
И встроите это в образ и запустите его как запланированное задание.