Какой процесс позволяет записывать файлы в кластеры последовательно один за другим

Обновлено: 21.11.2024

$cmd Специальная виртуальная коллекция, предоставляющая доступ к командам базы данных MongoDB. Сведения об использовании команд базы данных см. в разделе Команды ввода. _id Поле, обязательное для каждого документа MongoDB. Поле _id должно иметь уникальное значение. Вы можете думать о поле _id как о первичном ключе документа. Если вы создаете новый документ без поля _id, MongoDB автоматически создает поле и назначает уникальный идентификатор объекта BSON. аккумулятор Выражение в конвейере агрегации, которое поддерживает состояние между документами в конвейере агрегации. Список операций с аккумулятором см. в разделе $group . действие Операция, которую пользователь может выполнить над ресурсом. Действия и ресурсы объединяются для создания привилегий. См. действие. база данных администратора Привилегированная база данных. Пользователи должны иметь доступ к базе данных администратора для выполнения определенных административных команд. Список административных команд см. в разделе «Команды администрирования». агрегация Любая из множества операций, которая сокращает и суммирует большие наборы данных. Методы агрегата() и mapReduce() MongoDB являются двумя примерами операций агрегирования. Дополнительные сведения см. в разделе Операции агрегирования. конвейер агрегации Набор операторов MongoDB, позволяющих вычислять агрегированные значения без необходимости использования сокращения карты. Список операторов см. в разделе Справочник по агрегации. арбитр Член набора реплик, существующий исключительно для голосования на выборах. Арбитры не реплицируют данные. См. Арбитр набора реплик. Atlas MongoDB Atlas — это облачная база данных как услуга. Атомарная операция Атомарная операция — это операция записи, которая либо завершается полностью, либо не завершается вообще. В случае распределенных транзакций, которые включают запись в несколько документов, все записи в каждый документ должны быть успешными, чтобы транзакция была успешной. Атомарные операции не могут быть завершены частично. См. Атомарность и транзакции. аутентификация Проверка личности пользователя. См. Аутентификация. авторизация Предоставление доступа к базам данных и операциям. См. Управление доступом на основе ролей. B-tree Структура данных, обычно используемая системами управления базами данных для хранения индексов. MongoDB использует B-деревья для своих индексов. балансировщик. Внутренний процесс MongoDB, работающий в контексте сегментированного кластера и управляющий миграцией фрагментов. Администраторы должны отключить балансировщик для всех операций обслуживания в сегментированном кластере. См. Балансировщик разделенных кластеров. BSON Формат сериализации, используемый для хранения документов и выполнения удаленных вызовов процедур в MongoDB. «BSON» — это сочетание слов «binary» и «JSON». Думайте о BSON как о двоичном представлении документов JSON (JavaScript Object Notation). См. Типы BSON и MongoDB Extended JSON (v2). Типы BSON Набор типов, поддерживаемых форматом сериализации BSON. Список типов BSON см. в разделе Типы BSON. Теорема CAP Учитывая три свойства вычислительных систем: согласованность, доступность и устойчивость к разделам, распределенная вычислительная система может обеспечить любые две из этих функций, но никогда не все три. ограниченная коллекция Коллекция фиксированного размера, которая автоматически перезаписывает свои самые старые записи, когда достигает своего максимального размера. Oplog MongoDB, который используется в репликации, представляет собой ограниченную коллекцию. См. Ограниченные коллекции. кардинальность Мера количества элементов в наборе значений. Например, набор A = < 2, 4, 6 > содержит 3 элемента и имеет мощность 3. См. раздел Мощность ключа Shard. контрольная сумма Расчетное значение, используемое для обеспечения целостности данных. Алгоритм md5 иногда используется в качестве контрольной суммы. фрагмент Непрерывный диапазон значений ключа сегмента в пределах определенного сегмента. Диапазоны фрагментов включают нижнюю границу и исключают верхнюю границу. MongoDB разделяет фрагменты, когда они превышают настроенный размер фрагмента, который по умолчанию составляет 64 мегабайта. MongoDB переносит фрагменты, когда сегмент содержит слишком много фрагментов коллекции по сравнению с другими сегментами. См. Разделение данных с помощью фрагментов и Балансировщик разделенных кластеров. клиент

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

Клиент также может ссылаться на отдельный поток или процесс.

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

Руководство по архитектуре развертывания наборов реплик см. в разделе Архитектуры развертывания наборов реплик.

Устаревшая оболочка MongoDB. Процесс mongo запускает устаревшую оболочку как демон, подключенный либо к экземпляру mongod, либо к экземпляру mongos. Оболочка имеет интерфейс JavaScript.

Начиная с MongoDB v5.0, mongo устарел, и mongosh заменяет mongo в качестве клиентской оболочки. Смотрите монгош.

mongod Сервер базы данных MongoDB. Процесс mongod запускает сервер MongoDB как демон. Сервер MongoDB управляет запросами и форматами данных, а также фоновыми операциями. Смотри монгод. mongos Маршрутизатор запросов сегментированного кластера MongoDB. Процесс mongos запускает маршрутизатор MongoDB как демон. Маршрутизатор MongoDB действует как интерфейс между приложением и сегментированным кластером MongoDB и обрабатывает всю маршрутизацию и балансировку нагрузки в кластере. Смотри монго. монгош

Оболочка MongoDB. mongosh предоставляет интерфейс оболочки либо для mongod, либо для экземпляра mongos.

Начиная с MongoDB v5.0, mongosh заменяет mongo в качестве предпочтительной оболочки.

namespace Каноническое имя коллекции или индекса в MongoDB. Пространство имен представляет собой комбинацию имени базы данных и имени коллекции или индекса, например: [имя-базы-данных].[имя-коллекции-или-индекса] . Все документы принадлежат пространству имен. См. Пространства имен. естественный порядок Порядок, в котором база данных обращается к документам на диске. Это порядок сортировки по умолчанию. См. $natural и Return in Natural Order. сетевой раздел

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

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

ObjectId Специальный 12-байтовый тип BSON, гарантирующий уникальность в коллекции. ObjectId создается на основе метки времени, идентификатора компьютера, идентификатора процесса и локального счетчика приращений процесса. MongoDB использует значения ObjectId в качестве значений по умолчанию для полей _id. оператор Ключевое слово, начинающееся с $, используемое для выражения обновления, сложного запроса или преобразования данных. Например, $gt — это оператор «больше чем» языка запросов. Доступные операторы см. в разделе Операторы. oplog Ограниченная коллекция, в которой хранится упорядоченная история логических операций записи в базу данных MongoDB. Oplog — это основной механизм, обеспечивающий репликацию в MongoDB. См. Оплог набора реплик. оптимальное время

