Как настроить Kubernetes кластер на Vagrant VM

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

В этом учебном пособии Kubernetes я рассмотрел пошаговое руководство по настройке Kubernetes кластера на Vagrant. Это многонодовая настройка Kubernetes с использованием kubeadm.

Vagrant - это отличная утилита для настройки виртуальных машин на вашей локальной рабочей станции.

Это руководство в первую очередь посвящено автоматизированной настройке Kubernetes с использованием скриптов Vagrantfile и  shell scripts. 

Автоматическая настройка Kubernetes кластера на Vagrant

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

Сводка настройки.

  1. Команда vagrant up создаст три виртуальные машины и настроит все основные компоненты и конфигурацию kubernetes с помощью Kubeadm.

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

  3. Файл kubeconfig и токен доступа к kubernetes добавляются в папку configs, где у вас есть Vagrantfile. Вы можете использовать файл kubeconfig для подключения кластера с вашей рабочей станции.

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

  5. Вы можете удалить все виртуальные машины одной командой vagrant destroy и воссоздать установку с помощью команды vagrant up в любое время.

Kubernetes, Kubeadm, Vagrant, Github Repository

Kubeadm, Vagrantfile и скрипты расположены в репозитории Github.

Клонируйте репозиторий.

git clone https://github.com/scriptcamp/vagrant-kubeadm-kubernetes

Настройка Kubernetes кластера на Vagrant

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

Шаг 1: Чтобы создать кластер, перейдите в клонированный каталог.

cd vagrant-kubeadm-kubernetes

Шаг 2: Выполните vagrant команду. Она развернет три узла. Один master и две worker-node. Установка и настройка Kubernetes происходит через bash script, присутствующий в папке scripts.

vagrant up

Примечание: Если вы запускаете его в первый раз, Vagrant сначала загрузит образ ubuntu, упомянутый в Vagrantfile. Это одноразовая загрузка.

Шаг 3: Войдите в master-node, чтобы проверить конфигурацию кластера.

vagrant ssh master

Шаг 4: Вывод списка всех нод кластера, чтобы убедиться, что worker-node подключены к master и находятся в готовом состоянии.

kubectl top nodes

Вы должны увидеть то, что показано ниже.

Вот и все! Вы можете начать развертывание и тестирование других приложений.

Чтобы завершить работу виртуальных машин Kubernetes, выполните команду:

vagrant halt

Когда вам снова понадобится кластер, просто выполните:

vagrant up

Чтобы удалить виртуальные машины:

vagrant destroy -f

Объяснение Kubeadm, Vagrantfile и Scripts

Дерево файлов vagrant репозитория.

├── Vagrantfile
├── configs
│   ├── config
│   ├── join.sh
│   └── token
└── scripts
├── common.sh
├── master.sh
└── node.sh

Папка configs и файлы генерируются только после первого запуска.

Как я объяснял ранее, папка config содержит файл config, token и файл join.sh.

В предыдущем разделе я уже объяснил, что такое config и token. Файл join.sh содержит команду присоединения worker-node с токеном, созданным во время инициализации master-node kubeadm.

Поскольку все ноды имеют общую папку с Vagrantfile, worker-node могут прочитать файл join.sh и автоматически присоединиться к master во время первого запуска. Это одноразовая задача.

Если вы войдете в какую-либо ноду и получите доступ к папке /vagrant, вы увидите Vagrantfile и скрипты в том виде, в каком они являются общими для виртуальных машин.

Давайте посмотрим на Vagrantfile

Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
apt-get update -y
echo "10.0.0.10  master-node" >> /etc/hosts
echo "10.0.0.11  worker-node01" >> /etc/hosts
echo "10.0.0.12  worker-node02" >> /etc/hosts
SHELL
config.vm.define "master" do |master|
  master.vm.box = "generic/ubuntu2004"
  master.vm.hostname = "master-node"
  master.vm.network "private_network", ip: "10.0.0.10"
  master.vm.provider "virtualbox" do |vb|
      vb.memory = 4048
      vb.cpus = 2
  end
  master.vm.provision "shell", path: "scripts/common.sh"
  master.vm.provision "shell", path: "scripts/master.sh"
end
(1..2).each do |i|
config.vm.define "node0#{i}" do |node|
node.vm.box = "generic/ubuntu2004"
node.vm.hostname = "worker-node0#{i}"
node.vm.network "private_network", ip: "10.0.0.1#{i}"
node.vm.provider "virtualbox" do |vb|
vb.memory = 2048
vb.cpus = 1
end
node.vm.provision "shell", path: "scripts/common.sh"
node.vm.provision "shell", path: "scripts/node.sh"
end
end
end

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

  1. 10.0.0.10 (master)

  2. 10.0.0.11 (node 01)

  3. 10.0.0.12 (node 02)

Кроме того, блок worker-node находится в цикле. Поэтому, если вам нужно более двух worker-node или у вас только одина worker-node, вам нужно заменить 2 на нужное число в цикле. Если вы добавляете больше узлов, убедитесь, что вы добавили IP в запись файла node.

Например, для 3 worker-node необходимо иметь цикл 1..4.

(1..4).each do |i|
master.sh, node.sh и common.sh

Эти три скрипта запускаются в качестве provisioners во время запуска Vagrant для конфигурирования кластера.

  1. common.sh: - Список команд, устанавливающих docker, kubeadm, kubectl и kubelet на все узлы. Кроме того, отключает swap.

  2. master.sh: - содержит команды для инициализации master, установки плагина calico. Кроме того, копирует файлы kube-config, join.sh и token в каталог configs.

  3. node.sh:- читает команду join.sh из общей папки configs и присоединяется к master-node. Кроме того, скопировал файл kubeconfig в местоположение /home/vagrant/.kube для выполнения команд kubectl.

Вывод

Чтобы настроить кластер kubernetes на Vagrant, все, что вам нужно сделать, это клонировать репозиторий и запустить команду vagrant up.

Кроме того, вы инженер DevOps и работаете в кластере Kubernetes, вы можете иметь локальный стенд для разработки и тестирования.

Источник: https://habr.com/ru/post/599039/


Интересные статьи

Интересные статьи

Как найти самые "горячие" запросы на вашем PostgreSQL-сервере? Поискать их в логе и проанализировать план или воспользоваться расширением pg_stat_statements.А если в лог попадает миллион запросов за с...
В предыдущей публикации рассматривались преимущества использование ARM серверов для хостинг провайдеров. В этом посте рассмотрим практические варианты создания кластерного сервера на ...
Сравнение трех самых популярных Managed Kubernetes платформ. Kubernetes уже стал синонимом оркестрации контейнеров, поэтому каждый облачный провайдер активно разрабатывает под него сво...
Всем привет! Меня зовут Олег Сидоренков, и я работаю в компании ДомКлик руководителем команды инфраструктуры . Эксплуатируем кубик в проде уже больше трёх лет и за это вр...
Привет, Хаброжители! С развитием микросервисов и контейнеров изменились подходы к проектированию, созданию и запуску программного обеспечения. Познакомьтесь с новыми паттернами и принципами разр...