I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

I-Kubernetes eyona ndlela yokwenza. Ukudala izitya ezincinci

По мере того как вы начинаете создавать все больше и больше сервисов Kubernetes, простые по началу задачи начинают усложняться. Например, команды разработчиков не могут создавать службы или развертывания под одним и тем же именем. Если у вас тысячи подов, их простое перечисление займет кучу времени, не говоря о том, чтобы обеспечить им нормальное управление. И это только верхушка айсберга.

Давайте рассмотрим, как пространство имен namespace облегчает управление ресурсами Kubernetes. Итак, что же такое пространство имен? Namespace можно рассматривать как виртуальный кластер внутри вашего кластера Kubernetes. Вы можете иметь несколько изолированных друг от друга пространств имен внутри одного кластера Kubernetes. Они реально могут помочь вам и вашим командам с организацией, безопасностью и даже производительностью системы.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

В большинстве дистрибутивов Kubernetes кластер «выходит из коробки» с пространством имен, имеющим название «default». На самом деле существует три пространства имен, с которыми Kubernetes имеет дело: default, kube-system и kube-public. В настоящее время Kube- public используется не так уж часто.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Не трогать пространство имен kube – хорошая идея, особенно в такой управляемой системе, как Google Kubernetes Engine. Она использует пространство имен «default» как место, в котором создаются ваши сервисы и приложения. В нем нет абсолютно ничего особенного, за исключением того, что Kubernetes «из коробки» настроен на его использование, и вы не можете его удалить. Это отлично подходит для начала работы и систем с небольшой производительностью, но я бы не рекомендовал использовать default namespace в больших prod-системах. В последнем случае одна команда разработчиков может легко переписать чужой код и нарушить работу другой команды, даже не осознавая этого.

Поэтому следует создать несколько пространств имен и использовать их для сегментации ваших услуг в управляемые звенья. Пространство имен можно создать с помощью одной команды. Если вы хотите создать пространство имен с именем test, то используйте команду $ kubectl create namespace test или просто создайте YAML-файл и используйте его, как любой другой ресурс Kubernetes.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Просмотреть все пространства имен можно с помощью команды $ kubectl get namespace.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

После ее выполнения вы увидите три встроенных пространства имен и новое пространство имен под названием «test». Давайте рассмотрим простой YAML-файл, предназначенный для создания pod. Можно заметить, что в нем нет никакого упоминания о пространстве имен.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Если примените kubectl для запуска этого файла, он создаст модуль mypod в текущем активном пространстве имен. Это будет пространство имен по умолчанию, пока вы его не измените. Существует 2 способа сообщить Kubernetes, в каком пространстве имен вы хотите создать свой ресурс. Первый способ — это использование флага пространства имен при создании ресурса.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Второй способ заключается в указании пространства имен в декларации YAML.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Если вы укажете пространство имен в YAML, то ресурс всегда будет создаваться в этом пространстве. Если вы попытаетесь использовать другое пространство имен при использовании флага пространства имен, то команда завершится ошибкой. Теперь, если вы попытаетесь найти свой pod, то не сможете этого сделать.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Это происходит потому, что все команды выполняются вне текущего активного пространства имен. Чтобы найти свой pod, вам нужно использовать флаг пространства имен, однако это быстро надоедает, особенно если вы работаете разработчиком в группе, которая использует свое собственное пространство имен и не хочет и использовать такой флаг для каждой отдельной команды. Давайте посмотрим, как это можно исправить.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Из коробки ваше активное пространство имен носит название default. Если вы не уточните пространство имен в YAML ресурса, то все команды Kubernetes будут использовать это активное default namespace. К сожалению, попытка управлять активным пространством имен с помощью kubectl может окончиться неудачей. Однако существует очень хороший инструмент под названием Kubens, который намного упрощает этот процесс. Когда вы запускаете команду kubens, то видите все пространства имен с подсвеченным активным пространством имен.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Для переключения активного пространства имен на пространство имен test вы просто запускаете команду $ kubens test. Если после этого снова ввести команду $ kubens, можно увидеть, что теперь выделено новое активное пространство имен – test.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Это означает, что вам не нужен флаг пространства имен, чтобы увидеть pod в пространстве имен test.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Таким образом пространства имен скрыты друг от друга, но не изолированы друг от друга. Сервис из одного namespace может довольно легко общаться с сервисом в другом пространстве имен, что часто бывает очень полезно. Возможность коммуникации между разными пространствами имен означает, что сервис ваших разработчиков может взаимодействовать с сервисом другой dev-команды в другом пространстве имен.

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

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