Изменено в версии 3.2. Ниже описывается формат времени оптимизации, используемый в protocolVersion: 1 , представленный в MongoDB 3.2.

Ссылка на позицию в оплоге репликации. Значение optime — это документ, который содержит:

  • ts , отметка времени операции.
  • t — срок, в течение которого операция была изначально сгенерирована на основном сервере.

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

Начиная с MongoDB 4.4 потерянные документы удаляются автоматически после завершения миграции фрагментов. Вам больше не нужно запускать cleanupOrphaned для удаления потерянных документов.

MongoDB не допускает самопересечения внешнего кольца. Внутренние кольца должны полностью находиться внутри внешнего контура и не должны пересекаться или накладываться друг на друга. См. Объекты GeoJSON.

powerOf2Sizes Параметр для каждой коллекции, который изменяет и нормализует способ, которым MongoDB выделяет пространство для каждого документа, чтобы максимизировать повторное использование хранилища и уменьшить фрагментацию. Это значение по умолчанию для коллекций TTL. См. коллмод. pre-splitting Операция, выполняемая перед вставкой данных, которая делит диапазон возможных значений ключа сегмента на фрагменты для облегчения вставки и высокой пропускной способности записи. В некоторых случаях предварительное разделение ускоряет первоначальное распределение документов в сегментированном кластере, вручную разделяя коллекцию, а не ожидая, пока это сделает балансировщик MongoDB. См. раздел Создание блоков в разделенном кластере. сжатие префиксов Уменьшает потребление памяти и диска за счет сохранения любых идентичных префиксов ключей индекса только один раз на странице памяти. См. Сжатие для получения дополнительной информации о поведении WiredTiger при сжатии. первичный В наборе реплик первичным является член, который получает все операции записи. См. Первичный. первичный ключ Уникальный неизменяемый идентификатор записи. В СУБД первичный ключ обычно представляет собой целое число, хранящееся в поле идентификатора каждой строки. В MongoDB поле _id содержит первичный ключ документа, который обычно является идентификатором объекта BSON. первичный осколок Осколок, содержащий все нераспределенные коллекции. См. Основной осколок. приоритет Настраиваемое значение, которое помогает определить, какие элементы в наборе реплик с наибольшей вероятностью станут первичными. См. Members[n].priority . привилегия Комбинация указанного ресурса и действий, разрешенных для ресурса.См. привилегию. проекция Документ, предоставленный запросу, который указывает, какие поля MongoDB возвращает в наборе результатов. См. Поля проекта для возврата из запроса. Список операторов проецирования см. в разделе Операторы проецирования. query Запрос на чтение. MongoDB использует язык запросов, подобный JSON, который включает множество операторов запросов, имена которых начинаются с символа $. В mongosh вы можете выполнять запросы, используя методы db.collection.find() и db.collection.findOne(). См. Документы запроса. оптимизатор запросов Процесс, создающий планы запросов. Для каждого запроса оптимизатор создает план, который сопоставляет запрос с индексом, который будет возвращать результаты максимально эффективно. Оптимизатор повторно использует план запроса при каждом выполнении запроса. Если коллекция значительно изменяется, оптимизатор создает новый план запроса. См. Планы запросов. форма запроса

Сочетание предиката запроса, сортировки, проекции и сопоставления. Форма запроса позволяет MongoDB идентифицировать логически эквивалентные запросы и анализировать их производительность.

Для предиката запроса важна только структура предиката, включая имена полей; значения в предикате запроса несущественны. Таким образом, предикат запроса < type: 'food' >эквивалентен предикату запроса < type: 'utensil' >для формы запроса.

Чтобы помочь идентифицировать медленные запросы с одной и той же формой запроса, начиная с MongoDB 4.2, каждая форма запроса связана с queryHash. queryHash — это шестнадцатеричная строка, представляющая хэш формы запроса и зависящая только от формы запроса.

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

СУРБД Система управления реляционными базами данных. Система управления базами данных, основанная на реляционной модели, обычно использующая SQL в качестве языка запросов. проблема чтения Указывает уровень изоляции для операций чтения. Например, вы можете использовать отчет о чтении только для чтения данных, которые были распространены на большинство узлов в наборе реплик. См. «Чтение беспокойства». блокировка чтения Общая блокировка ресурса, такого как коллекция или база данных, которая, пока удерживается, разрешает одновременное чтение, но не запись. См. Какой тип блокировки использует MongoDB?. предпочтение чтения Параметр, определяющий, как клиенты управляют операциями чтения. Параметры чтения влияют на все наборы реплик, включая наборы реплик сегментов. По умолчанию MongoDB направляет чтение на первичные ресурсы. Однако вы также можете направить чтение вторичным серверам для окончательного последовательного чтения. См. «Предпочтение чтения». восстановление Статус участника установки реплики, указывающий, что участник не готов начать нормальную деятельность вторичного или первичного. Восстановленные члены недоступны для чтения. пары реплик

Предшественник наборов реплик MongoDB.

Устарело, начиная с версии 1.6.

