Я создавал модули с, 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 можно использовать для непосредственного создания модуля, а также для создания модуля или модуля через развертывание. Настоятельно рекомендуется использовать Deployment для создания ваших модулей. Он следит за неисправными модулями и запускает новые, если требуется поддерживать указанное количество. Если вы не хотите, чтобы Deployment отслеживал ваш модуль (например, ваш модуль записывает непостоянные данные, которые не сохранятся после перезапуска, или ваш модуль должен быть очень недолговечным), вы можете создать модуль напрямую с помощью команда создания.
Примечание. Мы рекомендуем использовать Deployment для создания модулей. Вы должны использовать приведенные ниже инструкции, только если вы не хотите создавать развертывание.
Но это поднимает вопрос о том, что kind:pod
хорошо? Можете ли вы как-то ссылаться на стручки в развертывании? Я не видел пути. Похоже, что вы получаете с модулями дополнительные метаданные, но ни один из параметров развертывания, таких как replica
или политика перезапуска. Что хорошего в модуле, который не сохраняет данные, переживает перезапуск? Я думаю, что смогу создать многоконтейнерный модуль с развертыванием.
источник
Ответ Радека очень хороший, но я хотел бы поделиться с моим опытом, вы почти никогда не будете использовать объект с добрым стручком , потому что это не имеет никакого смысла на практике.
Поскольку вам нужно развертывание объект - или другие объекты API Kubernetes вроде контроллера репликации или replicaset - что нужно держать на реплики (стручки) живы (это своего рода точку с помощью kubernetes).
Что вы будете использовать на практике для типичного приложения:
Объект развертывания (где вы будете указывать контейнер / контейнеры приложений), в котором будет размещаться контейнер вашего приложения с некоторыми другими спецификациями.
Сервисный объект (который похож на группирующий объект и дает ему так называемый виртуальный IP-адрес (кластерный IP-адрес) для объекта
pods
с определенной меткой - иpods
это в основном контейнеры приложения, которые вы развернули с помощью предыдущего объекта развертывания ).У вас должен быть сервисный объект, потому что
pods
исходный объект развертывания может быть уничтожен, масштабирован вверх и вниз, и вы не можете полагаться на их IP-адреса, потому что они не будут постоянными.Таким образом, вам нужен объект, такой как сервис , который дает этим
pods
стабильный IP.Просто хотел дать вам некоторый контекст вокруг
pods
, чтобы вы знали, как все работает вместе.Надеюсь, что кое-что прояснит для вас, не так давно я был на вашем месте :)
источник
kind: Pod
в качестве примера приводятся несколько кубернетских документов ? Например, как использовать секреты , как окр вары: kubernetes.io/docs/concepts/configuration/secret/...helm test
), когда вам не нужно вечно запускать приложение, и нам не нужны множественные реплики, в этом случае pod подходит.У Kubernetes есть три типа объектов, о которых вы должны знать:
Бобы:
Развертывание:
И я согласился бы с другими ответами, забыл о модулях и просто использовал развертывание. Зачем? Посмотрите на второй пункт маркера, он отслеживает состояние каждого модуля, обновляя при необходимости.
Таким образом, вместо того, чтобы бороться с сообщениями об ошибках, такими как этот:
Так что просто рефакторинг или полностью воссоздать ваш Pod в Deployment, который создает модуль, чтобы делать то, что вам нужно сделать. С помощью Deployment вы можете изменить любую конфигурацию, какую захотите, и вам не нужно беспокоиться о том, чтобы увидеть это сообщение об ошибке.
источник
Pod - это экземпляр контейнера.
Это выход
replicas: 3
Подумайте,
deployment
может быть много запущенных экземпляров (реплика).источник
replicas: 3
ссылка на верхнюю часть изображения. Это означает «эй, когда вы запустите этот процесс, создайте 3 виртуальных / реальных компьютера - экземпляры». Это как «развертывание» - это дом, а «стручки» - это люди. Один дом и три человека в нем, которые делают работу. Что вы пытаетесь сделать конкретно для этого?Pod представляет собой коллекцию контейнеров и базового объекта Kuberntes. Все контейнеры контейнера находятся в одном узле.
Развертывание является своего рода контроллером в Kubernetes.
Controllers use a Pod Template that you provide to create the Pods for which it is responsible.
Развертывание создает ReplicaSet, который, в свою очередь, гарантирует, что CurrentReplicas всегда совпадает с требуемымиReplicas.
Преимущества:
источник
Я хочу добавить некоторую информацию из Kubernetes в книгу действий , чтобы вы могли видеть всю картину и связь между ресурсами Kubernetes, такими как Pod, Deployment и ReplicationController (ReplicaSet)
являются основным развертываемым подразделением в Kubernetes. Но в реальных случаях использования вы хотите, чтобы ваши развертывания работали автоматически и работали без какого-либо ручного вмешательства. Для этого рекомендуется использовать Deployment , которое под капотом создает ReplicaSet .
(ReplicaSet расширяет старый объект с именем ReplicationController, который точно такой же, но без истории изменений.)
ReplicaSet постоянно следит за списком запущенных модулей и следит за тем, чтобы текущее количество модулей, соответствующих определенной спецификации, всегда совпадало с требуемым числом.
это ресурс более высокого уровня, предназначенный для развертывания приложений и их декларативного обновления.
Когда вы создаете развертывание , под ним создается ресурс ReplicaSet (со временем их становится больше). ReplicaSets также позволяет копировать и управлять модулями. При использовании развертывания фактические модули создаются и управляются наборами реплик развертывания , а не непосредственно развертыванием.
Давайте подумаем о том, что произошло. Изменяя шаблон модуля в своем ресурсе развертывания, вы обновили свое приложение до более новой версии, изменив одно поле!
Наконец, откатите развертывание либо до предыдущей, либо до любой более ранней версии, так легко с ресурсом развертывания.
Эти изображения также из книги Kubernetes In Action .
источник
Старайтесь избегать Pods и внедрите Deployments вместо этого для управления контейнерами, поскольку объекты типа Pod не будут перепланированы (или самоисцелены) в случае сбоя узла или прекращения работы pod.
Развертывание, как правило, предпочтительнее, поскольку оно определяет ReplicaSet, чтобы гарантировать, что желаемое количество модулей всегда доступно, и определяет стратегию замены модулей, такую как RollingUpdate.
источник
В Кубернетесе Бобы - самые маленькие развертываемые единицы. Каждый раз, когда мы создаем объект kubernetes, такой как Deployments, replica-sets, statefulsets, daemonsets, он создает pod.
Как упомянуто выше, при развертывании создаются модули на основе желаемого состояния, указанного в вашем объекте развертывания. Например, вам нужно 5 реплик приложения, которые вы упомянули
replicas: 5
в манифесте развертывания. Теперь контроллер развертывания отвечает за создание 5 идентичных реплик (не менее, не более) данного приложения со всеми метаданными, такими как политика RBAC, сетевая политика, метки, аннотации, проверка работоспособности, квоты ресурсов, заражение / допуски и другие, и связывание с каждым модулем. это создает.В некоторых случаях вы хотите создать модуль pod, например, если вы запускаете тестовую коляску, в которой вам не нужно вечно запускать приложение, вам не нужно несколько реплик, и вы запускаете приложение, когда хотите выполнить в нем Корпус подходит. Например
helm test
, это определение модуля, которое указывает контейнер с заданной командой для запуска.источник