В этом руководстве вы узнаете, как настроить службу 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: environment
— value: dev/staging/qa/prod
Другой типичный пример: у вас может быть несколько отделов, и вы можете пометить каждый отдельный модуль для каждого отдела.
key:department
— value: engineering/finance/marketing
Ярлыки не уникальны, и к одному объекту можно добавить несколько ярлыков.
- После того, как метки прикреплены к объекту, вы можете использовать фильтры, чтобы сузить результаты. Они называются селекторами ярлыков.
- Используя селекторы меток, вы можете использовать выражения сопоставления для сопоставления меток.
- Например, конкретный порт может работать только на узле, помеченном как «среда» равно «разработка».
- В нашей предыдущей лекции мы использовали метки узлов для сервисов. У службы есть селектор меток, позволяющий выбрать правильный модуль, для которого будет использоваться служба.
- Вы также можете использовать метки для маркировки узлов.
- После того, как узлы помечены тегами, вы можете использовать селекторы меток, чтобы модули работали только на определенных узлах.
Чтобы запустить модуль на определенном наборе узлов, необходимо выполнить 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 Новости 📰 | Еще .
Если этот пост был полезен, нажмите несколько раз кнопку хлопка 👏 ниже, чтобы выразить поддержку автору 👇