VDS за 300р от нашего партнера SpaceWeb
[124]
18 Мар 2020, 23:00

5 советов по устранению неполадок в приложениях на Kubernetes

После того, как я перешел из Docker в Docker Swarm, в Kubernetes, а затем разбирался со всеми различными изменениями API на протяжении многих лет, я довольно легко узнал, что не так с моими деплоями, и нашел решение.

Так было не всегда, и вы должны с чего-то начать, может быть, именно там вы находитесь сегодня, на старте? Где бы вы ни находились в этом трипе, я хочу дать вам 5 советов по устранению косяков, которые я считаю офигенными, а также некоторые дополнительные фишки.

Представляем свой «Швейцарский армейский нож»

Ваш швейцарский армейский нож («Leatherman», как говорят америкосы) является многоцелевым инструментом, и, как и все хорошие инструменты, должен быть хорошо поюзан и изношен.

И вы уже догадались, это так kubectl. Давайте начнем с 5 «вложений» и как вы можете использовать их, когда что-то пойдет не так.

Сценарии будут такими: мой YAML был принят, но мой сервис не запущен, а запущен, но работает неправильно .

  1. kubectl get deployment/pods

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

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

  • kubectl get deploy
  • kubectl get deploy -n namespace
  • kubectl get deploy --all-namespaces [or "-A"] (пожалуйста)

В идеале вы ищете 1/1 или эквивалент, 2/2 и т. Д. Это будет означать, что ваше развертывание было принято и пыталось что-то развернуть.

Затем вы можете посмотреть, kubectl get podsправильно ли запущен pod для развертывания.

2. kubectl get events

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

Журналы в Kubernetes * не упорядочены *, поэтому вам нужно добавить следующее, взятое из документации OpenFaaS .

$ kubectl получить события --sort-by = .metadata.creationTimestamp

Двоюродный брат kubectl get eventsявляется kubectl описать, и так же, как get deploy/podон работает с именем объекта:

kubectl описать развертывание / figlet -n openfaas

Вы получите очень подробную информацию здесь. И прежде чем мы забудем, вы можете описать большинство вещей, в том числе, nodesкоторые покажут, если вы не можете запланировать Pod из-за ограниченности ресурсов или других проблем.

3. kubectl logs

Вы знали, что этот грядет, но опять же, очень многие люди используют это неправильно, трудный путь.

Если у вас есть развертывание, скажем, cert-managerв cert-managerпространстве имен, очень многие люди думают, что сначала они должны найти длинное (уникальное) имя Pod и использовать его для своего параметра. Неправильно!

развертывание журналов kubectl / cert-manager -n cert-manager

Чтобы следить за журналами, как они приходят добавить -f

развертывание журналов kubectl / cert-manager -n cert-manager -f

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

развертывание журналов kubectl / cert-manager -n cert-manager --tail 100

И вы можете объединить все три.

Если в вашем Deployment или Pod есть какие-либо ярлыки, вы можете использовать -l app=nameили любой другой набор ярлыков для прикрепления к журналам одного или нескольких подходящих модулей.

kubectl logs -l app = nginx

Есть некоторые инструменты, такие как stern и kail, которые могут помочь вам подобрать шаблоны и сэкономить на небольшом наборе текста, но я считаю, что это отвлекает.

4.kubectl get -o yaml

Когда вы начнете работать с YAML, сгенерированным другим проектом или другим инструментом, таким как Helm, вам понадобится это довольно быстро. В производстве также полезно проверить версию изображения или аннотации, которые вы где-то установили.

kubectl run nginx-1 --image = nginx --port = 80 --restart = всегда

Развернул ли я это с помощью перезапуска «Всегда» или перезапуска «Никогда»?

kubectl get deploy / nginx-1 -o yaml

Теперь мы знаем. Более того, мы можем добавить --exportи сохранить YAML локально, чтобы отредактировать его и снова прикрепить.

Другой вариант редактирования YAML — kubectl editесли вы застряли vimи не знаете, что происходит, добавьте к команде префикс VISUAL=nanoдля более простого редактора.

5. kubectl scale— Вы снова включали и выключали его?

kubectl scaleможет использоваться для масштабирования развертывания и его модулей до нуля реплик, фактически уничтожая их все. Когда вы уменьшите масштаб до 1/1, будет создан новый Pod, перезапускающий ваше приложение.

Синтаксис очень прост, и вы сможете перезапустить свой код и снова пройти тестирование.

развертывание масштаба kubectl / nginx-1 --replicas = 0 
развертывание масштаба kubectl / nginx-1 --replicas = 1

6. Переадресация портов

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

Вот пример доступа к развертыванию Nginx, но локально:

kubectl port-forward deploy / nginx-1 8080: 80

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

Если вы хотите предоставить службу в Интернете, вы обычно используете службу LoadBalancer или запускаете kubectl expose:

kubectl выставить развертывание nginx-1 --port = 80 --type = LoadBalancer

Альтернатива — использовать облачный собственный туннель, такой как оператор inlets .

Теперь попробуйте

Я надеюсь, что вы нашли эти 6 команд и полезных советов. Теперь вам нужно пойти и протестировать их на реальном кластере.

Вы можете создать кластер на своем ноутбуке или использовать предложение управляемого облака.

Мои любимые варианты местного развития:

И конечно же, KinD — Kubernetes In Docker .

по материалам medium.com

Комментарии (0)

Добавить комментарий

Войдите, чтобы написать о чем-нибудь...
Вход Регистрация
Web.onRails
Здесь вы можете спросить или написать обо всём, что касается Веб-разработки.
написать о чем-нибудь...
Метки:
Лучшее
[52]
16 Окт 2011, 15:38
Вывести все элементы POST
[просмотров 13519]
[74]
31 мая 2011, 11:48
Python проверка существования переменной
[просмотров 9272]
[4]
10 Окт 2018, 15:33
Как запретить просмотр сайта по IP?
[просмотров 8846]
[100]
19 Дек 2014, 16:16
User-agent для Internet Explorer 11
[просмотров 8222]
[124]
21 Июл 2011, 14:04
Python Imaging Library (PIL)
[просмотров 6837]
[58]
29 мая 2012, 12:08
Узнать версию PHP из командной строки
[просмотров 4951]
[315]
16 Июл 2011, 20:03
Python работа с MySQL
[просмотров 4915]

Вести с Хабра