набор реплик Кластер серверов MongoDB, реализующий репликацию и автоматический переход на другой ресурс. Рекомендуемая стратегия репликации MongoDB. См. Репликация. репликация Функция, позволяющая нескольким серверам баз данных совместно использовать одни и те же данные, тем самым обеспечивая избыточность и облегчая балансировку нагрузки. См. Репликация. задержка репликации Промежуток времени между последней операцией в оплоге первичного сервера и последней операцией, примененной к определенному вторичному серверу. В общем, вы хотите, чтобы задержка репликации была как можно меньше. См. Задержка репликации. Резидентная память Подмножество памяти приложения, хранящееся в настоящее время в физической ОЗУ. Резидентная память — это подмножество виртуальной памяти, которое включает память, сопоставленную с физической оперативной памятью и диском. ресурс База данных, коллекция, набор коллекций или кластер. Привилегия разрешает действия над указанным ресурсом. Смотрите ресурс. роль Набор привилегий, разрешающих действия с указанными ресурсами. Роли, назначенные пользователю, определяют доступ пользователя к ресурсам и операциям. См. Безопасность. откат Процесс, который отменяет операции записи для обеспечения согласованности всех членов набора реплик. См. Откаты во время аварийного переключения набора реплик. вторичный Член набора реплик, который реплицирует содержимое базы данных master. Вторичные члены могут обрабатывать запросы на чтение, но только первичные члены могут обрабатывать операции записи. См. Второстепенные. вторичный индекс Индекс базы данных, повышающий производительность запроса за счет сведения к минимуму объема работы, которую должен выполнить механизм обработки запросов для выполнения запроса. См. Индексы. начальный список Начальный список используется драйверами и клиентами (такими как mongosh ) для первоначального обнаружения конфигурации набора реплик. Начальные списки могут быть предоставлены в виде списка пар хост:порт (см. Стандартный формат строки подключения или через записи DNS (см. Формат подключения исходного списка DNS). set name Произвольное имя, присвоенное набору реплик. Все члены набора реплик должны иметь такое же имя, как указано в параметре replSetName или параметре --replSet shard Один экземпляр mongod или набор реплик, в котором хранится часть общего набора данных сегментированного кластера.В производственной среде все осколки должны быть наборами реплик. См. Осколки. shard key Поле, которое MongoDB использует для распределения документов между членами сегментированного кластера. См. Осколочные ключи. сегментированный кластер Набор узлов, составляющих сегментированное развертывание MongoDB. Разделенный кластер состоит из серверов конфигурации, сегментов и одного или нескольких процессов маршрутизации mongos. См. Разделенные компоненты кластера. сегментирование Архитектура базы данных, которая разделяет данные по диапазонам ключей и распределяет данные между двумя или более экземплярами базы данных. Шардинг обеспечивает горизонтальное масштабирование. См. Разделение. помощник оболочки Метод в mongosh, предоставляющий более краткий синтаксис для команды базы данных. Помощники оболочки улучшают общий интерактивный опыт. См. Методы монгоша. репликация с одним мастером Топология репликации, при которой запись принимает только один экземпляр базы данных. Репликация с одним мастером обеспечивает согласованность и является топологией репликации, используемой MongoDB. См. Основной набор реплик. snappy Библиотека сжатия/распаковки, предназначенная для балансировки требований к эффективности вычислений с разумными коэффициентами сжатия. Snappy — это библиотека сжатия по умолчанию для MongoDB, использующая WiredTiger. Дополнительную информацию см. в документации по сжатию Snappy и WiredTiger. split Разделение между чанками в сегментированном кластере. См. Разделение данных с помощью фрагментов. Язык структурированных запросов SQL (SQL) — это распространенный язык программирования специального назначения, используемый для взаимодействия с реляционной базой данных, включая управление доступом, вставки, обновления, запросы и удаления. В базовом синтаксисе SQL есть некоторые схожие элементы, поддерживаемые разными поставщиками баз данных, но большинство реализаций имеют свои собственные диалекты, типы данных и интерпретации предлагаемых стандартов SQL. Сложный SQL, как правило, нельзя напрямую переносить между основными продуктами РСУБД. SQL часто используется как метоним для реляционных баз данных. Твердотельный диск SSD. Высокопроизводительный дисковый накопитель, в котором для устойчивости используется твердотельная электроника, в отличие от вращающихся пластин и подвижных головок чтения/записи, которые используются в традиционных механических жестких дисках. автономный Экземпляр mongod, работающий как отдельный сервер, а не как часть набора реплик. Чтобы преобразовать автономный набор в набор реплик, см. раздел Преобразование автономного набора в набор реплик. механизм хранения Часть базы данных, отвечающая за управление хранением данных и доступом к ним как в памяти, так и на диске. Различные механизмы хранения работают лучше для определенных рабочих нагрузок. Подробную информацию о встроенных механизмах хранения в MongoDB см. в разделе Механизмы хранения. порядок хранения См. естественный порядок. строгая согласованность Свойство распределенной системы, требующее, чтобы все элементы всегда отражали последние изменения в системе. В системе базы данных это означает, что любая система, которая может предоставлять данные, должна постоянно отражать последние записи. Альтернативное имя субъекта Альтернативное имя субъекта (SAN) — это расширение сертификата X.509, которое допускает массив значений, таких как IP-адреса и доменные имена, которые указывают, какие ресурсы может защищать один сертификат безопасности. sync Операция набора реплик, при которой элементы реплицируют данные с первичного узла. Синхронизация сначала происходит, когда MongoDB создает или восстанавливает элемент, что называется начальной синхронизацией. Затем синхронизация происходит постоянно, чтобы участник был в курсе изменений в данных набора реплик. См. Синхронизация данных набора реплик. syslog. В UNIX-подобных системах — процесс ведения журнала, обеспечивающий единый стандарт для серверов и процессов по отправке информации журнала. MongoDB предоставляет возможность отправлять выходные данные в систему системного журнала хоста. См. syslogFacility. тег

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

Изменено в версии 3.4: в MongoDB 3.4 сегментированные кластерные зоны заменяют теги.

Новое в версии 3.4: группировка документов на основе диапазонов значений ключа сегмента для данной сегментированной коллекции. Каждый сегмент в сегментированном кластере может быть связан с одной или несколькими зонами. В сбалансированном кластере MongoDB направляет операции чтения и записи, охватываемые зоной, только на те осколки внутри зоны. Дополнительную информацию см. на странице руководства по зонам.

Зоны заменяют функции, описанные тегами в MongoDB 3.2.

Новое в версии 4.2.

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

Группирование похожих клиентов и продуктов — это основная маркетинговая деятельность. Он используется, в первую очередь, в сегментации рынка. Поскольку компании не могут связаться со всеми своими клиентами, им приходится делить рынки на группы потребителей, клиентов или клиентов (называемые сегментами) со схожими потребностями и желаниями. Затем фирмы могут ориентироваться на каждый из этих сегментов, позиционируя себя в уникальном сегменте (например, Ferrari на рынке дорогих спортивных автомобилей).В то время как исследователи рынка часто формируют рыночные сегменты на основе практических соображений, отраслевой практики и мудрости, кластерный анализ позволяет формировать сегменты на основе данных, которые в меньшей степени зависят от субъективности.

Ключевые слова

Агломеративная и разделительная кластеризация Расстояние Чебычева Расстояние между кварталами Переменные кластеризации Дендрограмма Матрица расстояний Евклидово расстояние Иерархические методы и методы разбиения Диаграмма сосулек k-mean Коэффициенты соответствия Профилирование кластеров Двухэтапная кластеризация

Цели обучения

Прочитав эту главу, вы должны понять:

– Основные понятия кластерного анализа.

– Как работают базовые кластерные алгоритмы.

– Как вычислить простые результаты кластеризации вручную.

– Различные типы процедур кластеризации.

– результаты кластеризации SPSS.

Ссылки

Эндрюс Р.Л., Каррим И.С. (2003 г.) Восстановление и профилирование истинной структуры сегментации на рынках: эмпирическое исследование. Int J Res Mark 20(2):177–192 CrossRef Google Scholar

Араби П., Хьюберт Л. (1994) Кластерный анализ в маркетинговых исследованиях. В: Bagozzi RP (ред.) Передовые методы маркетинговых исследований. Блэквелл, Кембридж, стр. 160–189 Google Scholar

Калински Т., Харабаш Дж. (1974) Дендритный метод кластерного анализа. Commun Stat Theory Methods 3(1):1–27 Google Scholar

Chiu T, Fang D, Chen J, Wang Y, Jeris C (2001) Надежный и масштабируемый алгоритм кластеризации для атрибутов смешанного типа в среде большой базы данных. В: Материалы 7-й международной конференции ACM SIGKDD по открытию знаний и интеллектуальному анализу данных, Association for Computing Machinery, Сан-Франциско, Калифорния, стр. 263–268 Google Scholar

Дибб С. (1999) Критерии, определяющие внедрение сегментации: обзор доказательств. J Strateg Mark 7(2):107–129 CrossRef Google Scholar

Долникар С. (2003 г.) Использование кластерного анализа для сегментации рынка – типичные заблуждения, выявленные методологические недостатки и некоторые рекомендации по улучшению. Australas J Mark Res 11(2):5–12 CrossRef Google Scholar

Долникар С., Грюн Б. (2009 г.) Сложная «сегментация кластеров факторов». J Travel Res 47(1):63–71 CrossRef Google Scholar

Долникар С., Лазаревски К. (2009) Методологические причины разделения теории и практики в сегментации рынка. J Mark Manage 25(3–4):357–373 CrossRef Google Scholar

Formann AK (1984) Die Latent-Class-Analyse: Einführung in die Theorie und Anwendung. Белтц, Вайнхайм Google Scholar

Кауфман Л., Руссиу П.Дж. (2005) Поиск групп в данных. Введение в кластерный анализ. Уайли, Хобокен, исследователь Google, штат Нью-Йорк

Кохонен Т. (1982) Самоорганизованное формирование топологически правильных карт признаков. Biol Cybern 43(1):59–69 CrossRef Google Scholar

Котлер П., Келлер К.Л. (2009) Управление маркетингом, 13-е изд. Пирсон Прентис Холл, река Аппер-Сэдл, Нью-Джерси Google Scholar

Ларсон Дж. С., Брэдлоу Э. Т., Фейдер П. С. (2005 г.) Исследовательский анализ путей совершения покупок в супермаркетах. Int J Res Mark 22(4):395–414 CrossRef Google Scholar

Миллиган Г.В., Купер М. (1985) Исследование процедур определения количества кластеров в наборе данных. Психометрика 50(2):159–179 CrossRef Google Scholar

Миллиган Г.В., Купер М. (1988) Исследование стандартизации переменных. J Классификация 5(2):181–204 CrossRef Google Scholar

Мороко Л., Uncles MD (2009 г.) Брендинг работодателя и сегментация рынка. J Brand Manage 17(3):181–196 CrossRef Google Scholar

Окадзаки С. (2006 г.) Что мы знаем о пользователях мобильного Интернета? Кластерный анализ. Inf Manage 43(2):127–141 CrossRef Google Scholar

Punji G Stewart DW (1983) Кластерный анализ в маркетинговых исследованиях: обзор и предложения по применению. J Mark Res 20(2):134–148 CrossRef Google Scholar

Шеппард А. (1996) Последовательность факторного анализа и кластерного анализа: различия в сегментации и размерности за счет использования необработанных и факторных оценок», анализ туризма. Анализ туризма 1 (вступительный том): 49–57 Google Scholar

Тонкс Д.Г. (2009 г.) Валидность и структура сегментов рынка. J Mark Manage 25(3–4):341–356 CrossRef Google Scholar

Ведель М., Камакура В.А. (2000) Сегментация рынка: концептуальные и методологические основы, 2-е изд. Клувер, Бостон, NE CrossRef Google Scholar

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

Последипломная программа по искусственному интеллекту и машинному обучению

Типы кластеризации

Кластеризация — это тип обучения без учителя, при котором точки данных группируются в разные наборы в зависимости от степени их сходства.

  • Иерархическая кластеризация
  • Разделение кластера

Иерархическая кластеризация подразделяется на:

  • Агломеративная кластеризация
  • Разделительная кластеризация

Разбиение на кластеры подразделяется на:

  • Кластеризация K-средних
  • Кластеризация нечетких C-средних

Иерархическая кластеризация

Иерархическая кластеризация использует древовидную структуру, например:

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

Разделительная кластеризация – это нисходящий подход. Мы начинаем со всего набора и продолжаем делить его на последовательно меньшие кластеры, как вы можете видеть ниже:

Разделение кластеров

Кластеризация разделов делится на два подтипа: кластеризация K-средних и нечеткие C-средние.

При кластеризации k-средних объекты делятся на несколько кластеров, обозначенных числом "K". Поэтому, если мы говорим, что K = 2, объекты делятся на два кластера, c1 и c2, как показано:

БЕСПЛАТНЫЙ сертификационный курс по машинному обучению

Здесь функции или характеристики сравниваются, и все объекты, имеющие схожие характеристики, группируются вместе.

Нечеткие c-средние очень похожи на k-средние в том смысле, что они группируют вместе объекты со схожими характеристиками. В кластеризации k-средних один объект не может принадлежать двум разным кластерам. Но в c-средних объекты могут принадлежать более чем одному кластеру, как показано.

Что подразумевается под алгоритмом кластеризации K-средних?

Кластеризация K-средних – это алгоритм обучения без учителя. Для этой кластеризации нет размеченных данных, в отличие от обучения с учителем. K-Means выполняет разделение объектов на кластеры, которые имеют сходство и отличаются от объектов, принадлежащих другому кластеру.

Термин «К» — это число. Вам нужно сообщить системе, сколько кластеров вам нужно создать. Например, K = 2 относится к двум кластерам. Существует способ узнать, какое значение K является лучшим или оптимальным для заданных данных.

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

Давайте рассмотрим шаги по созданию этих кластеров.

Решение:

Назначить точки данных

Здесь у нас есть набор данных, нанесенный на координаты «x» и «y». Информация по оси Y относится к набранным очкам, а по оси X — к калиткам, взятым игроками.

Если мы нанесем данные на график, это будет выглядеть так:

Выполнить кластеризацию

Нам нужно создать кластеры, как показано ниже:

Рассмотрев тот же набор данных, давайте решим задачу, используя кластеризацию K-средних (приняв K = 2).

Первый шаг в кластеризации k-средних — это случайное распределение двух центроидов (при K=2). Две точки назначаются как центроиды. Обратите внимание, что точки могут быть где угодно, так как они являются случайными точками. Их называют центроидами, но изначально они не являются центральной точкой данного набора данных.

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

Бесплатный курс: алгоритмы машинного обучения

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

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

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

Применения кластеризации K-средних

Кластеризация K-средних используется в различных примерах или бизнес-кейсах из реальной жизни, например:

  • Успеваемость в учебе
  • Системы диагностики
  • Поисковые системы
  • Беспроводные сенсорные сети

Академическая успеваемость

На основе оценок учащиеся распределяются по категориям, таким как A, B или C.

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

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

Беспроводные сенсорные сети

Алгоритм кластеризации играет роль поиска головок кластеров, которые собирают все данные в соответствующем кластере.

Измерение расстояния

Показатель расстояния определяет сходство между двумя элементами и влияет на форму кластеров.

Кластеризация K-средних поддерживает различные виды мер расстояния, например:

  • Евклидова мера расстояния
  • Манхэттенская мера расстояния
  • Квадрат евклидовой меры расстояния
  • Измерение косинусного расстояния

Евклидова мера расстояния

Наиболее распространенным случаем является определение расстояния между двумя точками. Если у нас есть точка P и точка Q, евклидово расстояние представляет собой обычную прямую линию. Это расстояние между двумя точками в евклидовом пространстве.

Формула для расстояния между двумя точками показана ниже:

Квадрат евклидовой меры расстояния

Это идентично евклидову измерению расстояния, но в конце не извлекается квадратный корень. Формула показана ниже:

Манхэттенское расстояние

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

Обратите внимание, что мы берем абсолютное значение, чтобы не учитывать отрицательные значения.

Формула показана ниже:

Измерение косинусного расстояния

В этом случае мы берем угол между двумя векторами, образованными соединением исходной точки. Формула показана ниже:

Как работает кластеризация K-средних?

На приведенной ниже блок-схеме показано, как работает кластеризация k-средних:

Целью алгоритма K-средних является поиск кластеров в заданных входных данных. Есть несколько способов сделать это. Мы можем использовать метод проб и ошибок, указав значение K (например, 3,4, 5). По мере продвижения мы продолжаем изменять значение, пока не получим лучшие кластеры.

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

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

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

Если центр тяжести перемещается, итерация продолжается, что указывает на отсутствие сходимости. Но как только центроид перестанет двигаться (что означает, что процесс кластеризации сошелся), он отразит результат.

Давайте воспользуемся примером визуализации, чтобы лучше понять это.

Инженер искусственного интеллекта

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

Шаг 1:

Метод локтя — лучший способ определить количество кластеров. Метод локтя представляет собой запуск кластеризации K-средних в наборе данных.

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

WSS измеряется для каждого значения K. Значение K, которое имеет наименьшее количество WSS, принимается за оптимальное значение.

Теперь мы нарисуем кривую между WSS и количеством кластеров.

Здесь WSS откладывается по оси Y, а количество кластеров — по оси X.

Вы можете видеть очень постепенное изменение значения WSS по мере увеличения значения K с 2.

Итак, вы можете принять значение точки локтя в качестве оптимального значения K. Оно должно быть либо два, либо три, либо максимум четыре. Но, кроме того, увеличение количества кластеров кардинально не меняет значение в WSS, оно стабилизируется.

Шаг 2:

Предположим, что это наши точки доставки:

Мы можем случайным образом инициализировать две точки, называемые центроидами кластера.

Здесь C1 и C2 — центроиды, назначенные случайным образом.

Шаг 3:

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

Вот как выполняется начальная группировка:

Шаг 4:

Вычислите фактический центроид точек данных для первой группы.

Шаг 5:

Переместите случайный центроид в фактический центроид.

Шаг 6:

Вычислите фактический центроид точек данных для второй группы.

Шаг 7:

Переместите случайный центроид в фактический центроид.

Шаг 8:

Когда кластер становится статическим, говорят, что алгоритм k-средних сходится.

Последний кластер с центроидами c1 и c2 показан ниже:

Бесплатный курс: Введение в ИИ

Алгоритм кластеризации K-средних

Допустим, у нас есть x1, x2, x3……… x(n) в качестве входных данных, и мы хотим разбить их на K кластеров.

Шаг 1. Выберите K случайных точек в качестве центров кластеров, называемых центроидами.

Шаг 2. Назначьте каждый x(i) ближайшему кластеру, реализуя евклидово расстояние (т. е. вычисляя его расстояние до каждого центроида)

Шаг 3. Определите новые центроиды, взяв среднее значение присвоенных баллов.

Шаг 4. Продолжайте повторять шаги 2 и 3, пока не будет достигнута конвергенция.

Давайте подробно рассмотрим каждый из этих шагов.

Шаг 1:

Мы случайным образом выбираем K (центроиды). Назовем их c1,c2. ck, и мы можем сказать, что

Где C — множество всех центроидов.

Шаг 2:

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

Где dist() — евклидово расстояние.

Здесь мы вычисляем расстояние каждого значения x от каждого значения c, т. е. расстояние между x1-c1, x1-c2, x1-c3 и так далее. Затем мы находим наименьшее значение и присваиваем x1 этому конкретному центроиду.

Аналогичным образом находим минимальное расстояние для x2, x3 и т. д.

Шаг 3:

Мы идентифицируем фактический центр тяжести, взяв среднее значение всех точек, присвоенных этому кластеру.

Где Si — набор всех точек, присвоенных i-му кластеру.

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

Шаг 4:

Повторяйте шаги 2 и 3, пока не будет достигнуто сходимость.

Как выбрать значение «Количество кластеров K» в кластеризации K-средних?

Хотя для выбора оптимального количества кластеров доступно множество вариантов, метод локтя является одним из самых популярных и подходящих методов.Метод локтя использует идею значения WCSS, что является сокращением от суммы квадратов внутри кластера. WCSS определяет общее количество вариаций в кластере. Это формула, используемая для расчета значения WCSS (для трех кластеров), предоставленная Javatpoint:

WCSS= ∑Pi на расстоянии Cluster1(Pi C1)2 +∑Pi на расстоянии Cluster2(Pi C2)2+∑Pi на расстоянии Cluster3(Pi C3)2

Реализация алгоритма кластеризации K-средних на Python

Вот как использовать Python для реализации алгоритма кластеризации K-средних. Вот шаги, которые вам необходимо предпринять:

  • Предварительная обработка данных
  • Поиск оптимального количества кластеров методом локтя
  • Обучение алгоритма K-средних на обучающем наборе данных
  • Визуализация кластеров
<р>1. Предварительная обработка данных. Импортируйте библиотеки, наборы данных и извлеките независимые переменные.

импортировать numpy как nm

импортировать matplotlib.pyplot как mtp

импортировать панд как pd

x = набор данных.iloc[:, [3, 4]].значения

<р>2. Найдите оптимальное количество кластеров, используя метод локтя. Вот код, который вы используете:

из sklearn.cluster импортировать KMeans

для i в диапазоне (1, 11):

kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42)

