Kubernetes — это система оркестрации с открытым исходным кодом, которая автоматизирует процесс развертывания и обслуживания контейнерных приложений. Он дает вам механизм планирования и запуска контейнеров в кластерах из нескольких физических и/или виртуальных машин. Для получения дополнительной информации ознакомьтесь с официальной документацией Kubernetes .
Kubespray — это набор игр Ansible, инвентаризация, инструменты подготовки и знания предметной области для общих задач управления конфигурацией кластеров OS/Kubernetes. Он обеспечивает высокодоступный кластер, компонуемые атрибуты и поддержку самых популярных дистрибутивов Linux. Он стал де-факто готовым к работе установщиком Kubernetes, которому доверяют в облачном сообществе (10 тысяч звезд на GitHub).
В этом руководстве мы покажем шаги, необходимые для развертывания кластера Kubernetes в UpCloud с помощью Kubespray. В руководстве предполагается, что у вас есть базовые знания о Kubernetes и различных терминах, связанных с ним, но шаги достаточно просты для новичков.
Contents
Настройка предварительных условий
В принципе, шаги в этом руководстве можно разделить на следующие две основные процедуры, необходимые для настройки нового кластера Kubernetes.
- Создайте инфраструктуру
- Развертывание Kubernetes
Прежде чем углубляться в конкретные шаги, клонируйте Kubespray на свой компьютер, например, с помощью инструмента командной строки git. Если у вас еще не установлен git, вы можете использовать приведенную ниже команду, чтобы установить git в Ubuntu или других операционных системах на основе Debian, или проверить другие параметры ОС в руководстве по установке git .
sudo apt install git-all
Затем загрузите пакет Kubespray и перейдите в новый каталог.
git клон
git clone
https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
Вам также потребуется установить Ansible и другие зависимости. К счастью, Kubespray предоставляет удобный список требований, которые можно использовать для установки всех необходимых компонентов с помощью одной команды. Однако, чтобы это работало, вам сначала понадобится установщик пакетов Python, pip.
sudo apt install python3-pip sudo pip3 install -r requirements.txt
Если вы столкнулись с какой-либо проблемой при установке необходимых компонентов, проверьте официальный репозиторий Kubespray , чтобы узнать, как устранить неполадки.
Установка Терраформ
Terraform — это инструмент подготовки инфраструктуры. Он используется для безопасного и эффективного создания, изменения и управления версиями инфраструктуры. Установив Terraform CLI на свой компьютер, вы получите все инструменты, необходимые для управления вашей облачной инфраструктурой.
Чтобы установить Terraform, найдите подходящий для вашей системы пакет , скачайте и установите его.
Например, чтобы установить Terraform в большинстве систем Linux, сначала загрузите последнюю версию.
wget https://releases.hashicorp.com/terraform/0.14.7/terraform_0.14.7_linux_amd64.zip
Затем извлеките двоичные файлы в подходящее место, например /usr/local/bin , и убедитесь, что они включены в переменную среды PATH. Например, с помощью приведенной ниже команды.
sudo unzip terraform_0.14.7_linux_amd64.zip -d /usr/local/bin
Вы можете убедиться, что установка работает, перечислив доступные подкоманды Terraform в терминале.
terraform -help
Usage: terraform [-version] [-help] [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. ...
Настройка доступа к API
Чтобы Terraform могла развертывать облачные ресурсы в вашей учетной записи UpCloud, вам сначала необходимо предоставить ей доступ. Для этого выполните следующие действия.
Создайте отдельную учетную запись API в панели управления UpCloud.
Рекомендуется создать отдельного пользователя API для Terraform для взаимодействия с UpCloud API во время развертывания инфраструктуры вместо использования вашей основной учетной записи. Вы можете сделать это в панели управления UpCloud, используя учетные записи участников рабочей области. Имя и пароль вашей учетной записи API очень похожи на традиционный идентификатор API и пару ключей с дополнительным преимуществом, заключающимся в возможности свободно устанавливать их самостоятельно.
Чтобы создать новую учетную запись, выберите « Люди » в левой части панели управления UpCloud и следуйте инструкциям. Для получения дополнительной информации см. этот учебник о том, как начать работу с UpCloud API .
Разрешить API-доступ к вашей учетной записи UpCloud
После того, как вы создали свою учетную запись API, вам нужно будет разрешить ей доступ к API UpCloud, чтобы Terraform мог создать вашу инфраструктуру в UpCloud. Для этого убедитесь, что вы выбрали Разрешить подключения API в новой учетной записи и установите для него значение Все адреса , чтобы легко убедиться, что последующие шаги в этом руководстве будут работать.
Вы можете и по соображениям безопасности, возможно, должны ограничить это позже своим собственным IP-адресом.
Настройте учетные данные пользователя UpCloud
Наконец, вам нужно будет передать Terraform учетные данные новой учетной записи API. Используйте приведенные ниже команды, чтобы экспортировать новое имя пользователя и пароль API в качестве переменных среды в текущем сеансе оболочки. Затем имя пользователя и пароль будут доступны для Terraform CLI при создании кластера.
export TF_VAR_UPCLOUD_USERNAME= export TF_VAR_UPCLOUD_PASSWORD=
Примечание. Приведенные выше учетные данные представлены в виде открытого текста. Желательно хранить имя пользователя и пароль в кодировке Base64 для более постоянного использования.
Обзор инфраструктуры
Кластер в Kubernetes состоит из нескольких плоскостей управления и рабочих узлов. Узлы плоскости управления — это узлы, которые контролируют и управляют набором рабочих узлов (среда выполнения рабочих нагрузок), а рабочие узлы — это узлы, на которых выполняются контейнерные приложения.
Пример настройки кластера Kubernetes может выглядеть следующим образом.
Вам необходимо определить количество как плоскости управления, так и рабочих узлов для вашего кластера. В этом посте мы будем использовать один узел плоскости управления и три рабочих узла.
Чтобы создать кластер Kubernetes, вам необходимо убедиться, что в вашей системе установлен CLI Terraform, а также правильная конфигурация для вашего кластера. Terraform помогает нам определить инфраструктуру как код. Определение инфраструктуры как кода дает много преимуществ, таких как простое редактирование, просмотр и управление версиями, а также легкое совместное использование членами команды.
Настройка кластера
Далее мы настроим конфигурацию для нашего кластера. Чтобы не изменять файлы шаблона, давайте скопируем необходимые файлы в новый каталог и внесем изменения там.
Создайте каталог с именем my-upcloud-cluster следующим образом. Переменная CLUSTER здесь является сокращением имени нашего каталога. Если вы хотите назвать свой каталог по-другому, просто измените следующую строку, и остальная часть конфигурации будет работать так же.
CLUSTER=my-upcloud-cluster
mkdir inventory/$CLUSTER
Скопируйте образец инвентаризации и конфигурацию кластера по умолчанию в новый каталог.
cp -r inventory/sample inventory/$CLUSTER cp -r contrib/terraform/upcloud/* inventory/$CLUSTER/
Измените рабочий каталог на новый каталог конфигурации и отредактируйте файл cluster-settings.tfvars в соответствии с вашими требованиями.
cd inventory/$CLUSTER
vim cluster-settings.tfvars
Ниже приведены основные переменные Terraform, которые вы можете изменить в файле cluster-settings.tfvars .
- hostname : допустимое доменное имя, например, example.com. Максимальная длина составляет 128 символов.
- template_name : имя или UUID базового образа.
- имя пользователя : пользователь для доступа к узлам, например, через SSH. Обратите внимание , что имя пользователя kube зарезервировано kubernetes.
- ssh_public_keys : требуется один или несколько открытых SSH-ключей, чтобы иметь возможность доступа и подготовки компьютеров после развертывания.
- zone : Зона, в которой будет создан кластер. Проверитьдоступные зоны для справки.
- машины : облачные серверы, которые будут подготовлены. Содержит список машин, составляющих кластер. Ключ этого объекта будет использоваться как имя машины.
- node_type : роль этого узла ( master|worker , в Kubespray и, следовательно, в этом руководстве называется «master» из-за устаревшего именования плоскости управления — вероятно, изменится в будущем).
- cpu : количество ядер процессора.
- mem : Размер памяти в МБ.
- disk_size : размер хранилища в ГБ.
Например, чтобы создать кластер с двумя узлами плоскости управления, тремя рабочими узлами и каждым узлом с 2 ядрами, 4 ГБ памяти и размером диска 250 ГБ, замените раздел компьютеров в переменных следующим фрагментом кода.
machines = { "master-0" : { "node_type" : "master", #number of cpu cores "cpu" : "2", #memory size in MB "mem" : "4096" # The size of the storage in GB "disk_size" : 250 }, "worker-0" : { "node_type" : "worker", #number of cpu cores "cpu" : "2", #memory size in MB "mem" : "4096" # The size of the storage in GB "disk_size" : 250 }, "worker-1" : { "node_type" : "worker", #number of cpu cores "cpu" : "2", #memory size in MB "mem" : "4096" # The size of the storage in GB "disk_size" : 250 }, "worker-2" : { "node_type" : "worker", #number of cpu cores "cpu" : "2", #memory size in MB "mem" : "4096" # The size of the storage in GB "disk_size" : 250 } }
Не забудьте заменить значение переменной ssh_public_keys вашим общедоступным SSH-ключом, так как он будет использоваться для подключения по ssh к каждой машине при установке Kubernetes с помощью Kubespray.
Развертывание кластера
Теперь, когда настройки выполнены, вы можете приступить к развертыванию своего кластера.
Инициализируйте каталог конфигурации
Команда terraform init используется для инициализации рабочего каталога, содержащего файлы конфигурации Terraform. Он загрузит и установит плагин провайдера UpCloud Terraform.
Выполните следующую команду, чтобы инициализировать Terraform.
terraform init
Проверьте свою инфраструктуру
Команда terraform plan проверяет синтаксическую правильность вашей конфигурации и создает план выполнения. Terraform выполняет обновление, если оно явно не отключено, а затем определяет, какие действия необходимы для достижения желаемого состояния, указанного в файлах конфигурации.
Выполните следующую команду, чтобы увидеть свой план выполнения:
terraform plan --var-file cluster-settings.tfvars -state=tfstate-$CLUSTER.tfstate
Развернуть инфраструктуру
Команда terraform apply используется для применения изменений, необходимых для достижения желаемого состояния конфигурации или предопределенного набора действий, сгенерированного планом выполнения Terraform. Он создает новую или вносит изменения в существующую инфраструктуру в соответствии с вашей конфигурацией.
Выполните следующую команду, чтобы создать свой кластер, и ответьте « да » на запрос подтверждения:
terraform apply --var-file cluster-settings.tfvars -state=tfstate-$CLUSTER.tfstate
Как только Terraform завершит развертывание, вы можете проверить ресурсы своего кластера в панели управления UpCloud . На следующем рисунке показаны четыре сервера (одна плоскость управления и три рабочих узла), созданные Terraform.
Вы также должны получить файл инвентаря с именем inventory.ini , который вы можете использовать с Kubespray. Мы будем использовать файл инвентаризации для настройки кластера Kubernetes позже.
ls
cluster-settings.tfvars inventory.ini sample terraform.tfstate tfstate-my-upcloud-cluster.tfstate
Настройка Kubernetes с помощью Kubespray
Ansible — это инструмент с открытым исходным кодом для предоставления программного обеспечения, управления конфигурацией и развертывания приложений, позволяющий использовать инфраструктуру как код.
Настроить Ansible
Установите переменные среды ANSIBLE_CONFIG в файл конфигурации Kubespray ansible следующим образом:
export ANSIBLE_CONFIG=../../ansible.cfg
Убедитесь, что у вас есть базовое SSH-подключение к узлам. Вы можете сделать это, выполнив следующую команду ansible.
ansible -i inventory.ini -m ping all
Вы должны увидеть что-то похожее на следующем рисунке, если все узлы доступны.
master-0.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } worker-0.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } worker-1.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } worker-2.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Развертывание Kubernetes
Теперь вы можете развернуть Kubernetes с помощью Kubespray, используя файл инвентаризации, созданный на этапе применения Terraform, следующим образом.
Примечание: если вы используете другого пользователя для доступа к узлам, отличному от ubuntu по умолчанию , замените ubuntu новым пользователем в файле inventory.ini .
ansible-playbook -i inventory.ini ../../cluster.yml -b -v
Затем расслабьтесь и расслабьтесь, пока Ansible и Kubespray сделают всю тяжелую работу!
После этого вы увидите обзор развертывания, как показано на снимке экрана ниже.
Доступ к вашему новому кластеру Kubernetes
По умолчанию Kubespray настраивает хосты kube-master с доступом к kube-apiserver через порт 6443 как http://127.0.0.1:6443. Вы можете подключиться к этому с одного из мастер-узлов.
Получите IP-адрес одного из мастер-узлов и подключитесь к нему по SSH.
Например, следующий сценарий извлекает IP-адрес узла master-0 из файла инвентаризации и открывает к нему SSH-соединение, используя имя пользователя по умолчанию.
# get the IP address of master-0 ip=$(grep -m 1 "master-0" inventory.ini | grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | head -n 1) # ssh to master-0 node ssh ubuntu@$ip
Как только вы войдете в один из главных узлов, вы сможете запустить любую из команд kubectl . Например, с помощью приведенной ниже команды отображается список узлов в кластере.
sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION master-0.example.com Ready control-plane,master 10m v1.20.5 worker-0.example.com Ready 10m v1.20.5 worker-1.example.com Ready 10m v1.20.5 worker-2.example.com Ready 10m v1.20.5
Доступ к кластеру Kubernetes с рабочей станции
Хотя в приведенном выше примере мы вошли в один из узлов кластера, также можно управлять Kubernetes прямо с вашей собственной рабочей станции. Чтобы это работало, просто скопируйте файл /etc/kubernetes/admin.conf с главного узла на свою рабочую станцию и используйте его с kubectl .
Следующий скрипт делает свое дело.
# get the IP address of master-0 ip=$(grep -m 1 "master-0" inventory.ini | grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | head -n 1) # copy /etc/kubernetes/admin.conf file on the local system ssh ubuntu@$ip 'sudo cat /etc/kubernetes/admin.conf' > admin.conf
Убедитесь, что вы установили инструмент kubectl на свой локальный компьютер.
Если вы еще этого не сделали, следуйте инструкциям здесь . После установки инструмента вы можете взаимодействовать со своим кластером.
Чтобы получить удаленный доступ к вашему кластеру Kubernetes, вам нужно сообщить kubectl, где находится ваш файл конфигурации. Один из способов сделать это — указать переменную среды KUBECONFIG на файл kubeconfig вашего кластера, как показано ниже:
export KUBECONFIG=admin.conf
Последнее, что вам нужно сделать перед запуском любой из команд kubectl, — это заменить IP-адрес Kubernetes API в admin.conf на один из IP-адресов узла плоскости управления.
Откройте файл admin.conf в своем любимом текстовом редакторе и замените 127.0.0.1 IP-адресом, который вы получили выше.
vim admin.conf
В качестве альтернативы, если у вас уже есть IP-адрес первого главного узла, сохраните его в переменной $ip . Вы можете поменять IP-адрес 127.0.0.1 на IP-адрес, сохраненный в переменной, с помощью следующей команды.
sed -i "s/127.0.0.1/$ip/g" admin.conf
С IP-адресом главного узла, установленным в файле администратора, вы готовы начать играть со своим кластером с вашего локального компьютера!
Например, используйте следующую команду, чтобы отобразить список пространств имен в вашем кластере.
kubectl get namespace
NAME STATUS AGE default Active 12m kube-node-lease Active 12m kube-public Active 12m kube-system Active 12m
Поздравляем, теперь у вас есть полнофункциональный готовый к работе кластер Kubernetes!
Срывать
Когда вы закончите тестирование кластера и он вам больше не понадобится, вы можете использовать Terraform для демонтажа развернутой инфраструктуры.
Команда terraform destroy используется для уничтожения управляемой Terraform инфраструктуры. Он прерывает ресурсы, определенные в вашей конфигурации Terraform, и выполняет действия, противоположные тому, что делает terraform apply .
Вы можете снести свою инфраструктуру, используя следующую команду Terraform:
terraform destroy --var-file cluster-settings.tfvars -state=tfstate-$CLUSTER.tfstate ../../contrib/terraform/upcloud/
После удаления вы всегда можете использовать одни и те же файлы конфигурации, чтобы настроить и изменить свой кластер и развернуть его снова с мгновенным уведомлением!
Статья является переводом upcloud.com