2

Я следил за несколькими гидами, и у меня есть CI, настроенный с помощью Google Container Engine и Google Container Registry. Проблема заключается в том, что мои обновления не применяются к развертыванию.Как обновить развертывание Kubernetes в Google Container Engine?

Так что это мой deployment.yml, который содержит службу Kubernetes и развертывание:

apiVersion: v1 
kind: Service 
metadata: 
    name: my_app 
    labels: 
    app: my_app 
spec: 
    type: LoadBalancer 
    ports: 
    - port: 80 
     targetPort: 3000 
    selector: 
    app: my_app 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: my_app 
spec: 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: my_app 
    spec: 
     containers: 
     - name: node 
      image: gcr.io/me/my_app:latest 
      ports: 
      - containerPort: 3000 
      resources: 
      requests: 
       memory: 100 

     - name: phantom 
      image: docker.io/wernight/phantomjs:2.1.1 
      command: ["phantomjs", "--webdriver=8910", "--web-security=no", "--load-images=false", "--local-to-remote-url-access=yes"] 
      ports: 
      - containerPort: 8910 
      resources: 
      requests: 
       memory: 1000 

В рамках моего процесса CI я запускаю скрипт, который обновляет изображение в Google Cloud реестре, затем запускает kubectl apply -f /deploy/deployment.yml. Обе задачи добиться успеха, и я уведомила развертывание и обслуживание было обновлено:

2016-09-28T14:37:26.375Zgoogleclouddeploymentservice "my_app" configured 
2016-09-28T14:37:27.370Zgoogleclouddeploymentdeployment "my_app" configured 

Поскольку я включил :latest тег на мой образ, я думал, что изображение будет downloaded each time развертывание обновляется. В соответствии с docs a RollingUpdate также должна быть стратегией по умолчанию.

Однако, когда я запускаю свой CI-скрипт, который обновляет развертывание - обновленное изображение не загружается и изменения не применяются. Что мне не хватает? Я предполагаю, что, поскольку ничего не меняется в deployment.yml, обновление не применяется. Как я могу получить Kubernetes для загрузки моего обновленного изображения и использовать RollingUpdate для его развертывания?

+0

Быстрый бит дополнительной информации: я знаю, что его лучшая практика включает версию в конце имени изображения, но с нашей настройкой, которая потребует изменений в нескольких файлах и будет болью. Поэтому мы рады сохранить нашу ветку git как источник истины для того, что в настоящее время развернуто, и просто откат ветки, если нам нужно вернуться к версии. –

ответ

2

Вы можете принудительно обновить развертывание, изменив любое поле, например метку. Так что в моем случае, я просто добавил это в конце моего CI сценария:

kubectl patch deployment fb-video-extraction -p \ 
    "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}" 
0

Мы недавно опубликовали technical overview о том, как подход, который мы называем GitOps подход может быть реализован в GKE.

Все, что вам нужно сделать, это сконфигурировать GCR-конструктор для получения изменений кода из Github и запускать сборки, затем установить агент Weave Cloud в свой кластер и подключиться к репо, где хранятся файлы YAML, и агент будет принимать забота об обновлении репо с новыми изображениями и внесение изменений в кластер.

Для более детального обзора, смотрите также:


Отказ от ответственности: Я вкладчик Kubernetes и сотрудник Weaveworks. Мы строим инструменты с открытым исходным кодом и коммерческие инструменты, которые помогают людям быстрее добраться до производства Кубернете.

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