Pod вычислительная машина с процессором и оперативной памятью?

#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). У них отдельные файловые системы и отдельные ограничения ресурсов.