#kubernetes #kubernetes-pod
#kubernetes #kubernetes-pod
Вопрос:
Я работаю с контейнерами, которые содержат REST API на основе HTTP. Каждый контейнер содержит одну службу.
На этой странице документации говорится, что каждый модуль имеет уникальный IP-адрес, из чего я делаю вывод, что к службе внутри каждого контейнера можно получить доступ по этому IP-адресу, но с определенным портом. Также указано, что pod связан с томом хранилища таким образом, что все контейнеры имеют к нему доступ. Здесь возникает мой первый вопрос: выбирают ли контейнеры внутри одного и того же модуля в одной и той же физической памяти и при запуске?
Чтение документации о модулях напомнило мне о том, как я заставлял несколько сервисов взаимодействовать друг с другом на своем ноутбуке. Я открыл их все на своем ноутбуке, чтобы у них был один и тот же IP-адрес (localhost), и я мог запросить одну из служб, указав порт, который она прослушивает. Итак, в моем мозгу я идентифицировал pod с ноутбуком / компьютером. Мой второй вопрос: правильна ли эта идентификация или вводит в заблуждение?
Когда я читаю дальше документацию, я нахожу, что:
Узел — это рабочая машина … и может быть… физическая машина
и эти модули работают на узлах. Здесь я в замешательстве. Если узел является рабочей машиной, поэтому вычислительная машина похожа на мой ноутбук, тогда у нее есть уникальный IP-адрес. И это несовместимо с тем фактом, что узлы запускают модули и что каждый модуль имеет свой уникальный IP-адрес. Я предполагаю, что если узел является машиной, то у него есть IP-адрес X, и все «вещи» внутри этой машины также будут иметь тот же IP-адрес X, включая модули. Итак, я снова задаю свой второй вопрос: является ли pod вычислительной машиной?
Я думаю, мне нужно поговорить с кем-то, кто знает об API Kubernetes, но у меня нет такого парня или девушки, я пытаюсь здесь, продолжая читать документы!
Ответ №1:
Все правильные вопросы, демонстрирующие пытливый ум (в наши дни это не гарантировано). Чтобы ответить на ваши вопросы:
1. Контейнеры внутри одного и того же модуля также выбираются в одной и той же физической памяти при запуске?
Все контейнеры работают на одном ядре и, следовательно, используют одни и те же ресурсы. В отличие от виртуальных машин, нет изолирующего их уровня виртуализации. Однако контейнерные процессы выигрывают от той же изоляции памяти, что и любой другой процесс, запущенный в ядре Linux. Кроме того, контейнерные процессы могут быть ограничены использованием не более определенного объема памяти и процессора.
2. Является ли эта идентификация [модули похожи на службы, работающие на ноутбуке] правильной или вводящей в заблуждение?
Это определение относится только к сети: как и на вашем ноутбуке, все контейнеры Pod работают в одной сети и, следовательно, могут обращаться друг к другу localhost
. Однако, в отличие от вашего ноутбука, контейнеры внутри модулей по-прежнему изолированы друг от друга. Они имеют свои собственные файловые системы и выполняются в отдельных пространствах имен процессов.
3. Является ли Pod вычислительной машиной?
В моих книгах вычислительная машина будет аппаратной (виртуальной или реальной) плюс операционная система (ядро приложения). Это означает, что модуль не является вычислительной машиной. Pod — это просто набор изолированных процессов, совместно использующих сетевое пространство имен. Чтобы запустить Pod, вам необходимо предоставить аппаратное обеспечение, ядро и среду выполнения контейнера, известную как кластер K8s.
Что касается сети: рабочим машинам K8s присвоены IP-адреса, которые делают их адресуемыми внутри их сети или извне. Эти IP-адреса не конфликтуют с IP-адресами, назначенными модулям, поскольку Pod IP-адреса являются внутренними IP-адресами. Они могут быть адресованы только из виртуальной сети K8s, то есть из других модулей в том же кластере K8s.
Комментарии:
1. Спасибо за ваш подробный ответ. Возможно, я не совсем четко сформулировал самый первый вопрос. Я имел в виду, является ли ОЗУ (аппаратное обеспечение), доступное для контейнера (до того, как он фактически использует его часть), одинаковым ОЗУ (аппаратным обеспечением) для всех контейнеров, работающих в pod? Похоже, что это так. И мне интересно, относится ли то же самое ко всем контейнерам в узле : все они используют ОЗУ и процессор одной и той же вычислительной машины (узла). Это правильно?
2. Да, это правильно. Если они развернуты на одном и том же рабочем узле, они используют одно и то же ядро и, следовательно, одно и то же оборудование. Для защиты от DOS-атак у вас будут установлены ограничения на использование ресурсов.
3. после прочтения о сетевых пространствах имен и виртуальных сетевых интерфейсах в Википедии и YouTube мне кажется, что pod — это сетевое пространство имен виртуальный сетевой интерфейс, созданный на узле
4. Правильно, но дело не только в этом. Модуль включает в себя один или несколько изолированных и изолированных процессов, каждый из которых имеет свою собственную файловую систему. Сдерживание выполняется в отношении использования процессора, оперативной памяти и хранилища. Изоляция выполняется не только с точки зрения сети, но также процесса, IPC и имени хоста.
Ответ №2:
Ниже приведены упрощенные определения :
Контейнер: приложение, которое выполняется в изолированном пользовательском пространстве (примечание: не в пространстве ядра) со всеми необходимыми зависимостями. таким образом, мы можем рассматривать это как «легковесную виртуальную машину» с точки зрения приложения. мы говорим «легкий вес», потому что он разделяет ядро хост-ОС. мы говорим, что это «(облегченная) виртуальная машина», потому что она содержит собственное и изолированное пространство имен процессов (Pid), пространство сетевых имен (net), пространство имен дисков (mnt) и время (uts).
Как каждый контейнер может иметь свой собственный IP-адрес, отличный от IP-адреса хоста? :
- Это возможно благодаря реализации «Сетевого пространства имен»
Тогда что такое Pod?
- Pod — это объект Kubernetes, который позволит пользователям запускать контейнеры. Kubernetes реализовал Pod как уровень абстракции, чтобы разорвать зависимость с CRI (время выполнения контейнера)
Может ли в них быть несколько контейнеров Pod?
- Да, модуль может иметь несколько контейнеров. IP назначается на уровне pod . таким образом, в случае многоконтейнерных модулей они могут взаимодействовать друг с другом через интерфейс локального хоста контейнеров.
Является ли модуль, который запускает контейнеры, вычислительной машиной с ОЗУ и ЦП? Это скорее узел?
- Да, при создании контейнера как части модулей вы можете назначить ему Ram и CPU. здесь
Это больше о том, как узел может иметь IP-адрес, а модули внутри него имеют другие IP-адреса?
- Это возможно с помощью комбинации двух функций Linux — интерфейса Veth ( Virtual Ethernet) и сетевых пространств имен . даже в мире без контейнеров мы можем создать несколько интерфейсов veth в системе linus и назначить им разные IP-адреса. таким образом, контейнеры использовали veth linux и объединили их с сетевым пространством имен, чтобы действовать как изолированная сетевая среда для контейнера. посмотрите это видео
Пожалуйста, обратитесь к следующим статьям :
Комментарии:
1. Я думаю, что меня не очень смущает определение контейнера, хотя я не знаю о деталях низкого уровня, таких как упомянутый вами pid. Это больше о том, как узел может иметь IP-адрес, а модули внутри него имеют другие IP-адреса? Является ли модуль, который запускает контейнеры, вычислительной машиной с ОЗУ и ЦП? Это скорее узел?
2. @dada я добавил немного больше информации к своим ответам на ваши вопросы
3. хм, я читаю о virtual ethernet в Википедии и видео, которое вы прикрепили, я думаю, что это была та часть, которую я пропустил; спасибо, что сообщили мне об этом!
4. Однако, что касается первого вопроса, на который вы отвечаете в своем сообщении, из того, что я понял, все контейнеры / rest api доступны по одному и тому же IP-адресу, их можно различать с помощью портов
5. @dada Чтобы полностью понять это, вы должны начать дифференцировать пространства имен Linux. Единственное пространство имен, общее для контейнеров в Pod, — это сеть. Кроме этого, они выполняются в отдельных пространствах имен (process, IPC, UTS). У них отдельные файловые системы и отдельные ограничения ресурсов.