mtp.plot(диапазон (1, 11), wcss_list)

mtp.title('График метода Elobw')

mtp.xlabel('Количество кластеров (k)')

<р>3. Обучите алгоритм K-средних на обучающем наборе данных. Используйте те же две строки кода, что и в предыдущем разделе. Однако вместо i используйте 5, потому что нужно сформировать 5 кластеров. Вот код:

kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42)

<р>4. Визуализируйте кластеры. Поскольку в этой модели пять кластеров, нам нужно визуализировать каждый из них.

mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'желтый', label = 'Центроид')

mtp.title('Группы клиентов')

mtp.xlabel('Годовой доход (тыс.$)')

mtp.ylabel('Оценка расходов (1–100)')

Код предоставлен Javatpoint.

Демонстрация: Кластеризация K-средних

Постановка задачи. Компания Walmart хочет открыть сеть магазинов по всему штату Флорида и найти магазины в оптимальном месте, чтобы максимизировать доход.

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

Решение. Такая организация, как Walmart, является гигантом электронной коммерции. У них уже есть адреса их клиентов в их базе данных. Таким образом, они могут использовать эту информацию и выполнить кластеризацию K-средних, чтобы найти оптимальное местоположение.

Изучите концепции машинного обучения и узнайте, как оно меняет цифровой мир, с помощью сертификационного курса по машинному обучению. Зарегистрируйтесь сейчас!

