2016-10-26 10 views
0

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

установка этой прямо вперед и с 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 

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

...

Приветствия

ответ

0

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

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 
0

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

kubectl применяются -f

(Ref here)

Затем вы можете решить Скорость вашей установки

  • maxSurge
  • maxUnavailable

в файле развертывания развертывания. (ref here)

+0

из-за того, что фактическая конфигурация развертывания не изменится, то 'kubectl применять -f' не находит никакой разницы, и поэтому он не запускается скользящее обновление – pagid

+0

вы абсолютно правы !!!! Прости –

Смежные вопросы