Как развернуть Kubernetes с помощью Kubespray

Как развернуть Kubernetes с помощью Kubespray

by moiseevrus

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

Kubespray — это набор игр Ansible, инвентаризация, инструменты подготовки и знания предметной области для общих задач управления конфигурацией кластеров OS/Kubernetes. Он обеспечивает высокодоступный кластер, компонуемые атрибуты и поддержку самых популярных дистрибутивов Linux. Он стал де-факто готовым к работе установщиком Kubernetes, которому доверяют в облачном сообществе (10 тысяч звезд на GitHub).

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

 

Настройка предварительных условий

 

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

  1. Создайте инфраструктуру
  2. Развертывание 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 в новой учетной записи и установите для него значение Все адреса , чтобы легко убедиться, что последующие шаги в этом руководстве будут работать.

Настройка разрешений на подключение API

Вы можете и по соображениям безопасности, возможно, должны ограничить это позже своим собственным IP-адресом.

Настройте учетные данные пользователя UpCloud

Наконец, вам нужно будет передать Terraform учетные данные новой учетной записи API. Используйте приведенные ниже команды, чтобы экспортировать новое имя пользователя и пароль API в качестве переменных среды в текущем сеансе оболочки. Затем имя пользователя и пароль будут доступны для Terraform CLI при создании кластера.

export TF_VAR_UPCLOUD_USERNAME=
export TF_VAR_UPCLOUD_PASSWORD=

Примечание. Приведенные выше учетные данные представлены в виде открытого текста. Желательно хранить имя пользователя и пароль в кодировке Base64 для более постоянного использования.

 

Обзор инфраструктуры

 

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

Пример настройки кластера 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.

Кластер Kubernetes в панели управления UpCloud

Вы также должны получить файл инвентаря с именем 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 сделают всю тяжелую работу!

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

Развертывание Ansible завершено

 

Доступ к вашему новому кластеру 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

You may also like

Leave a Comment