Заключение

Считающиеся профессией будущего, инженеры по машинному обучению востребованы и высокооплачиваемы. В отчете Marketwatch прогнозируется, что темпы роста машинного обучения превысят 45% в период с 2017 по 2025 год. Итак, зачем ограничивать свое обучение только алгоритмами кластеризации K-средних? Запишитесь на курс Simplilearn по машинному обучению и расширьте свои знания в более широких концепциях машинного обучения. Пройдите сертификацию и станьте частью таланта в области искусственного интеллекта, которого компании всегда ждут с нетерпением.

Найдите наш онлайн-учебный курс для аспирантов по искусственному интеллекту и машинному обучению в ведущих городах:

< td>Ваш город
ИмяДатаМесто
Программа последипломного образования в области искусственного интеллекта и машинного обучения Когорта начинается 4 апреля 2022 г.,
группа выходного дня
Ваш городПодробнее
Программа последипломного образования в области искусственного интеллекта и машинного обучения Когорта начинается 5 апреля 2022 г.,
группа выходного дня
Ваш городПросмотреть подробности
Программа последипломного образования в области искусственного интеллекта и машинного обучения Когорта начинается 15 апреля 2022 г.,
группа выходного дня
Подробнее

Об авторе

Простое обучение

Simplilearn — один из ведущих мировых поставщиков онлайн-обучения по цифровому маркетингу, облачным вычислениям, управлению проектами, науке о данных, ИТ, разработке программного обеспечения и многим другим новым технологиям.

