Последовательное обновление развертывания Kubernetes с семантическими именами контейнеров

Я хочу использовать развертывание Kubernetes и эталонные образы контейнеров с семантические имена тегов. Например. application:latest, application:testing, application:production.

Настройка этого проста, и с imagePullPolicy: Always в моей спецификации контейнера я также могу быстро выпускать новые версии с чем-то вроде этого:

 $ REPLICAS=$(kubectl get deployment application --template="{{.spec.replicas}}")
 $ kubectl scale --replicas=0 deployment application
 deployment "application" scaled
 $ kubectl scale --replicas=$REPLICAS deployment application
 deployment "application" scaled

Недостаток в том, что все поды убиваются до того, как будут готовы новые. Поэтому я стремлюсь к постоянным обновлениям.

Одним из решений было бы отказаться от имен семантических тегов и использовать sth. как application:v123. Но я хотел бы, чтобы мои сценарии были простыми и сохраняли семантические имена. Есть ли способ сделать это?

...

Изменить/обновить... вот как будет выглядеть моя конфигурация deployment.yaml:

apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
   name: nginx-deployment
 spec:
   replicas: 3
   template:
     metadata:
       labels:
         app: application
     spec:
       containers:
       - name: application
         image: application:latest
         imagePullPolicy: Always

В основном он будет оставаться неизменным все время, но связанное изображение контейнера будет обновляться в фоновом режиме.

...

Ваше здоровье


person pagid    schedule 26.10.2016    source источник


Ответы (2)


Извините, возможно, я неправильно понял вопрос, но почему бы вам не использовать

kubectl применить -f

(См. здесь)

Затем вы можете определить скорость настройки развертывания.

  • maxSurge
  • максНедоступно

в вашем файле развертывания. (ссылка здесь)

person Michele Orsi    schedule 27.10.2016
comment
из-за того, что фактическая конфигурация развертывания не изменилась бы, kubectl apply -f не находит различий и, следовательно, не запускает непрерывное обновление. - person pagid; 27.10.2016

Кажется, что это невозможно с использованием одного семантического тега. Вот что я начал использовать с двумя или более тегами.

1) Изобразите, что в настоящее время развернуто:

 DEPLOYED_IMAGE=$(kubectl get deployment/nginx-deployment -o jsonpath="{.spec.template.spec.containers[0].image}")

2) Найдите неиспользуемый тег:

if [[ "$DEPLOYED_IMAGE" =~ :green$ ]]; then 
   IMAGE="application:latest-blue"
else 
   IMAGE="application:latest-green"
fi

3) Создайте образ с новым тегом:

docker build -t $IMAGE .
docker push $IMAGE

4) Развернуть

kubectl set image deployment/nginx-deployment application=$IMAGE

5) Дождитесь завершения развертывания

kubectl rollout status deployment nginx-deployment -w
person pagid    schedule 13.01.2017