Назад в блог

Как установить и использовать Kubernetes на Ubuntu 20.04

Как установить и использовать Kubernetes на Ubuntu 20.04

Введение

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

Узел в Kubernetes означает сервер. Master-узел — это сервер, который управляет состоянием кластера. Worker-узлы — это серверы, на которых выполняются рабочие нагрузки – обычно это контейнеризированные приложения и службы.

Это руководство проведет вас по шагам установки и развертывания кластера Kubernetes, состоящего из двух узлов, на Ubuntu 20.04. Как уже упоминалось, наличие двух узлов — это самая базовая конфигурация при работе с Kubernetes. У вас также есть возможность добавить больше рабочих узлов, как только вы освоите основы. Далее мы покажем вам, как связать два сервера, чтобы master-узел мог управлять worker-узлом.

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

Итак, начнем!

Предварительные требования

Вам понадобится подготовить два сервера, работающих на Ubuntu 20.04. Для наилучшей производительности минимальные системные требования для Kubernetes составляют 2 ГБ оперативной памяти и 2 процессора. Вы можете выполнить шаги с 1 по 4 этого пошагового руководства, которое поможет вам настроить сервер Ubuntu на CloudSigma. Один сервер будет master-узлом, другой — worker-узлом. Мы удачно назвали наши два сервера kubernetes-master и kubernetes-worker. Это облегчает прохождение руководства. Тем не менее, вы можете выбрать любые имена хостов, какие предпочтете.

  • Обязательно добавьте пользователя с привилегиями sudo на обоих узлах, которого мы будем использовать для запуска команд, как описано в руководстве выше. Следуйте этому руководству по настройке файла sudoers in Linux для получения инструкций.

  • Сетевое подключение – серверы в кластере должны иметь возможность взаимодействовать друг с другом. Когда вы развертываете свои виртуальные машины из CloudSigma, они будут подключены к интернету с публичным IP-адресом по умолчанию. Если вы работаете в локальной сети, вам, возможно, придется отредактировать файл /etc/hosts на каждом сервере и связать их соответствующим образом.

  • Вам нужно будет установить и включить Docker на каждом из узлов. Kubernetes полагается на среду выполнения контейнеров для запуска контейнеров в подах. Хотя существуют и другие контейнерные платформы на выбор, в этом руководстве мы будем использовать Docker. Docker предоставит среду выполнения, необходимую для Ubuntu. Вы можете выполнить шаги 1, 2 и 3 нашего руководства по установке и эксплуатации Docker.

Шаг 1. Установка Kubernetes

На этом шаге мы установим Kubernetes. Как и в случае с Docker в разделе предварительных требований, вы должны запустить команды на обоих узлах для установки Kubernetes. Используйте ssh для входа на оба узла и продолжения. Вы начнете с установки пакета apt-transport-https, который позволяет работать с http и https в репозиториях Ubuntu. Также установите curl, так как он понадобится для следующих шагов. Выполните следующую команду:

Затем добавьте Kubernetes подписывающий ключ на оба узла, выполнив команду:

Затем мы добавим Kubernetes репозиторий в качестве источника пакетов на обоих узлах с помощью следующей команды:

После этого обновите узлы:

  • Установка инструментов Kubernetes

После завершения обновления мы установим Kubernetes. Это включает в себя установку различных инструментов, из которых состоит Kubernetes: kubeadm, kubelet, kubectl, и kubernetes-cni. Эти инструменты устанавливаются на обоих узлах. Ниже мы даем определение каждому инструменту:

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

  • kubeadm – часть проекта Kubernetes, которая помогает инициализировать кластер Kubernetes. Введите следующую команду для установки kubeadm:

  • kubectl – инструмент командной строки Kubernetes, который позволяет выполнять команды внутри кластеров Kubernetes. Выполните следующую команду для установки kubectl:

  • kubernetes-cni – обеспечивает сетевое взаимодействие внутри контейнеров, гарантируя, что контейнеры могут общаться и обмениваться данными. Выполните следующую команду для установки:

При желании вы можете установить все четыре инструмента одной командой:

Шаг 2: Отключение памяти swap

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

Эта команда отключает память swap до перезагрузки системы. Мы должны убедиться, что она остается отключенной и после перезагрузки. Это необходимо сделать на главном и на всех рабочих узлах. Мы можем сделать это, отредактировав fstab файл и закомментировав строку /swapfile с помощью #. Откройте файл в текстовом редакторе nano, введя следующую команду:

Внутри файла закомментируйте строку swapfile , как показано на скриншоте ниже:

install Kubernetes fstab swap disable

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

Шаг 3: Установка уникальных имен хостов

Ваши узлы должны иметь уникальные имена хостов для более простой идентификации. Если вы развертываете кластер со множеством узлов, вы можете задать идентифицирующие имена для ваших рабочих узлов, такие как node-1, node-2 и т. д. Как мы уже упоминали ранее, мы назвали наши узлы kubernetes-master и kubernetes-worker. Мы установили их во время создания сервера. Однако вы можете настроить или установить свои, если вы еще этого не сделали из командной строки. Чтобы изменить имя хоста на главном узле, выполните следующую команду:

На рабочем узле выполните следующую команду:

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

Шаг 4: Настройка видимости мостового трафика для Iptables

Чтобы главный и рабочие узлы правильно видели мостовой трафик, вам необходимо убедиться, что параметр net.bridge.bridge-nf-call-iptables установлен в значение 1 в вашей конфигурации. Сначала убедитесь, что модуль br_netfilter загружен. Вы можете подтвердить это, выполнив команду:

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

Теперь вы можете запустить эту команду, чтобы установить значение в 1:

Шаг 5: Изменение драйвера cgroup в Docker