Используя kubeadm, вы можете создать минимально жизнеспособный кластер Kubernetes, который соответствует рекомендациям. На самом деле вы можете использовать kubeadm для настройки кластера, который пройдет тесты на соответствие Kubernetes. kubeadm также поддерживает другие функции жизненного цикла кластера, такие как маркеры начальной загрузки и обновления кластера.

Инструмент kubeadm хорош, если вам нужно:

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

Вы можете установить и использовать kubeadm на разных компьютерах: на ноутбуке, на наборе облачных серверов, на Raspberry Pi и т. д. Независимо от того, выполняете ли вы развертывание в облаке или локально, вы можете интегрировать kubeadm в системы подготовки, такие как Ansible или Terraform.

Прежде чем начать

Чтобы следовать этому руководству, вам необходимо:

  • Один или несколько компьютеров с операционной системой Linux, совместимой с deb/rpm; например: Ubuntu или CentOS.
  • Оперативная память объемом 2 ГиБ или более на каждый компьютер — меньше места не хватит для ваших приложений.
  • Не менее 2 ЦП на машине, которую вы используете в качестве узла плоскости управления.
  • Полное сетевое подключение между всеми машинами в кластере. Вы можете использовать общедоступную или частную сеть.

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

Политика поддержки версии Kubernetes и перекоса версии применяется как к kubeadm, так и к Kubernetes в целом. Проверьте эту политику, чтобы узнать, какие версии Kubernetes и kubeadm поддерживаются. Эта страница написана для Kubernetes версии 1.23.

Общее состояние функций инструмента kubeadm – общедоступное (GA). Некоторые подфункции все еще находятся в активной разработке. Реализация создания кластера может немного измениться по мере развития инструмента, но в целом реализация должна быть достаточно стабильной.

Цели

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

Инструкции

Установка kubeadm на хосты

Если вы уже установили kubeadm, запустите apt-get update && apt-get upgrade или yum update, чтобы получить последнюю версию kubeadm.

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

Подготовка необходимых образов контейнеров

Этот шаг необязателен и применяется только в том случае, если вы хотите, чтобы kubeadm init и kubeadm join не загружали образы контейнеров по умолчанию, размещенные на k8s.gcr.io .

В Kubeadm есть команды, которые могут помочь вам предварительно загрузить необходимые образы при создании кластера без подключения к Интернету на его узлах. Дополнительные сведения см. в разделе Запуск kubeadm без подключения к Интернету.

Kubeadm позволяет использовать собственный репозиторий образов для необходимых образов. Дополнительные сведения см. в разделе Использование пользовательских изображений.

Инициализация узла плоскости управления

Узел уровня управления — это компьютер, на котором работают компоненты уровня управления, включая etcd (базу данных кластера) и сервер API (с которым взаимодействует инструмент командной строки kubectl).

  1. (Рекомендуется) Если вы планируете обновить этот кластер kubeadm с одной плоскостью управления до высокой доступности, вам следует указать параметр --control-plane-endpoint, чтобы установить общую конечную точку для всех узлов плоскости управления. Такой конечной точкой может быть DNS-имя или IP-адрес балансировщика нагрузки.
  2. Выберите сетевое дополнение Pod и проверьте, требует ли оно передачи каких-либо аргументов в kubeadm init . В зависимости от того, какого стороннего поставщика вы выберете, вам может потребоваться установить для параметра --pod-network-cidr значение, зависящее от поставщика. См. раздел Установка сетевого дополнения Pod.
  3. (Необязательно) Начиная с версии 1.14, kubeadm пытается обнаружить среду выполнения контейнера в Linux, используя список известных путей к сокетам домена. Чтобы использовать другую среду выполнения контейнера или если на подготовленном узле установлено несколько контейнеров, укажите аргумент --cri-socket для kubeadm init . См. раздел Установка среды выполнения.
  4. (Необязательно) Если не указано иное, kubeadm использует сетевой интерфейс, связанный со шлюзом по умолчанию, для установки рекламного адреса для этого конкретного сервера API узла плоскости управления. Чтобы использовать другой сетевой интерфейс, укажите аргумент --apiserver-advertise-address= для kubeadm init. Чтобы развернуть кластер IPv6 Kubernetes с использованием адресации IPv6, необходимо указать адрес IPv6, например --apiserver-advertise-address=fd00::101

