PuppetConf 2016. Kubernetes для системных администраторов.
Часть 1 Установите лимит использования ресурсов.
С помощью простой математики вы можете подсчитать, сколько копий приложения вы можете запустить — если для одной копии требуется 1 ГБ ОЗУ, то при 10 ГБ памяти вы сможете запустить 10 копий.
Следить за этим не будет необходимости, поскольку я знаю, что ядро системы просто выполнит оговоренный контракт. Этот контракт или соглашение между вами и системой очень важен, потому что, если он существует, все инструменты работают намного лучше.
Таким образом мы вводим в систему исполнительскую дисциплину.
Итак, планировщик запустит это только в том случае, если у каждой реплики будет 1 ГБ свободной памяти.
Если памяти недостаточно, процесс не запустится.
Итак, я ввожу команду kubectl create, и после ее выполнения будет создан контейнер mysql.
Здесь есть один нюанс, связанный с системами с отслеживанием состояния: у вас есть несколько вариантов на выбор.
Я выделил фрагмент кода, в котором указал, что хочу использовать PersistentDisk моего облачного провайдера.
Это может быть NFS, ISCSI или любой другой протокол, обеспечивающий доступ к устройствам хранения данных на уровне блоков.
Я делаю это, чтобы отключить хранилище от машин.
Если одна из машин выйдет из строя, я смогу воссоздать процесс на другой машине, используя то же хранилище данных.
Если вы смонтируете хранилище с вышедшего из строя хоста, вы просто потеряете свои данные и вам придется заново все восстанавливать из резервной копии.
Поэтому наша цель — сделать хранилище быстрее по мере того, как наши сети становятся быстрее.
Речь идет не о миграции, а о возможности быстрого монтирования и размонтирования хранилища вне машины.
Это вполне возможно сделать.
Посмотрим, как поживает наш под — он все еще создается, и теперь я хочу создать для него сервисы, чтобы другие приложения могли найти наш под.
Как только я создам этот сервис, Kubernetes сгенерирует запись DNS, так что вы сможете просто вызвать mysql и автоматически определить, что этот контейнер запущен.
Давайте продолжим и введем команду $ kubectl create –f Services/mysql.yaml. Как видите, контейнер все еще создается.
Кстати, это демонстрационное видео вы можете посмотреть на моем сайте.
Вы можете увидеть, как выглядит сервис для приложения mysql — он содержит IP-адреса кластера, внешние IP-адреса, номера портов и сетевые протоколы.
Давайте посмотрим, что произойдет с этим конкретным контейнером.
Как видите, это работает.
Итак, на данный момент я считаю, что приложение MySQL действительно работает. Следующее, что нам понадобится, это веб-приложение.
Итак, давайте развернем это приложение под названием «лобстеры», я взял его с GitHub, это клон Hacker News. Это проект Ruby-on-Rails, я просто создал контейнер на основе приведенных здесь данных и базовой конфигурации.
Если вы не знаете, контент Hacker News сделает вас суперпопулярным на любой хакерской конференции.
Просто прочитайте то, что здесь написано, и вы сможете обсудить все популярные темы из мира компьютерных технологий.
Так что если вы хотите произвести впечатление на окружающих, читайте новости этого портала.
Итак, я хочу создать клон этой штуки и выложить его в Интернет, чтобы заработать деньги.
Конечно, это не настоящий бизнес-проект, а всего лишь демонстрация возможностей.
В настоящее время я развертываю приложение под названием Lobsters. Из своего секрета я беру URL базы данных, для чего использую команду $kubectl get secrets. secret также содержит имя пользователя и пароль.
Далее я хочу создать контейнер, который будет взаимодействовать с моим приложением, для чего я использую команду $ kubectl create –f Deployments/lobsters.yaml. Как видите, приложение работает.
Кроме того, у нас есть IP-адрес.
Ввожу команду $kubectl get svc и включаю глобальный балансировщик нагрузки, который указывает на страницу с внешним IP-адресом 101.198.12.60.
Зайдем в браузер и попробуем ввести этот адрес по HTTP. Да, ошибка ожидания миграции! Это Ruby-on-Rails, поэтому я ожидал чего-то подобного.
Итак, нам нужен перенос базы данных.
Нам нужно один раз запустить этот процесс и все.
Однако мы хотим сделать это одинаково — никакой авторизации на сервере, никаких специальных серверов типа Jump box, мы хотим зайти в планировщик и сказать: «О, запустите эту задачу один раз и после выполнения просто убейте процесс!» » То есть я хочу запустить всего одну команду и выйти.
Поэтому для пакетной обработки я использую команду $ cat jobs/lobsters-db-schema-load.yaml, чтобы создать объект Jobs, реализующий такую схему.
Флаг команды rake «db:schema:load» направляется прямо на GitHub и говорит: «возьмите образ кода: kelseyhightower/lobsters:2.0.0 и запустите эту команду 1 раз».
Строка restartPolicy:never в конце кода сообщает Kubernetis, что он должен запустить это только один раз и никогда не повторять.
Также я ограничиваю ресурсы ЦП и памяти, то есть указываю параметры подходящей машины, на которой он может быть запущен и выполнен, после чего миграция базы данных будет завершена.
Вот как я «направляю» все объекты Jobs, которые необходимо запустить в системе, с помощью команды $ kubectl create –f jobs/lobsters-db-schema-load.yaml.
Вы можете видеть, что соответствующее задание создано, после чего я набираю команду $watch kubectl get jobs.
Итак, контейнер подтянут к машине, планировщик сработал, rake-задача создана.
Давайте вернемся и обновим страницу ошибок базы данных.
Как видите, наша схема успешно реализована.
Далее мне нужно войти в систему.
Я использую команду $ kubectl create –f jobs/lobsters-db-seed.yaml. Вы можете видеть, что планировщик все еще загружает контейнер, и через несколько секунд задание завершается.
Для запуска миграции мы используем тот же уровень кода, что и раньше.
Я вхожу на эту страницу, и все, что мне нужно сделать сейчас, это получить контент. Контент необходим, если мы хотим собрать немного денег.
Вот как выглядит Growth hacking или «growth hacking» — вы заходите на чужой сайт, крадете оттуда контент и размещаете его на своем собственном сайте, который внешне похож на оригинал.
Но нам нужен не просто контент, нам нужен хороший контент. Было бы обидно пускать все на самотек, поэтому я вручную заимствую несколько новостей.
Можно было скопировать контент автоматически, но это незаконно.
Поэтому я выбираю новость, копирую адрес ссылки, устанавливаю тег «тест», ставлю галочку «Я — автор истории, расположенной по этому URL» и нажимаю кнопку «Отправить».
Посмотрите, как здорово выглядят украденные новости!
Теперь пришло время масштабировать приложение.
Для этого нам просто нужно изменить определение того, что мы делаем — вместо 1 реплики перейти, например, на 10. Затем я снова запускаю командный блок.
Kubernetes берет эту информацию, предпринимает действие, и теперь в нашем модуле работает 10 копий приложения Lobsters. Более того, этот процесс автоматически добавляется в балансировщик нагрузки благодаря работе Сервисов.
Давайте посмотрим, что происходит в бэкэнде.
Для этого я использую команду $kubectl get svc, получаю короткое состояние и прошу его описать командой $kubectl описать svc. Kubernetes автоматически обнаруживает все наши конечные точки и размещает их за балансировщиком нагрузки.
При этом все бесполезное удаляется, а все необходимое автоматически добавляется.
Нам не нужно создавать эту штуку снова и снова, все полностью интегрировано в платформу.
Следующий важный вопрос — как обновляться и как получать логи.
Если вы помните, я забрал у вас доступ по SSH, поэтому вам нужна централизация журналов с помощью чего-то вроде Log Stash или внутреннего журналирования Google Cloud. Но если вы просто хотите просмотреть журналы для конкретного случая, помните, что у вас нет доступа к машинам.
Однако вы можете использовать API для сбора журналов с использованием имен контейнеров.
Для этого введите команду $ kubectl logs lobsters-240734871-03rmn –f, где 03rmn — имя конкретной копии приложения lobsters-240734871 в контейнере.
Таким образом вы сможете просмотреть журнал каждого контейнера с репликой, чтобы при необходимости устранить проблемы.
Давайте просмотрим наш контент с помощью команды $kubectl get pods, как видите, всё работает. Следующее важное, что нужно сделать, это нанять маркетолога.
Он смотрит на эту страницу и говорит: «Делайте, что хотите, но уберите с сайта эти пробелы!»
Все, что нам нужно сделать, это создать новый контейнер поверх уже созданного и настроить CSS для того, что мы хотим продвигать.
Напомню, что речь не идет об узлах, узлы нам не важны, потому что система сама обеспечит именно то, что мы хотим.
Продолжение будет совсем скоро.
Немного рекламы :)
Спасибо, что остаетесь с нами.Вам нравятся наши статьи? Хотите увидеть больше интересных материалов? Поддержите нас, разместив заказ или порекомендовав друзьям, облачный VPS для разработчиков от $4,99 , уникальный аналог серверов начального уровня, который мы придумали для вас: Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от 19$ или как правильно раздать сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40 ГБ DDR4).
Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только здесь 2 x Intel TetraDeca-Core Xeon, 2 x E5-2697v3, 2,6 ГГц, 14C, 64 ГБ DDR4, 4 твердотельных накопителя по 960 ГБ, 1 Гбит/с, 100 ТВ от 199 долларов США в Нидерландах! Dell R420 — 2x E5-2430, 2,2 ГГц, 6C, 128 ГБ DDR3, 2 твердотельных накопителя по 960 ГБ, 1 Гбит/с, 100 ТБ — от 99 долларов США! Прочтите об этом Как построить корпоративную инфраструктуру класса, используя серверы Dell R730xd E5-2650 v4 стоимостью 9000 евро за копейки? Теги: #ИТ-инфраструктура #Системное администрирование #Kubernetes #Конференции
-
Время Фильтрации На Digg — 69 Минут.
19 Oct, 24 -
Как Развиваться В It
19 Oct, 24 -
C#: 10 Распространенных Ловушек И Ошибок
19 Oct, 24