Подтвердить что ты не робот

В чем разница между модулем и развертыванием?

Я создавал контейнеры с type:deployment, но я вижу, что в какой-то документации используется type:pod, более конкретно документация для контейнеров с несколькими контейнерами:

apiVersion: v1
kind: Pod
metadata:
  name: ""
  labels:
    name: ""
  namespace: ""
  annotations: []
  generateName: ""
spec:
  ? "// See 'The spec schema' for details."
  : ~

Но для создания контейнеров я могу просто использовать тип развертывания:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ""
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ""
    spec:
      containers:
        etc

Я заметил, что в документации к модулю написано:

Команда create может использоваться для создания контейнера напрямую или может создать контейнер или контейнеры через развертывание. Настоятельно рекомендуется что вы используете развертывание для создания своих контейнеров. Он следит за неудачами и запускает новые контейнеры, как требуется для поддержания указанных номер. Если вы не хотите, чтобы развертывание контролировало ваш модуль (например, ваш pod пишет непостоянные данные, которые не выживут при перезагрузке, или ваш контейнер рассчитан на очень короткое время), вы можете создать стручок непосредственно с командой create.

Примечание. Мы рекомендуем использовать развертывание для создания контейнеров. Вы должны использовать инструкции ниже, только если вы не хотите создавать развертывание.

Но это ставит вопрос о том, для чего kind:pod полезно? Можете ли вы как-то ссылаться на контейнеры в развертывании? Я не видел пути. Похоже на то, что вы получаете с контейнерами - это некоторые дополнительные метаданные, но ни один из параметров развертывания, таких как replica или политика перезапуска. Какая польза от стручки, которая не сохраняет данные, выживает перезапуск? Я думаю, что смогу создать контейнер с несколькими контейнерами с развертыванием.

4b9b3361

Ответ 1

Оба Pod и Deployment являются полнофункциональными объектами в API Kubernetes. Развертывание управляет созданием Pods с помощью ReplicaSets. Что сводится к тому, что Deployment создаст Pods со спецификацией, взятой из шаблона. Маловероятно, что вам когда-либо понадобится создавать Pods непосредственно для производственного прецедента.

Ответ 2

Ответ Радека очень хороший, но я хотел бы поделиться с моим опытом, вы почти никогда не будете использовать объект с добрым стручком, потому что это не имеет никакого смысла на практике.

Поскольку вам нужен объект развертывания - или другие объекты API Kubernetes как контроллер репликации или replicaset - что нужно держать реплики (стручки) живой (такого рода точки с помощью kubernetes).

Что вы будете использовать на практике для типичного приложения:

  1. Объект развертывания (где вы будете указывать свой контейнер/контейнеры приложений), в котором будет размещаться ваш контейнер приложений с некоторыми другими спецификациями.

  2. Сервисный объект (который похож на группирующий объект и дает ему так называемый виртуальный IP-адрес (кластерный IP-адрес) для pods с определенной меткой - и эти pods в основном являются контейнерами приложений, которые были развернуты с помощью предыдущего объекта развертывания).

У вас должен быть сервисный объект, потому что pods из объекта развертывания могут быть уничтожены, масштабированы вверх и вниз, и вы не можете полагаться на их IP-адреса, потому что они не будут постоянными.

Таким образом, вам нужен объект, такой как сервис, который дает этим pods стабильный IP.

Просто хотел дать вам некоторый контекст вокруг pods, чтобы вы знали, как все работает вместе.

Надеюсь, что кое-что прояснит для вас, не так давно я был на вашем месте :)

Ответ 3

У Kubernetes есть три типа объектов, о которых вы должны знать:

  • Pods - запускает один или несколько тесно связанных контейнеров
  • Сервисы - настройка сети в кластере Kubernetes
  • Развертывание - поддерживает набор идентичных модулей, гарантируя, что они имеют правильную конфигурацию и что правильное количество их существует.

Бобы:

  • Запускает один набор контейнеров
  • Хорошо для одноразовых разработок
  • Редко используется непосредственно в производстве

Развертывание:

  • Запускает набор одинаковых контейнеров
  • Отслеживает состояние каждого модуля, обновляя при необходимости
  • Хорошо для разработчиков
  • Хорошо для производства

И я согласился бы с другими ответами, забыл о модулях и просто использовал развертывание. Зачем? Посмотрите на второй пункт маркера, он контролирует состояние каждого модуля, обновляя при необходимости.

Таким образом, вместо того, чтобы бороться с сообщениями об ошибках, такими как этот:

Запрещено: обновления модуля не могут изменять поля, кроме spec.containers[*].image

Так что просто рефакторинг или полностью воссоздать ваш Pod в Deployment, который создает модуль, чтобы делать то, что вам нужно сделать. С помощью Deployment вы можете изменить любую конфигурацию, какую захотите, и вам не нужно беспокоиться о том, чтобы увидеть это сообщение об ошибке.

Ответ 4

Pod - это экземпляр контейнера.

enter image description here

Это вывод replicas: 3

Подумайте об одном deployment может иметь много запущенных экземпляров (реплика).

//deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: tomcat-deployment222
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 3
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:9.0
        ports:
        - containerPort: 8080

Ответ 5

Старайтесь избегать Pods и внедрите Deployments вместо этого для управления контейнерами, поскольку объекты типа Pod не будут перепланированы (или самоисцелены) в случае сбоя узла или прекращения работы pod.

Развертывание, как правило, предпочтительнее, поскольку оно определяет ReplicaSet, чтобы гарантировать, что желаемое количество модулей всегда доступно, и определяет стратегию замены модулей, такую как RollingUpdate.

Ответ 6

В Кубернетесе Бобы - самые маленькие развертываемые единицы. Каждый раз, когда мы создаем объект kubernetes, такой как Deployments, replica-sets, statefulsets, daemonsets, он создает pod.

Как уже упоминалось выше, при развертывании создаются модули на основе желаемого состояния, указанного в вашем объекте развертывания. Например, вам нужно 5 реплик приложения, вы упомянули replicas: 5 в манифесте развертывания. Теперь контроллер развертывания отвечает за создание 5 идентичных реплик (не менее, не более) данного приложения со всеми метаданными, такими как политика RBAC, сетевая политика, метки, аннотации, проверка работоспособности, квоты ресурсов, заражение/допуски и другие, и связывание с каждым модулем. это создает.

В некоторых случаях вы хотите создать модуль pod, например, если вы запускаете тестовую коляску, где вам не нужно вечно запускать приложение, вам не нужно несколько реплик, и вы запускаете приложение, когда хотите выполнить в нем чехол под подходит. Например, helm test, который является определением модуля, в котором указан контейнер с заданной командой для запуска.

Ответ 7

Pod представляет собой коллекцию контейнеров и базового объекта Kuberntes. Все контейнеры контейнера находятся в одном узле.

  • Не подходит для производства
  • Нет обновлений

Развертывание является своего рода контроллером в Kubernetes.

Controllers use a Pod Template that you provide to create the Pods for which it is responsible.

Развертывание создает ReplicaSet, который, в свою очередь, гарантирует, что требуемые реплики всегда совпадают с CurrentReplicas.

Преимущества:

  • Вы можете развернуть и откатить изменения, используя развертывание
  • Контролирует состояние каждого модуля
  • Лучше всего подходит для производства
  • Поддерживает непрерывные обновления