Чтобы инициализировать запуск узла плоскости управления:

Соображения по поводу apiserver-advertise-address и ControlPlaneEndpoint

В то время как --apiserver-advertise-address можно использовать для установки рекламного адреса для этого конкретного сервера API узла плоскости управления, --control-plane-endpoint можно использовать для установки общей конечной точки для всех узлов плоскости управления. .

--control-plane-endpoint позволяет использовать как IP-адреса, так и DNS-имена, которые могут сопоставляться с IP-адресами.Обратитесь к сетевому администратору, чтобы оценить возможные решения в отношении такого сопоставления.

Вот пример сопоставления:

Где 192.168.0.102 — это IP-адрес этого узла, а конечная точка кластера — это пользовательское DNS-имя, которое сопоставляется с этим IP-адресом. Это позволит вам передать --control-plane-endpoint=cluster-endpoint в kubeadm init и передать то же DNS-имя в kubeadm join . Позже вы можете изменить конечную точку кластера, чтобы она указывала на адрес вашего балансировщика нагрузки в сценарии высокой доступности.

Превращение одного кластера плоскости управления, созданного без --control-plane-endpoint, в высокодоступный кластер не поддерживается kubeadm.

Подробнее

Дополнительную информацию об аргументах инициализации kubeadm см. в справочном руководстве kubeadm.

Чтобы настроить kubeadm init с помощью файла конфигурации, см. Использование kubeadm init с файлом конфигурации.

Чтобы настроить компоненты уровня управления, в том числе дополнительное назначение IPv6 тесту живучести для компонентов уровня управления и сервера etcd, укажите дополнительные аргументы для каждого компонента, как описано в пользовательских аргументах.

Чтобы снова запустить kubeadm init, необходимо сначала разобрать кластер.

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

kubeadm init сначала выполняет серию предварительных проверок, чтобы убедиться, что машина готова к запуску Kubernetes. Эти предварительные проверки выдают предупреждения и завершают работу при ошибках. Затем kubeadm init загружает и устанавливает компоненты плоскости управления кластером. Это займет несколько минут. После завершения вы должны увидеть:

Чтобы заставить kubectl работать для пользователя без полномочий root, выполните следующие команды, которые также являются частью вывода инициализации kubeadm:

В качестве альтернативы, если вы являетесь пользователем root, вы можете запустить:

Предупреждение: Kubeadm подписывает сертификат в admin.conf, чтобы иметь Subject: O = system:masters, CN = kubernetes-admin . system:masters — это группа суперпользователей с разбивкой по стеклам, которая обходит уровень авторизации (например, RBAC). Не передавайте никому файл admin.conf и вместо этого предоставьте пользователям настраиваемые разрешения, создав для них файл kubeconfig с помощью пользовательской команды kubeadm kubeconfig. Дополнительные сведения см. в разделе Создание файлов kubeconfig для дополнительных пользователей.

Запишите команду соединения kubeadm, которую выводит kubeadm init. Эта команда нужна вам для присоединения узлов к вашему кластеру.

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

Установка сетевого дополнения Pod

В этом разделе содержится важная информация о настройке сети и порядке развертывания. Прежде чем продолжить, внимательно прочитайте все эти советы.

Вы должны развернуть надстройку сети Pod на основе Container Network Interface (CNI), чтобы ваши Pod могли взаимодействовать друг с другом. Кластер DNS (CoreDNS) не запустится, пока сеть не будет установлена.

Позаботьтесь о том, чтобы ваша сеть Pod не пересекалась ни с одной из хост-сетей: вы, вероятно, столкнетесь с проблемами, если есть какое-либо перекрытие. (Если вы обнаружите коллизию между предпочитаемой сетью Pod вашего сетевого плагина и некоторыми из ваших хост-сетей, вам следует подумать о подходящем блоке CIDR для использования вместо этого, а затем использовать его во время инициализации kubeadm с --pod-network-cidr и в качестве замены в YAML вашего сетевого плагина).

По умолчанию kubeadm настраивает ваш кластер на использование и принудительное использование RBAC (управление доступом на основе ролей). Убедитесь, что ваш сетевой подключаемый модуль Pod поддерживает RBAC, а также любые манифесты, которые вы используете для его развертывания.

Если вы хотите использовать IPv6 — двухстековую или одинарную IPv6-сеть — для своего кластера, убедитесь, что ваш сетевой подключаемый модуль Pod поддерживает IPv6. Поддержка IPv6 была добавлена ​​в CNI в версии 0.6.0.

Примечание. Kubeadm не должен зависеть от CNI, а проверка поставщиков CNI выходит за рамки нашего текущего тестирования e2e. Если вы обнаружите проблему, связанную с подключаемым модулем CNI, вы должны зарегистрировать тикет в соответствующей системе отслеживания проблем, а не в системах отслеживания проблем kubeadm или kubernetes.

Несколько внешних проектов предоставляют сети Kubernetes Pod с использованием CNI, некоторые из которых также поддерживают сетевую политику.

См. список надстроек, реализующих сетевую модель Kubernetes.

Сетевую надстройку Pod можно установить с помощью следующей команды на узле плоскости управления или на узле с учетными данными kubeconfig:

Вы можете установить только одну сеть Pod на кластер.

После того как сеть Pod установлена, вы можете убедиться, что она работает, проверив, что CoreDNS Pod работает в выходных данных kubectl get pods --all-namespaces . И как только модуль CoreDNS будет запущен и запущен, вы можете продолжить, присоединив свои узлы.

Если ваша сеть не работает или CoreDNS не находится в состоянии «Работает», ознакомьтесь с руководством по устранению неполадок для kubeadm .

Ярлыки управляемых узлов