К счастью, это легко обойти, используя развернутую форму DNS-адреса. Сервисы в Kubernetes выставляют свои конечные точки, используя общий шаблон DNS. Это выглядит примерно так:

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Как правило, вам просто нужно имя сервиса, и DNS автоматически определит полный адрес.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

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

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Например, если вы хотите подключиться к базе данных сервиса в тестовом пространстве имен, вы можете использовать базу адресов database.test

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Если же вы хотите подключиться к базе данных сервиса в пространстве имен prod, вы используете database.prod.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Если вы действительно хотите изолировать и ограничить доступ к пространству имен, Kubernetes позволяет сделать это с помощью сетевых политик Kubernetes Network Policies. Об этом я расскажу в следующей серии.

Мне часто задают вопрос, сколько пространств имен нужно создавать и для каких целей? Что же представляет собой управляемый фрагмент данных?

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

Представьте, что вы являетесь частью небольшой команды, которая работает над разработкой 5-10 микросервисов и вы легко можете собрать всех разработчиков в одной комнате. В данной ситуации имеет смысл запускать все prod-сервисы в пространстве имен default. Конечно, для большего простора действий вы можете использовать 2 пространства имен — отдельно для prod и dev. И вероятнее всего, вы тестируете свою разработку на локальном компьютере с помощью чего-то наподобие Minikube.

Предположим, что условия поменялись и теперь у вас имеется быстро растущая команда, которая одновременно работает над более чем 10 микросервисами. Наступает момент, когда необходимо использовать несколько кластеров или пространств имен, отдельно для prod и dev. Можно разбить команду на несколько подгрупп так, чтобы у каждой из них были свои собственные микросервисы и каждая из этих команд могла бы выбрать свое собственное пространство имен для облегчения процесса управления разработкой и выпуском ПО.

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

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

В крупных компаниях разработчики вообще не знают, кто конкретно над чем работает. Команды общаются с помощью сервисных контрактов или используют технологию Service mesh, которая добавляет над сетью уровень абстракции, типа инструмента конфигурации Istio. Попытка запустить весь стек локально просто невозможна.Я настоятельно рекомендую использовать в Kubernetes такую платформу непрерывной доставки (CD), как Spinnaker. Итак, наступает момент, когда каждой команде определенно нужно собственное пространство имен. Каждая команда даже может выбрать несколько пространств имен для среды dev и среды prod.

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

I-Kubernetes eyona ndlela yokwenza. Umbutho we Kubernetes enendawo yamagama

Программисты не должны развертывать сервисы вручную и не должны иметь доступа к пространствам имен, которые их не касаются. На данном этапе целесообразно иметь несколько кластеров для уменьшения «радиуса взрыва» плохо настроенных приложений, для упрощения процессов биллинга и управления ресурсами.

Таким образом, правильное использование пространств имен вашей организацией позволяют сделать Kubernetes более управляемым, контролируемым, безопасным и гибким.

I-Kubernetes eyona ndlela yokwenza. Ukuqinisekisa ukuPhila kweKubernetes ngokuLungela kunye noVavanyo lokuPhila

Ezinye iintengiso 🙂

Enkosi ngokuhlala nathi. Ngaba uyawathanda amanqaku ethu? Ngaba ufuna ukubona umxholo onomdla ngakumbi? Sixhase ngokufaka iodolo okanye ngokucebisa abahlobo, ifu VPS kubaphuhlisi ukusuka $4.99, i-analogue eyodwa yeeseva zomgangatho wokungena, eyenzelwe wena: Inyaniso yonke malunga neVPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ukusuka kwi-$ 19 okanye indlela yokwabelana ngomncedisi? (ifumaneka nge-RAID1 kunye ne-RAID10, ukuya kuthi ga kwi-24 cores kunye ne-40GB DDR4).

Dell R730xd 2x ngexabiso eliphantsi kwiziko ledatha le-Equinix Tier IV eAmsterdam? Kuphela apha 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ukusuka $199 eNetherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ukusuka $99! Funda malunga Ulwakha njani umbutho weziseko zophuhliso. iklasi ngokusetyenziswa kwe-Dell R730xd E5-2650 iiseva ze-v4 ezixabisa i-9000 yee-euro ngepeni?

umthombo: www.habr.com

Yongeza izimvo