По умолчанию Docker устанавливается с cgroupfs в качестве драйвера cgroup. Kubernetes рекомендует , чтобы Docker работал с systemd в качестве драйвера. Если вы пропустите этот шаг и попытаетесь инициализировать kubeadm на следующем шаге, вы получите следующее предупреждение в терминале:

На главном и рабочих узлах обновите cgroupdriver с помощью следующих команд:

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

Как только это будет настроено, мы сможем перейти к самому интересному — развертыванию кластера Kubernetes!

Шаг 6: Инициализация главного узла Kubernetes

Первым шагом при развертывании кластера Kubernetes является запуск главного узла. Находясь в терминале вашего главного узла, выполните следующую команду для инициализации kubernetes-master:

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

install Kubernetes InitError

Примечание: Если вы создаете среду для продакшена, рекомендуется всегда соблюдать минимальные требования для бесперебойной работы Kubernetes. Однако, если вы проходите это руководство в ознакомительных целях, вы можете добавить следующий флаг к команде kubeadm init, чтобы игнорировать предупреждения об ошибках:
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

На скриншоте ниже видно, что инициализация прошла успешно. Мы также добавили флаг для указания сети подов с IP-адресом 10.244.0.0. Это IP-адрес по умолчанию, который использует kube-flannel. Более подробно мы обсудим сеть подов на следующем шаге.

install Kubernetes Kubeadm Init

В выводе вы можете увидеть kubeadm join команду (мы скрыли наш IP-адрес) и уникальный токен, который вам нужно будет запустить на рабочем узле и всех остальных рабочих узлах, которые вы хотите присоединить к этому кластеру. Скопируйте и вставьте эту команду, так как она понадобится вам позже на рабочем узле.

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

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

Шаг 7: Развертывание сети подов

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

Перед развертыванием сети подов нам необходимо проверить статус брандмауэра. Если вы включили брандмауэр после выполнения шага 5 руководства по настройке сервера Ubuntu, сначала необходимо добавить правило брандмауэра, чтобы создать исключения для порта 6443 (порт по умолчанию для Kubernetes). Выполните следующие команды ufw на управляющем и рабочих узлах:

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

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

В случае успешного выполнения в выводе команды статус всех служб должен быть указан как running:

install Kubernetes Pod Status

Вы также можете просмотреть состояние компонентов с помощью команды get component status:

install Kubernetes Component Status

Эта команда имеет краткую форму cs:

Component Status Short

Если вы видите статус unhealthy, отредактируйте следующие файлы и удалите строку в (spec->containers->command), содержащую эту фразу - --port=0 :

Сделайте то же самое для этого файла:

Наконец, перезапустите службу Kubernetes:

Шаг 8. Присоединение рабочих узлов к кластеру Kubernetes

После того как kubernetes-master запущен и сеть подов готова, мы можем присоединить наши рабочие узлы к кластеру. В этом руководстве у нас есть только один рабочий узел, поэтому мы будем работать с ним. Если у вас больше рабочих узлов, вы всегда можете выполнить те же шаги, которые мы опишем ниже, чтобы присоединить их к кластеру.

Сначала войдите на свой рабочий узел в отдельной сессии терминала. Вы будете использовать команду kubeadm join, которая была показана в вашем терминале при инициализации управляющего узла на Шаге 6. Выполните команду:

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

Worker Join

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

На скриншоте вывода команды выше видно, что рабочий узел присоединился к кластеру:

install Kubernetes K8S Node Status

Шаг 9. Развертывание приложения в кластере Kubernetes

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

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

Вы можете просмотреть созданное развертывание с помощью команды describe deployment:

Nginx Deployment

Чтобы сделать nginx сервис доступным через интернет, выполните следующую команду:

NodePort Svc Create

Команда выше создаст публичный сервис для развертывания Nginx. Поскольку это nodeport развертывание, Kubernetes назначает сервису порт из диапазона 32000+.

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

NodePort Svc Status

Вы можете видеть, что наш назначенный порт — 32264. Обратите внимание на порт, отображаемый в вашем терминале, чтобы использовать его на следующем шаге.

Чтобы убедиться, что развертывание сервиса Nginx прошло успешно, выполните curl запрос к рабочей ноде с мастер-ноды. Замените IP-адрес вашей рабочей ноды и порт, полученный из команды выше:

Вы должны увидеть вывод стандартной страницы Nginx index.html:

Curl Nginx Svc

При желании вы можете открыть IP-адрес рабочей ноды и порт в браузере, чтобы просмотреть стандартную индексную страницу Nginx:

install Kubernetes Nginx Webpage

Вы можете удалить развертывание, указав его имя. Например, эта команда удалит наше развертывание:

Теперь мы успешно протестировали наш кластер!

Заключение

В этом руководстве вы узнали, как установить кластер Kubernetes на Ubuntu 20.04. Вы настроили кластер, состоящий из мастер-ноды и рабочей ноды. Вы смогли установить набор инструментов Kubernetes, создали сеть подов и присоединили рабочую ноду к мастер-ноде. Мы также протестировали нашу концепцию, выполнив базовое развертывание веб-сервера Nginx в кластере. Это должно послужить основой для работы с кластерами Kubernetes на Ubuntu.

Хотя мы использовали только одну рабочую ноду, вы можете расширить свой кластер любым количеством нод. Если вы хотите глубже погрузиться в DevOps с помощью таких инструментов автоматизации, как Ansible, у нас есть руководство, посвященное развертыванию кластеров Kubernetes с помощью Ansible и Kubeadm, ознакомьтесь с ним. Если вы хотите узнать, как развернуть PHP-приложение в кластере Kubernetes, изучите это руководство.

Приятной работы!

author

Pranay Kapgate

Автор · CloudSigma

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

Комментарии

Комментариев пока нет. Будьте первым.