В этом руководстве вы узнаете, как настроить службу Kubernetes и создать теги на своих узлах и ресурсах Kubernetes.

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

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

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

  • Вот почему к модулям нельзя обращаться напрямую, а всегда через службу.
  • Служба - это логический мост между «смертными» модулями и другими службами или конечными пользователями.
  • При использовании команды «kubectl expose» в предыдущем посте мы создали новую службу для вашего модуля, чтобы к нему можно было получить доступ извне.
  • Создание новой службы создаст конечную точку для вашего модуля (модулей):

Вы можете использовать:

  • IP-адрес кластера: виртуальный IP-адрес, доступный только в пределах кластера (по умолчанию) или
  • A NordPor t: порт, который одинаков на всех узлах и доступен извне.
  • LoadBalancer: используется для производственных приложений в облаке. LoadBalancer, созданный облачным провайдером, который направляет внешний трафик на каждый узел на NodePort (ELB на AWS).

Эти параметры позволяют создавать только виртуальные IP-адреса или порты.

  • Также есть возможность использовать DNS-имена для сервиса. Если вы используете внешнее имя в определении службы, вы можете указать DNS-имя для службы. Например, для обнаружения сервисов с использованием DNS. Это работает, только если включена надстройка DNS.

В приведенном выше примере имя нашей службы helloworld-service. В спецификации мы определяем порты. Мы используем порт 31001, and, это nodePort, targetPort - это python-port, протокол - TCP, а selector - это app: hello-world.

Вам не нужно указывать NodePort, если вы не укажете его, это будет случайный порт, но если вы укажете его, порт будет использоваться, но эта служба может быть создана только в том случае, если порт все еще доступный. Таким образом, вы должны сами управлять конфликтами портов.

Примечание: по умолчанию службы могут запускать только порты 30000-32767, но вы можете изменить это поведение, добавив аргумент --service-node-port-range= в kube-apiserver (в сценариях инициализации), и вы также должны убедиться, что у вас нет коллизий с портами. которые уже используются на узле.

  • Проверьте, работают ли ваши поды.

  • Запустите созданную ранее службу, которая откроет порт python 31001 Из службы Kubernetes вы сможете получить доступ к своему модулю.

  • Получите конкретную информацию от вашего сервиса. kubectl describe svc helloworld-service вы увидите IP-адрес кластера, доступный внутри кластера. Конечная точка также может использоваться в кластере. Есть несколько способов доступа к вашему приложению, nodePort будет статическим способом доступа к вашему кластеру.

  • Вы можете получить список всех услуг, используя kubectl get svc

  • Когда вы удалите его и создадите снова, IP-адрес изменится. Номер Nodeport - это статический номер порта, который мы можем использовать для настройки внешних служб для доступа к нашему приложению в этом модуле.

Ярлыки

Ярлыки - это пары ключ / значение, которые можно прикреплять к объектам.

  • Ярлыки похожи на теги в AWS или других облачных провайдерах, используемые для тегирования ресурсов.
  • Вы можете маркировать свои объекты, например, свои контейнеры, в соответствии с организационной структурой.
  • Вы можете пометить свои стручки, используя:

key: environmentvalue: dev/staging/qa/prod

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

key:departmentvalue: engineering/finance/marketing

Ярлыки не уникальны, и к одному объекту можно добавить несколько ярлыков.

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

Чтобы запустить модуль на определенном наборе узлов, необходимо выполнить 2 шага:

  1. Сначала вы помечаете сам узел.
  2. Добавьте селектор узлов в конфигурацию модуля. Это может быть отдельный модуль или шаблон модуля в развертывании.

ШАГИ

  • Добавьте метку или несколько меток к вашим узлам:

Укажите имя узла и метку, которую вы хотите дать ему, используя key=value

kubectl label nodes node1 hardware=high-spec
kubectl label nodes node2 hardware=low-spec
  • Подтвердите, видите ли вы свои узлы, введя

kubectl get nodes --show-labels

  • Во-вторых, добавьте модуль, который использует эти метки.
apiVersion: v1
kind: Pod
metadata:  
  name: helloworld-service
spec: 
 contianers:
 - name: docker-demo
 image: docker/docker-demo
 ports:  
 -containerPort: 5000
-nodeselector: 
  hardware: high-spec

Этот модуль 👆🏽 будет работать только на узлах с высокими техническими характеристиками.

грация

Понравилось читать? Оставьте несколько «аплодисментов» ниже, чтобы другие могли найти этот пост 🙂

Посмотрите мои другие сообщения :)

Https://thecraftman.medium.com/

Присоединяйтесь к FAUN: Веб-сайт 💻 | Подкаст 🎙️ | Twitter 🐦 | Facebook 👥 | Instagram 📷 | Группа Facebook 🗣️ | Группа Linkedin 💬 | Slack 📱 | Cloud Native Новости 📰 | Еще .

Если этот пост был полезен, нажмите несколько раз кнопку хлопка 👏 ниже, чтобы выразить поддержку автору 👇