kubernetes не применяет новое обновление службы из докера - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть приложение JS для узла, которое я развертываю в kubernetes.

Я внес изменения в приложение узла JS и переустанавливаю приложение на K8s.

Однако я заметил, что развертывание не завершено.

Я проверил концентратор док-станции, и да, последний образ развертывается. Это мой файл service.yaml ниже

apiVersion: v1
kind: Service
metadata:
  name: fourthapp
spec:
  type: LoadBalancer #Exposes the service as a node port
  ports:
  - port: 3000
    protocol: TCP
    targetPort: 3000
  selector:
    app: webapp

и это мой файл deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: fourthapp
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: index.docker.io/leexha/nodejsapp:latest
        ports:
        - containerPort: 3000
        resources:
          requests: 
            memory: 500Mi
            cpu: 0.5
          limits:
            memory: 500Mi
            cpu: 0.5
        imagePullPolicy: Always

когда я запускаю service.yaml, он читает

C:\Users\adrlee\Desktop\oracle\Web_projects>kubectl apply -f service.yml
service "fourthapp" unchanged

Что-то я делаю не так?

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Kubernetes не будет обновлять запущенные модули, если спецификация модуля не изменена. Если вы хотите форсировать развертывание, вы можете запустить после команды apply:

kubectl patch deployment fourthapp -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"

Он добавит / обновит специальную аннотацию date в шаблоне модуля, а Kubernetes обновит запущенные модули.

0 голосов
/ 05 сентября 2018

Если я понял вопрос, вы должны вместо этого обновить Deployment . Сервис - это всего лишь LB, который отправляет трафик между вашими модулями.

Сначала вы должны добавить imagePullPolicy: Always к развертыванию, чтобы заставить k8s загрузить самый новый образ.

Если вы хотите обновить развертывание , вы можете запустить

kubectl apply -f deploy.yml

или выполнение скользящего обновления

0 голосов
/ 05 сентября 2018

Если вы не присваиваете каждой сборке своего образа отдельное имя, трудно заставить Kubernetes перезапустить Deployment при изменении базового образа: он не может знать, что теперь означает «последний» тег в Docker Hub. что-то другое. (imagePullPolicy: Always по крайней мере заставит его получить новый образ, если он все равно перезапустится.) Когда вы запускаете kubectl apply, он смотрит на развертывание, которое вы загружаете, видит, что оно соответствует тому, что уже запущено, и выполняет нет ничего.

Рекомендуется не использовать тег «последний» и давать какой-то уникальный идентификатор (метка времени, идентификатор фиксации управления исходным кодом, ...). Затем вы можете обновить идентификатор изображения в спецификации модуля, kubectl apply увидит, что что-то не так, и Kubernetes выполнит для вас непрерывное обновление запущенных модулей. Это также имеет то преимущество, что если сборка плохая, вы можете легко вернуться назад, вернув тег изображения обратно к предыдущей сборке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...