По умолчанию kubeadm включает контроллер допуска NodeRestriction, который ограничивает, какие метки могут самостоятельно применяться kubelets при регистрации узла. Документация контроллера допуска описывает, какие метки разрешено использовать с параметром kubelet --node-labels. Метка node-role.kubernetes.io/control-plane является такой ограниченной меткой, и kubeadm вручную применяет ее с помощью привилегированного клиента после создания узла. Чтобы сделать это вручную, вы можете сделать то же самое с помощью метки kubectl и убедиться, что он использует привилегированный kubeconfig, такой как управляемый kubeadm /etc/kubernetes/admin.conf .

Изоляция узла плоскости управления

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

Вывод выглядит примерно так:

Это удалит пометку node-role.kubernetes.io/master со всех узлов, на которых она есть, включая узел плоскости управления, а это означает, что планировщик сможет планировать поды везде.

Присоединение к узлам

На узлах выполняются ваши рабочие нагрузки (контейнеры, модули и т. д.). Чтобы добавить новые узлы в кластер, выполните следующие действия для каждой машины:

SSH для подключения к машине

Стать root (например, sudo su - )

Запустите команду, выведенную kubeadm init. Например:

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

Выход примерно такой:

По умолчанию срок действия токенов истекает через 24 часа. Если вы присоединяете узел к кластеру после истечения срока действия текущего токена, вы можете создать новый токен, выполнив следующую команду на узле плоскости управления:

Выход примерно такой:

Если у вас нет значения --discovery-token-ca-cert-hash , его можно получить, выполнив следующую цепочку команд на узле плоскости управления:

Вывод аналогичен:

Примечание. Чтобы указать кортеж IPv6 для : , адрес IPv6 должен быть заключен в квадратные скобки, например: [fd00::101]:2073 .

Вывод должен выглядеть примерно так:

Через несколько секунд вы должны заметить этот узел в выводе kubectl get узлов при запуске на узле плоскости управления.

Примечание. Поскольку узлы кластера обычно инициализируются последовательно, все модули CoreDNS, скорее всего, будут работать на первом узле уровня управления. Чтобы обеспечить более высокую доступность, перебалансируйте блоки CoreDNS с помощью kubectl -n kube-system rollout перезапустите развертывание coredns после присоединения хотя бы одного нового узла.

(Необязательно) Управление кластером с машин, отличных от узла плоскости управления

Чтобы заставить kubectl на каком-либо другом компьютере (например, ноутбуке) общаться с вашим кластером, вам нужно скопировать файл администратора kubeconfig с вашего узла плоскости управления на вашу рабочую станцию ​​следующим образом:

В приведенном выше примере предполагается, что доступ по SSH включен для root. Если это не так, вы можете скопировать файл admin.conf, чтобы он был доступен другому пользователю, а scp использовать вместо этого другого пользователя.

Файл admin.conf предоставляет пользователю права суперпользователя в кластере. Этот файл следует использовать с осторожностью. Для обычных пользователей рекомендуется создать уникальные учетные данные, которым вы предоставляете привилегии. Вы можете сделать это с помощью команды kubeadm alpha kubeconfig user --client-name. Эта команда распечатает файл KubeConfig в STDOUT, который вы должны сохранить в файл и передать своему пользователю. После этого предоставьте привилегии с помощью kubectl create (cluster)rolebinding .

(Необязательно) Прокси-сервер API для локального хоста

Если вы хотите подключиться к серверу API из-за пределов кластера, вы можете использовать прокси-сервер kubectl:

Очистить

Если для тестирования вы использовали одноразовые серверы для своего кластера, вы можете отключить их и больше не выполнять очистку. Вы можете использовать команду kubectl config delete-cluster, чтобы удалить локальные ссылки на кластер.

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

Удалить узел

Поговорив с узлом уровня управления с соответствующими учетными данными, выполните:

Перед удалением узла сбросьте состояние, установленное kubeadm:

Процесс сброса не сбрасывает и не очищает правила iptables или таблицы IPVS. Если вы хотите сбросить настройки iptables, вы должны сделать это вручную:

Если вы хотите сбросить таблицы IPVS, вы должны выполнить следующую команду:

Теперь удалите узел:

Если вы хотите начать сначала, запустите kubeadm init или kubeadm join с соответствующими аргументами.

Очистить плоскость управления

Вы можете использовать сброс kubeadm на хосте уровня управления, чтобы запустить очистку с максимальной эффективностью.

Дополнительную информацию об этой подкоманде и ее параметрах см. в справочной документации по сбросу kubeadm.

Что дальше

  • Убедитесь, что ваш кластер работает правильно с помощью Sonobuoy, чтобы получить подробную информацию об обновлении вашего кластера с помощью kubeadm.
  • Узнайте о расширенном использовании kubeadm в справочной документации kubeadm
  • Подробнее о концепциях Kubernetes и kubectl.
  • Дополнительный список сетевых дополнений Pod см. на странице Cluster Networking. изучить другие надстройки, в том числе инструменты для ведения журнала, мониторинга, сетевой политики, визуализации и управления кластером Kubernetes.
  • Настройте, как ваш кластер обрабатывает журналы событий кластера и приложений, работающих в модулях. Ознакомьтесь с архитектурой ведения журналов, чтобы узнать, что с этим связано.

Отзыв

Политика перекоса версий

Инструмент kubeadm версии 1.23 может развертывать кластеры с плоскостью управления версии 1.23 или 1.22. kubeadm v1.23 также может обновить существующий созданный kubeadm кластер версии v1.22.

Из-за этого мы не можем заглянуть в будущее, и Kubeadm CLI версии 1.23 может или не сможет развертывать кластеры версии 1.24.

Эти ресурсы предоставляют дополнительную информацию о поддерживаемых версиях несовпадения между kubelets и плоскостью управления, а также другими компонентами Kubernetes:

Ограничения

Устойчивость кластера

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

Регулярно создавайте резервные копии etcd. Каталог данных etcd, настроенный kubeadm, находится в /var/lib/etcd на узле плоскости управления.

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

Совместимость с платформами

Пакеты и двоичные файлы kubeadm deb/rpm созданы для amd64, arm (32-разрядная версия), arm64, ppc64le и s390x в соответствии с многоплатформенным предложением.

Начиная с версии 1.12 также поддерживаются многоплатформенные образы контейнеров для плоскости управления и дополнений.

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

Устранение неполадок

Если у вас возникли трудности с kubeadm, обратитесь к нашей документации по устранению неполадок.

Отзыв

Была ли эта страница полезной?

Спасибо за отзыв. Если у вас есть конкретный вопрос о том, как использовать Kubernetes, на который можно ответить, задайте его на Stack Overflow. Откройте задачу в репозитории GitHub, если хотите сообщить о проблеме или предложить улучшение.

Читайте также: