Как установить kubectl в windows
Инструмент командной строки Kubernetes kubectl позволяет запускать команды для кластеров Kubernetes. kubectl можно использовать для развертывания приложений, проверки и управления ресурсов кластера, а также для просмотра логов. Полный список операций kubectl доступен в официальной документации kubectl.
Подготовка к работе
Используемая мажорная версия kubectl не должна отличаться от той, которая используется в кластере. Например, версия v1.19 может работать с версиями v1.16 и v1.15. Использование последней версии kubectl поможет избежать непредвиденных проблем.
Установка kubectl
С помощью curl
Загрузить последнюю версию:
Сделать двоичный файл kubectl исполняемым:
Переместить двоичный файл в директорию из переменной окружения PATH:
Убедиться, что установлена последняя версия:
С помощью пакетного менеджера
Для Ubuntu, Debian и HypriotOS
Для CentOS, RHEL и Fedora
С помощью curl
Загрузить последнюю версию:
Сделать двоичный файл kubectl исполняемым:
Переместить двоичный файл в директорию из переменной окружения PATH:
Убедиться, что установлена последняя версия:
С помощью Homebrew
Выполнить команду установки:
Убедиться, что установлена последняя версия:
С помощью стандартных средств
- Загрузить последнюю версию v1.19.0 по ссылке.
- Указать директорию с двоичным файлом, куда произвелась установка, в переменную окружения PATH: "Пуск->Этот компьютер->Свойства->Дополнительные параметры системы->Переменные среды->Системные переменные->PATH"
- Убедиться, что версия kubectl совпадает загружённой:
Примечание
Docker Desktop for Windows добавляет собственную версию kubectl в переменную окружения PATH. Если установлен Docker Desktop, необходимо поместить путь к установленному двоичному файлу перед записью, добавленной установщиком Docker Desktop, либо же удалить вовсе kubectl, поставляемый вместе с Docker Desktop.
С помощью PowerShell из PSGallery
При использовании менеджера пакетов Powershell Gallery в Windows, можно установить и обновить kubectl с помощью Powershell.
Выполнить команды по установке (обязательно указать DownloadLocation):
Примечание
Если вы не указать DownloadLocation, то kubectl будет установлен во временную директорию пользователя.
Установщик создаст $HOME/.kube вместе с конфигурационным файлом.
Убедиться, что установлена последняя версия:
Примечание
Обновить kubectl можно путём выполнения двух команд, перечисленных в шаге 1.
Импорт конфигурации
Чтобы kubectl мог найти и получить доступ к кластеру Kubernetes, необходим конфигурационный файл kubeconfig, который создаётся автоматически при создании кластера и загружается на локальный компьютер из панели MCS. Импорт конфигурационного файла *.yaml осуществляется с помощью команды
Для Linux это будет выглядеть так:
Для Windows PowerShell так:
Подключение к кластеру
Посмотреть на состояние кластера, чтобы убедиться, что kubectl правильно сконфигурирован можно при помощи команды:
Если в результате выполнения команды виден URL-ответ, значит kubectl корректно настроен для работы с кластером.
Если команда kubectl cluster-info возвращает URL-ответ, но подключиться к своему кластеру не удается, следует воспользоваться командой:
Kubernetes — это предназначенный для контейнерной оркестровки фреймворк с открытым исходным кодом. Он был создан с учетом богатейшего опыта Google в области создания сред управления контейнерами и позволяет выполнять контейнеризованные приложения в готовом к промышленной эксплуатации кластере. В механизме Kubernetes много движущихся частей и способов их настройки — это различные системные компоненты, драйверы сетевого транспорта, утилиты командной строки, не говоря уже о приложениях и рабочих нагрузках.
По ходу этой статьи мы установим Kubernetes 1.6 на реальную (не виртуальную) машину под управлением Ubuntu 16.04 примерно за 10 минут. В результате у вас появится возможность начать изучать взаимодействие с Kubernetes посредством его CLI kubectl .
Обзор Kubernetes:
Компоненты Kubernetes, автор Julia Evans
Что нам понадобится
Для развертывания кластера я предлагаю использовать физическую машину от сервиса Packet. Вы также можете проделать описанные мною шаги в виртуальной машине или на домашнем компьютере, если на них в качестве операционной системы установлена Ubuntu 16.04.
При настройке хоста не забудьте выбрать в качестве ОС Ubuntu 16.04. В отличие от Docker Swarm Kubernetes лучше работает с проверенными временем релизами Docker. К счастью, репозиторий Ubuntu apt содержит Docker 1.12.6.
Не обновляйте Docker на этом хосте. Использовать более свежие версии для сборки образов можно в инструментарии CI или на ноутбуке.
Установка
Теперь обновите список пакетов командой apt-get update .
- Установите kubelet , kubeadm и kubernetes-cni .
kubelet отвечает за выполнение контейнеров на хостах кластера. kubeadm является удобной утилитой для настройки различных компонентов, составляющих кластер, а kubernetes-cni нужен для работы с сетевыми компонентами.
CNI расшифровывается как Container Networking Interface и представляет из себя спецификацию, определяющую взаимодействие сетевых драйверов с Kubernetes.
kubeadm предназначен для создания сразу «из коробки» безопасного кластера с помощью таких механизмов, как RBAC.
В Docker Swarm по умолчанию есть драйвер оверлейной сети, но с kubeadm решение остается за нами. Команда все еще работает над обновлением инструкций, поэтому я покажу, как использовать драйвер, наиболее похожий на докеровский, — flannel от CoreOS.
Flannel
Flannel позволяет организовать программно определяемую сеть (Software Defined Network, SDN), используя для этого модули ядра Linux overlay и ipvlan .
В Packet машина подключается к двум сетям: первая — это сеть дата-центра, которая соединяет хосты, входящие в определенный регион и проект, а вторая — это выход в Интернет. Брандмауэр по умолчанию не настроен, поэтому при желании ограничить сетевую активность придется настроить iptables или ufw вручную.
Внутренний IP-адрес можно выяснить с помощью ifconfig :
Воспользуемся этим внутренним IP-адресом для трансляции Kubernetes API.
- --pod-network-cidr необходим драйверу flannel и определяет адресное пространство для контейнеров.
- --apiserver-advertise-address определяет IP-адрес, который Kubernetes будет афишировать в качестве своего API-сервера.
- --skip-preflight-checks позволяет kubeadm не проверять ядро хоста на наличие требуемых функций. Это нужно из-за отсутствия метаданных ядра на хостах Packet.
- --kubernetes-version stable-1.6 жестко определяет версию кластера (в данном случае 1.6); при желании использовать, например, Kubernetes 1.7 пропустите этот флаг.
Вот что мы должны получить на выходе:
В установке Ubuntu от Packet нет обычного пользователя, поэтому давайте создадим его.
- Настройте переменные окружения для нового пользователя.
Войдите под учетной записью нового пользователя: sudo su packet .
- Примените конфигурацию сети для подов (flannel).
Теперь с помощью kubectl и двух записей из документации flannel мы применим к кластеру конфигурацию сети:
Сеть для подов сконфигурирована.
- Разрешите использование однохостового (single-host) кластера.
Обычно в кластер Kubernetes входит несколько хостов, поэтому по умолчанию контейнеры не могут быть запущены на мастере. Но поскольку у нас только одна нода, разрешим на ней запуск контейнеров с помощью операции taint .
В качестве альтернативы можно было бы добавить в кластер вторую машину, используя join token из вывода kubeadm .
Многие компоненты Kubernetes выполняются в виде контейнеров кластера в скрытом пространстве имен kube-system . Вывести информацию о них можно следующим образом:
Как видно из листинга, все сервисы находятся в состоянии Running , значит, с кластером все в порядке. Если эти компоненты находятся в состоянии загрузки из Интернет, они могут быть еще не запущены.
Запустите контейнер
Теперь в кластере можно запустить контейнер. В Kubernetes контейнеры организованы в поды (Pods), которые используют общий IP-адрес, привязаны к одной и той же ноде (хосту) и могут использовать общие тома.
Проверьте, что сейчас у вас нет запущенных подов (контейнеров):
Этот код был изначально написан для руководства по Docker Swarm. Соответствующие исходники можно найти по этой ссылке: Scale a real microservice with Docker 1.12 Swarm Mode
Теперь в колонке Name можно увидеть, какое имя было назначено новому поду и когда он был запущен:
Используйте Name для проверки состояния пода:
Раз у нас есть работающей контейнер, можно взять его IP-адрес и получать сгенерированные идентификаторы с помощью curl :
Для просмотра логов пода можно использовать следующую команду:
Очень полезной функцией для отладки контейнеров является возможность подключаться к их консоли и выполнять там различные команды:
Панель инструментов Kubernetes также устанавливается в качестве пода, к которому мы потом сможем обратиться на локальной машине. Поскольку мы не открывали Kubernetes выход в Интернет, для доступа к панели инструментов воспользуемся SSH-туннелем.
Более подробную информацию можно получить здесь: Dashboard check it out on Github.
Подведем итоги
Вы создали кластер Kubernetes и запустили свой первый микросервис. Теперь вы можете начать изучать компоненты кластера, используя в работе интерфейс командной строки kubectl .
Руководство Kubernetes by Example, созданное Michael Hausenblas, показалось мне детальным и доступным.
Состоящий из одной ноды кластер у нас теперь есть, можно начинать добавлять еще ноды Type 0 , используя join token , полученный от kubeadm .
Docker Swarm — это встроенный в Docker CE и EE инструмент оркестровки. Кластер Docker Swarm может быть поднят одной командой. Более подробную информацию можно почерпнуть из моих уроков по Docker Swarm.
Благодарности:
Спасибо @mhausenblas, @_errm и @kubernetesonarm за обратную связь и советы по настройке кластера Kubernetes.
Kubernetes – это портативная расширяемая платформа для управления контейнерами на серверах. Она поставляется с открытым кодом, поэтому на рынке достаточно сервисов и инструментов для декларативной настройки и автоматизации процессов.
Зачем нужен Kubernetes
Платформа создавалась с учетом наработок в управлении удаленными проектами с масштабными рабочими нагрузками. Поэтому изначально в ней применяются продвинутые технологии, которые давно заменили принципы физического и даже виртуального развертывания систем. Контейнерное построение считается «облегченным» вариантом виртуальных машин.
Причины популярности Kubernetes:
- Развертываемые приложения отделены от инфраструктуры для повышения безопасности.
- Разработка и тестирование работают одинаково на локальном компьютере и в облаке.
- Контейнеры свободно переносятся между Ubuntu, CoreOS, RHEL и другими системами.
- Происходит изоляция ресурсов с прогнозированием производительности.
Вместо монолитного стека одной выделенной машины, приложения разбиваются на независимые друг от друга микросервисы с возможностью динамического развертывания и управления. За счет такого подхода ресурсы используются более грамотно. Приложения наблюдают не только за метриками операционной системы, а еще и другими программами и оборудованием.
Назначение Kubernetes
Контейнеры упрощают блочную разработку продуктов и их последующую сборку перед запуском. Такой подход дает возможность дорабатывать отдельные модули без влияния на работу остальных функций, и все это происходит на платформе фреймворка Kubernetes. Она обрабатывает ошибки в приложениях, занимается масштабированием, содержит шаблоны развертывания и пр.
- Обнаружение контейнера происходит по имени DNS или IP-адресу.
- Система самостоятельно балансирует нагрузку и распределяет трафик в сети.
- Подключение выбранного типа хранилища происходит в автоматическом режиме.
- Платформа перезапускает отказавшие контейнеры или блокирует к ним доступ.
- Конфиденциальная информация хранится изолированно от других данных.
Развертывание или откат изменений происходит по заданному сценарию, без участия пользователя. То же относится к резервированию аппаратных ресурсов, количеству процессорных ядер, оперативной памяти (на каждый отдельно взятый контейнер). Единственное ограничение Kubernetes заключается в отсутствие встроенных компонентов вроде базы данных, модуля обработки данных и организации кэша.
Основные компоненты архитектуры
Несмотря на удобство и простоту фреймворка Kubernetes, перед его использованием, при разработке или развертывании приложений, необходимо разобраться в архитектуре. Например, понять, как соединяются между собой контейнеры (через интерфейс API), и узнать, почему компоненты разделены на две основные группы – Master Node и Worker Node.
- Nodes – виртуальная (физическая) машина, на мощностях которой запущены контейнеры.
- Pods – базовые модули управления приложениями, состоящие из одного или нескольких контейнеров.
- Volume – ресурс, позволяющий одновременно запускать несколько контейнеров.
- Kube-Proxy – комплекс из прокси-сервера и модуля балансировки нагрузки, позволяющий маршрутизировать входящий трафик под конкретный контейнер Pods.
- Kubelet – транслятор статусов Pods на узле и контроллер корректности работы контейнера и образа в целом.
Перечисленные компоненты устанавливаются автоматически при помощи сторонних инструментов или вручную, по отдельности. Они составляют модуль под названием Master Node, где собраны все управляющие и контролирующие функции. Через API они связываются с контейнерами, считывают их показатели, дают команду на запуск, штатную остановку или принудительное закрытие.
Процесс установки Kubernetes
При выборе автоматической установки вникать в детали не понадобится, но требуется выделить достаточное количество системных ресурсов, чтобы платформа работала бесперебойно. Например, при небольшом количестве контейнеров и простой взаимосвязи достаточно 1-2 процессорных ядер, 2-4 Гб оперативки и двух виртуальных машин, выполняющих функции Master и Worker Node.
Инсталляция на Ubuntu
Проще всего воспользоваться одной из готовых реализаций – Minikube или Kubespray. Если нужно установить Kubernetes на сервер с операционной системой Ubuntu вручную, понадобятся права суперпользователя. Начнем с установки Docker для узла. Перечень команд для этого выглядит следующим образом:
При необходимости организовать создание контейнеров более новых версий перечень команд будет несколько иным:
Docker для одного узла установлен. Следующий шаг – установка модулей kubeadm (создание и настройка кластеров), kubelet (их запуск на хостах), kubectl (настройка компонентов, входящих в кластер). Для этого вводятся следующие команды:
Инсталляция на CentOS
При установке на операционную систему CentOS любой версии нужно выполнить ряд требований. Так, понадобится минимум 3 машины (1 главный, 2 рабочих узла), которые подключены к общей сети или интернету. Здесь также вся работа проводится в учетной записи sudo или root. Процедура проводится, как и в случае с Ubuntu, через консоль.
Команды для установки Docker:
Компоненты Kubernetes (kubeadm, kubelet, kubectl) инсталлируются так:
После ввода команд (при отсутствии ошибок) можно приступать к настройке платформы. Процесс включает инициализацию кластера, создание CNI, добавление узлов Nodes и получение токена для авторизации.
Настройка Kubernetes
Сначала указывается сервер, на который был инсталлирован Kubernetes. Он становится первичным, где будут запускаться остальные операции. Инициализация выполняется при помощи команды:
В результате создается адрес виртуальной сети Pods (цифры выбираются по желанию пользователя). По умолчанию используется указанный IP. При правильной обработке команды на дисплее будет отображаться команда для присоединения остальных Nods-кластеров к первичному серверу, чтобы создать в итоге рабочую систему.
Следующие команды задают пользователя, который будет управлять работой комплекса:
Теперь можно настраивать Container Network Interface (CNI, сетевой интерфейс контейнера). Чтобы избавить себя от рутины ручного ввода команд, рекомендуется установить плагин Flannel или ему подобный (Weave Net, Calico). Первый устанавливается так:
После ввода команды на экране отображаются имена всех созданных ресурсов.
Теперь пользователь добавляет Nods в существующий кластер. Для этого требуется подключение к серверу через SSH, установка модулей Docker, Kubelet, Kubeadm (вопрос рассматривался выше). Выполнение команды:
Остается получить токен авторизации кластера. Если подключение SSH еще не прервано, повторно заходить на сервер не нужно. Токен выдается после ввода команды:
По умолчанию он действует 24 часа. Если поставлена задача добавить новый узел по завершении периода, новый создается командой:
Вывод выглядит примерно так:
На этом все. Система готова к эксплуатации. Дальнейшие действия пользователя зависят от стоящих задач и опыта.
Контейнеризация приложений — один из главных трендов современных IT-разработок. Однако, у контейнеров есть один существенный недостаток для массового потребителя — сложная настройка масштабирования.
Решением стали автоматические системы управления контейнеризацией, наиболее популярной из которых является Kubernetes. Это программное обеспечение с открытым исходным кодом от компании Google завоевало признание благодаря сочетанию гибкости, безопасности и мощности.
Cтатья «Kubernetes для чайников» поможет разобраться как устроена платформа управления контейнеризацией, как установить ПО и для чего его можно использовать в дальнейшем. Она будет полезна как для начинающих пользователей Kubernetes, так и для профильных IT-специалистов.
История создания
Проект Kubernetes (сокращенно K8s) вырос из системы управления кластерами Borg. Внутренний продукт поискового гиганта Google получил название в честь кибер-рассы боргов из легендарного сериала «Звездный путь».
Команде разработчиков Google Borg была поставлена масштабная задача — создать открытое программное обеспечение для оркестрирования* контейнеров, которое станет вкладом Google в развитие мировых IT-технологий. Приложение было написано на основе языка Go.
* Под «оркестрированием» подразумевается автоматизированное управление связанными сущностями — контейнерами или виртуальными машинами.
На этапе разработки K8s назвался Project Seven («Проект «Седьмая»). Это было прямой отсылкой к персонажу «Звездного пути» Seven of Nine («Седьмая-из-девяти») — андроиду-боргу, сумевшему вернуть себе человечность. Позже проект получил имя «Кубернетес», от греческого слова κυβερνήτης, которое означает «управляющий», «рулевой» или «кормчий».
В 2014 году общественности представили исходные коды, а годом позже появилась первая версия программы Kubernetes 1.0. В дальнейшем все права на продукт были переданы некоммерческому фонду Cloud Native Computing Foundation (CNCF), куда входят Google, The Linux Foundation и ряд крупнейших технологических корпораций.
Как работает технология
Принципы устройства
Основы работы K8s – применение декларативного подхода. От разработчика требуется указать, чего необходимо достичь, а не способы достижения.
Помимо этого, в Kubernetes могут быть задействованы императивные команды (create, edit, delete), которые позволяют непосредственно создавать, модифицировать и удалять ресурсы. Однако, их не рекомендуется использовать для критически важных задач.
Для развертывания программного обеспечения в Kubernetes применяется база Linux-контейнеров (например, Containerd или CRI-O) и описание — сколько потребуется контейнеров и в каком количестве им потребуются ресурсы. Само развертывание контейнеров происходит на основе рабочих нод — виртуальных или физических машин.
Основные задачи Kubernetes
- Развертывание контейнеров и все операции для запуска необходимой конфигурации. В их число входят перезапуск остановившихся контейнеров, их перемещение для выделения ресурсов на новые контейнеры и другие операции.
- Масштабирование и запуск нескольких контейнеров одновременно на большом количестве хостов.
- Балансировка множества контейнеров в процессе запуска. Для этого Kubernetes использует API, задача которого заключается в логическом группировании контейнеров. Это дает возможность определить их пулы, задать им размещение, а также равномерно распределить нагрузку.
Преимущества K8s
- Обнаружение сервисов ибалансировка нагрузок. Контейнеры могут работать через собственные IP-адреса или использовать общее имя DNS для целой группы. K8s может регулировать нагрузку сетевого трафика и распределять его, чтобы поддержать стабильность развертывания.
- Автоматическое управление хранилищами. Пользователь может задавать, какое хранилище использовать для развертывания по умолчанию — внутреннее, внешнего облачного провайдера (GKE, Amazon EKS, AKS), другие варианты.
- Автоматическое внедрение и откат изменений. Пользователь может на лету делать любые дополнения к текущей конфигурации контейнеров. Если это нарушит стабильность развертывания, K8s самостоятельно откатит изменения до стабильно работающей версии.
- Автоматическое распределение ресурсов. Kubernetes сам распределяет пространство и оперативную память из выделенного кластера нод, чтобы обеспечить каждый контейнер всем необходимым для работы.
- Управление паролями и настройками. K8s может служить приложением для безопасной обработки конфиденциальной информации, связанной с работой приложений — паролей, OAuth-токенов, SSH-ключей. В зависимости от способа применения, данные и настройки можно обновлять без создания контейнера заново.
- Самовосстановление при возникновении сбоя. С помощью особых метрик и тестов система может быстро опознать поврежденные или переставшие отвечать на запросы контейнеры. Вышедшие из строя контейнеры создаются заново и перезапускаются на том же поде.
Kubernetes – удобный инструмент оркестрации контейнеров. Однако, это решение, не работает само по себе, без подготовки и дополнительных настроек. Например, пользователям придется решать вопросы по миграции схем баз данных или разбираться с обратной совместимостью API.
Основные компоненты
Схема взаимодействия основных компонентов K8s
Node (Нода)
Ноды или узлы — виртуальные или физические машины, на которых разворачивают и запускают контейнеры. Совокупность нод образует кластер Kubernetes.
Первая запущенная нода или мастер-нода непосредственно управляет кластером, используя для этого менеджер контроллеров (controller manager) и планировщик (scheduler). Она ответственна за интерфейс взаимодействия с пользователями через сервер API и содержит в себе хранилище «etcd» с конфигурацией кластера, метаданными и статусами объектов.
Namespace (Пространство имен)
Объект, предназначенный для разграничения ресурсов кластера между командами и проектами. Пространства имен — несколько виртуальных кластеров, запущенные на одном физическом.
Pod (Под)
Первичный объект развертывания и основной логический юнит в K8s. Поды — набор из одного и более контейнеров для совместного развертывания на ноде.
Группировка контейнеров разных типов требуется в том случае, когда они взаимозависимы и должны запускаться в одной ноде. Это позволяет увеличить скорость отклика во время взаимодействия. Например, это могут быть контейнеры, хранящие веб-приложение и сервис для его кэширования.
ReplicaSet (Набор реплик)
Объект, отвечающий за описание и контроль за несколькими экземплярами (репликами) подов, созданных на кластере. Наличие более одной реплики позволяет повысить устойчивость от отказов и масштабирование приложение. На практике ReplicaSet создается с использованием Deployment.
ReplicaSet является более продвинутой версией предыдущего способа организации создания реплик (репликации) в K8s – Replication Controller.
Deployment (Развертывание)
Объект, в котором хранится описание подов, количество реплик и алгоритм их замены в случае изменения параметров. Контроллер развертывания позволяет выполнять декларативные обновления (с помощью описания нужного состояния) на таких объектах, как ноды и наборы реплик.
StatefulSet (Набор состояния)
Как и другие объекты, например — ReplicaSet или Deployment, Statefulset позволяет развертывать и управлять одним или несколькими подами. Но в отличие от них, идентификаторы подов имеют предсказуемые и сохраняемые при перезапуске значения.
DaemonSet (Набор даемона)
Объект, который отвечает за то, чтобы на каждой отдельной ноде (или ряде выбранных) запускался один экземпляр выбранного пода.
Job/CronJob (Задания/Задания по расписанию)
Объекты для регулировки однократного или регулярного запуска выбранных подов и контроля завершения их работы. Контроллер Job отвечает за однократный запуск, CronJob — за запуск нескольких заданий по расписанию.
Label/Selector (Метки/Селекторы)
Метки предназначены для маркировки ресурсов. Позволяют упростить групповые манипуляции с ними. Селекторы позволяют выбирать/фильтровать объекты на основе значения меток.
По факту, метки и селекторы не являются самостоятельными объектами Kubernetes, но без них система не сможет полноценно функционировать.
Service (Сервис)
Средство для публикации приложения как сетевого сервиса. Используется, в том числе, для балансировки трафика/нагрузки между подами.
Процесс установки
Установка Kubernetes, рассмотренная ниже, предполагает наличие одного (или более) серверов с операционной системой Centos 7 или Ubuntu 16.04.
Проект Kubernetes действует на основе контейнеров Docker, существенно расширяя их функциональность. Логично, что начинать работу Kubernetes следует именно с установки Docker.
Проще всего остановить выбор на версии, добавленной на текущий момент в репозитории. Ее протестировали разработчики Kubernetes и она работает наиболее стабильно.
Установка контейнеров на Ubuntu 16.04
Чтобы установить Docker на Ubuntu 16.04, необходимо выполнить следующие команды с правами суперпользователя:
Если требуется работать с более новыми версиями контейнеров, запустите команды:
Установка контейнеров в CentOS 7
Для установки Docker на Centos, в консоли нужно выполнить команды:
Установка kubeadm, kubelet и kubectl в Ubuntu
Для работы с Kubernetes понадобится установить компоненты kubeadm, kubelet и kubectl. Эти утилиты понадобятся для создания управления кластером Kubernetes.
- Kubectl — позволяет создавать и настраивать объекты в кластере.
- Kubelet — занимается запуском контейнеров на хостах.
- Kubeadm — позволит настраивать компоненты, составляющие кластер.
В Ubuntu эти компоненты можно установить следующим способом:
Установка kubeadm, kubelet и kubectl в CentOS
В CentOS 7 компоненты устанавливаются следующим образом:
Обращаем внимание! Команда setenforce 0 позволит получить корректный доступ контейнеров к файловой системе хоста. Последняя необходима для функционирования сети у подов.
Нужно убедиться, что «kubelet» и «docker» пользуются одним и тем же драйвером «cgroup». В этом может помочь команда:
Настройка Kubernetes
Инициализация кластера
Нужно указать сервер, на котором установлен K8s (он будет первичным — там будут запускаться остальные операции) и выполнить инициализацию кластера:
В данном примере будем использован наиболее распространенный сетевой плагин — Flannel. По умолчанию он использует сеть «10.244.0.0/16», которая была указана в параметре, приведенном выше.
При выполнении команды в консоли, есть вероятность появления ошибок или предупреждений. Ошибки нужно исправлять в обязательном порядке, а на предупреждения можно не обращать внимание, если это не окружение «production».
Если все сделано правильно, на экране отобразится команда, позволяющая присоединить остальные ноды кластера к первичному хосту. Команда может отличаться, в зависимости от структуры кластера. Ее нужно сохранить на будущее.
После выполнения этой команды система выведет примерный результат:
Остается выполнить следующие команды от имени пользователя, который будет управлять кластером:
Настройка CNI
Перед тем, как начать запускать в кластере приложения, нужно выполнить настройку Container Network Interface («сетевой интерфейс контейнера» или CNI). CNI нужен для настройки взаимодействия и управления контейнерами внутри кластера.
Существует много плагинов для создания CNI. В данном примере применяется Flannel, так как это наиболее простое и проверенное решение. Однако, не меньшей популярностью пользуются плагины Weave Net от компании Weaveworks и Calico (Project Calico), обладающие более широким функционалом и возможностями сетевых настроек.
Чтобы установить Flannel, выполните в терминале команду:
В выводе будут отображены имена всех созданных ресурсов.
Добавление узлов (нод) в кластер
Чтобы добавить новые ноды в существующий кластер, требуется выполнить следующий алгоритм:
- Подключиться к серверу через SSH.
- Установить на сервер Docker, Kubelet, Kubeadm (как показано выше).
- Выполнить команду:
Данная команда была выведена при выполнении команды «kubeadm init» на мастер-ноде.
Если команда не была сохранена, то можно ее составить повторно.
Получение токена авторизации кластера (<token>)
- Подключиться к серверу через SSH.
- Запустить команду, которая присутствовала на выводе команды «kubeadm init». Например:
Если токена нет, его можно получить, выполнив следующую команду на мастер-ноде:
Вывод должен быть примерно таков:
По умолчанию, срок действия токена — 24 часа. Если требуется добавить новый узел в кластер по окончанию этого периода, можно создать новый токен следующей командой:
Вывод будет примерно таков:
Будет получен примерно такой вывод:
Для ввода IPv6-адреса в параметр «<control-plane-host>:<control-plane-port>», адрес должен быть заключен в квадратные скобки. Например:
Дополнительные настройки
В дефолтной конфигурации мастер-нода не запускает контейнеры, так как занимается отслеживанием состояния кластера и перераспределением ресурсов. Ввод данной команды даст возможность запускать контейнеры на мастере, собенно, если кластер содержит лишь одну ноду:
Проверка работоспособности кластера
Проверить, что кластер запустился и правильно работает, можно так:
Вывод будет аналогичен. В нем будут отображены системные POD’ы k8s.
Теперь установку можно считать завершенной. Далее можно продолжить настройку K8s для работы с веб-приложениями. Например, подключить диспетчер пакетов «helm» для автоматического развертывания приложений или контроллер «nginx ingress», отвечающий за маршрутизацию внешнего трафика.
Заключение
Несмотря на кажущуюся сложность настройки, K8s стоит времени, потраченного на его изучение. Kubernetes — наиболее совершенный на сегодня инструмент оркестрирования контейнеров. Он позволяет не только автоматизировать процесс развертывания, но и максимально упрощает дальнейший процесс работы с массивами контейнеров.
С помощью этого краткого руководства начать работу с K8s сможет даже начинающий пользователь. В дальнейшей работе с платформой поможет подробная официальная документация, доступная, в том числе, на русском языке.
Это самоуверенный чит-лист, созданный для использования в качестве ориентира для ежедневных операций Kubernetes и администрирования, выполняемых через интерфейс командной строки с помощью kubectl. Если вы готовитесь к экзаменам CKA или CKAD, шпаргалка содержит команды, которые помогут вам быстро выполнить экзаменационные задания. При подготовке к экзамену не следует полностью полагаться на этот документ, а лучше пройти курс по содержанию с большой практикой.
Если у вас есть команда kubectl для экономии времени, которую мы пропустили в этом посте, не стесняйтесь оставить ее в разделе комментариев. Мы будем рады обновить документ в любое время.
Мы начнем с полезных общих команд, прежде чем рассмотрим команды для конкретных задач, используемые при развертывании администрирования и приложений в Kubernetes или OpenShift Cluster.
Полезные команды для общего использования
Ниже приведены некоторые из наиболее полезных команд общего пользования при работе с Kubernetes.
1. Установите kubectl
Вот как установить kubectl в Linux и macOS:
Linux
macOS:
Подтвердите установку, проверив версию:
2. Включите завершение Bash.
По умолчанию завершение Bash не включено после установки команды kubectl. Включите его с помощью команд ниже.
Bash:
zsh:
3. Список и переключение контекста
Переключайтесь между кластерами, задав текущий контекст в файле kubeconfig :
Установите запись контекста в kubeconfig:
Если вы хотите изменить предпочтение пространства имен, используйте:
См. Текущий контекст:
4. Проверьте синтаксис файла yaml манифеста.
Если вы создали yaml-файл развертывания и хотите проверить синтаксис, используйте команду:
Если есть синтаксические ошибки, вы получите из вывода:
5. О чистите узел при удалении локальных данных.
Узел может быть очищен, а также очищены локальные данные, используемые запущенными контейнерами. Для этого используется синтаксис команды:
Для принудительного слива вы можете добавить --force флаг, хотя это не рекомендуется.
6. Примените файлы и папки yaml.
Вы можете использовать аргумент apply, чтобы применить конфигурацию к ресурсу по имени файла или стандартному вводу. Синтаксис команды:
Для папки с несколькими ямл-филами используйте:
С абсолютным путем:
7. Создавайте псевдонимы для экономии времени.
Вы также можете создать несколько псевдонимов, которые значительно ускорят использование командной строки.
8. Запустите временный модуль, который умирает при выходе.
Вы можете быстро создать временный модуль с сеансом оболочки для целей тестирования, который будет уничтожен при выходе.
9. Создайте пространство имен.
Пространство имен создается с помощью команды:
Чтобы переключиться в пространство имен для всех операций, используйте:
10. Запустите команду оболочки в Pod без tty.
Давайте создадим модуль, работающий в фоновом режиме.
Подтвердите, что Pod запущен:
Запуск сеанса оболочки с модулем:
Запуск команды прямо в контейнере без tty.
11. Проверьте переменные среды в модуле.
Чтобы перечислить все переменные среды в модуле, используйте команду:
12. Получите объяснение использования ресурсов.
13. Сортировка ресурсов по названию.
Чтобы перечислить ресурсы, отсортированные по имени, вы будете использовать.
14. Создайте YAML-файл манифеста модуля.
Вы можете использовать kubectl run для создания файла манифеста yaml для развертывания Pods.
Следующая команда печатает соответствующие объекты API, не создавая их:
С ограничениями памяти и ЦП:
С запросами и ограничениями как ЦП, так и памяти.
Затем вы можете создать модуль, применив файл.
Подтвердите, что Pod запущен:
15. Создайте файл YAML для развертывания.
Аналогичные команды генерации применяются для типов ресурсов развертывания. Только то, что мы не пройдем –restart=Never .
Записать в файл
Вы можете изменить файл и применить создание ресурсов.
Список модулей, соответствующих Nginx.
16. Предоставление доступа к модулю или развертыванию в службе.
Используйте команду kubectl expose, чтобы сделать развертывание или Pod доступными на ClusterIP или NodePort.
Поддерживаемые типы для службы: ClusterIP , NodePort , LoadBalancer или ExternalName .
В этом другом примере создается служба для модуля redis , который обслуживает порт 6379 с именем «redis».
Вы также можете вручную указать порт, предоставляемый контейнером (порт приложения).
17. Масштабирование модулей в развертывании.
Вы можете увеличить количество модулей в развертывании, не редактируя какой-либо файл.
18. Перенесите все модули в узел и сделайте его недоступным для планирования.
Определите узел, над которым нужно действовать:
Затем скажите Kubernetes, чтобы он опустошил узел:
Возможно, вам придется игнорировать наборы демонов и удалить данные локального контейнера.
Скажите Kubernetes, чтобы он прекратил планировать новые поды на ноде:
Чтобы возобновить планирование на узле, используйте команду:
19. Создание нескольких контейнеров в модуле
Сначала сгенерируйте файл манифеста Pod. Мы создадим модуль под названием mypod с изображением ubuntu .
Отредактируйте файл и добавьте другие контейнеры в названный модуль.
Убедитесь, что в капсуле есть два контейнера.
20. Создание учетной записи службы, роли и привязки ролей
Создайте сервис под названием demo.
Создайте роль с именем demo, которая позволяет пользователю выполнять «получение», «просмотр» и «список» для модулей, развертывания, ds, rs, sts:
Создайте RoleBinding для demo роли.
21. Получение журналов для пакетов
Получить последние журналы на именованном поде:
Следите за потоком логов в реальном времени.
Получите последние журналы из всех модулей в развертывании:
Используйте регулярное выражение для извлечения журналов.
Записать вывод в файл:
Распечатайте журналы для предыдущего экземпляра контейнера в модуле, если он существует.
22. Получите лучшие стручки
Получите лучшие модули использования ресурсов.
Получите лучшие модули с высокой загрузкой ЦП:
Фильтр с помощью меток.
Получите только один модуль с максимальной загрузкой ЦП и запишите вывод в файл.
23. Развернуть и откатить развертывание
Разверните контейнер Nginx.
Обновление развертывания для использования образа nginx версии 1.14.2
Проверить статус внедрения
Просмотрите историю развертывания развертывания:
Откат к предыдущему развертыванию:
Развертывание до конкретной версии
24. Обозначьте узел и назначьте модули узлам.
Как добавить метки к Node.
Затем вы можете назначить модули для узлов.
25. Копирование файлов в модули и из модулей.
В kubectl CP команды могут быть использованы для копирования файлов в стручках или из стручки.
Читайте также: