kubernetes imagePullPolicy: всегда не извлекает изображение автоматически - PullRequest
0 голосов
/ 09 июля 2020

Я хочу, чтобы каждый раз, когда я создаю новый образ с тегом latest, Kubernetes автоматически извлекает новый образ. Я добавил imagePullPolicy: Always в pod spe c, но он не обновляет старый образ новым.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node
  namespace: dev
  labels:
    app: my-node-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-node-app
  template:
    metadata:
      labels:
        app: my-node-app
    spec:
      hostNetwork: true
      securityContext:
        fsGroup: 1000
      containers:
      - name: node
        imagePullPolicy: Always
        image: gcr.io/my-repo/my-node-app:latest
        ports:
        - containerPort: 3000
        envFrom:
          - configMapRef:
              name: my-configmap
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 2
            memory: 8Gi
      restartPolicy: Always

Ответы [ 3 ]

4 голосов
/ 09 июля 2020

imagePullPolicy учитывается Kubernetes только при создании или перезапуске POD. Это НЕ учитывается во время работы POD, что означает, что он НЕ проверяет наличие обновлений образа в любое время, пока работает POD.

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

Если вам нужна желаемая функциональность, вам придется реализовать собственное решение. Вы можете сделать это, реализовав сопроводительный файл, который регулярно проверяет репозиторий Docker на предмет изменений данного тега. Когда он обнаруживает такое изменение, он может вызвать перезапуск POD, который затем заставит изображение быть повторно вытянутым.

Перезапуск POD может быть запущен либо простым выходом из сопутствующего элемента, либо путем используя Kubernetes API внутри коляски. Последнее решение, однако, усложняется, поскольку вам также потребуются учетные записи служб и правила RBA C, чтобы получить надлежащие разрешения внутри контейнера sidecar. Это также имеет последствия для безопасности, поэтому вам придется предоставить расширенные разрешения для всего POD.

1 голос
/ 09 июля 2020

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

Я бы рекомендовал использовать помеченное изображение с semvar . Поскольку вы используете deployment, вы можете выполнить скользящее обновление модуля, которое будет извлекать новое изображение и плавно развертывать изменения во всех модулях реплик, не вызывая простоев.

Скажем сначала образ gcr.io/my-repo/my-node-app:v1, и вы хотите обновить его до v2

kubectl set image deployment/node nginx=gcr.io/my-repo/my-node-app:v2 --record

Проверить историю развертывания

kubectl rollout history deployment.v1.apps/node

В случае возникновения каких-либо проблем откат к предыдущей версии

kubectl rollout undo deployment.v1.apps/node

Также, если вы хотите быть более продвинутым, вы можете сделать GitOps, используя FluxCD , который поддерживает автоматический запуск развертывания всякий раз, когда новая версия изображения помещается в контейнер. реестр.

0 голосов
/ 09 июля 2020

Kubernetes будет извлекать изображение только при создании Pod, что означает, что он не проверяет наличие обновлений образа, пока POD находится в рабочем состоянии. Я бы порекомендовал использовать Semanti c Versioning для тега изображения и использовать конвейер CI / CD, который создает, теги и pu sh в вашем реестре. Затем используйте инструмент CD, такой как keel , чтобы воссоздать ваши стручки на последнем этапе конвейера.

...