Найти в Дзене
EFSOL

Установка Kubernetes

Существует несколько вариантов развертывания кластера Kubernetes. Самый простой из них — Minikube или кластер на одну ноду. Подробный процесс его установки описан на официальном сайте Kubernetes. Мы же рассмотрим установку кластера на нескольких нодах, используя kubespray. Kubespray — это набор Ansible-ролей для установки и конфигурации Kubernetes. Он обеспечивает: Для понимания процесса установки рассмотрим структуру кластера. Кластер Kubernetes состоит из двух типов ресурсов: При разворачивании приложения в Kubernetes, мы сообщаем Мастеру, что нужно запустить контейнеры приложений. Мастер планирует запуск контейнеров на узлах кластера. Узлы связываются с мастером с помощью Kubernetes API , который предоставляет Мастер. ПОДГОТОВКА ВМ Перейдем непосредственно к процессу установки. Подготавливаем несколько виртуальных машин. У нас будет 3 виртуальных машины с ОС Centos 7 minimal. В дальнейших статьях, посвященных Kubernetes, мы будем добавлять виртуальные машины для демонстрации всех в
Оглавление

Существует несколько вариантов развертывания кластера Kubernetes. Самый простой из них — Minikube или кластер на одну ноду. Подробный процесс его установки описан на официальном сайте Kubernetes. Мы же рассмотрим установку кластера на нескольких нодах, используя kubespray.

Kubespray — это набор Ansible-ролей для установки и конфигурации Kubernetes. Он обеспечивает:

  1. кластер высокой доступности
  2. поддержку большинства популярных дистрибутивов Linux
  3. тесты CI

Для понимания процесса установки рассмотрим структуру кластера. Кластер Kubernetes состоит из двух типов ресурсов:

  1. Master отвечает за управление кластером. Мастер координирует все действия в вашем кластере, такие как планирование приложений, поддержание желаемого состояния приложений, масштабирование приложений и развертывание новых обновлений.
  2. Node (узел) — это виртуальная машина или физический компьютер, который служит рабочим компьютером в кластере Kubernetes. У каждого узла есть Kubelet, который является агентом для управления узлом и взаимодействия с мастером Kubernetes. Узел также должен иметь инструменты для обработки контейнерных операций, такие как containerd или Docker.

При разворачивании приложения в Kubernetes, мы сообщаем Мастеру, что нужно запустить контейнеры приложений. Мастер планирует запуск контейнеров на узлах кластера. Узлы связываются с мастером с помощью Kubernetes API , который предоставляет Мастер.

ПОДГОТОВКА ВМ

Перейдем непосредственно к процессу установки. Подготавливаем несколько виртуальных машин. У нас будет 3 виртуальных машины с ОС Centos 7 minimal. В дальнейших статьях, посвященных Kubernetes, мы будем добавлять виртуальные машины для демонстрации всех возможностей кластера.

Адресация виртуальных машин:

  1. k8s-1 ip 10.15.73.41
  2. k8s-3 ip 10.15.73.42
  3. k8s-3 ip 10.15.73.43

Для каждой виртуальной машины меняем имя командой внутри гостевой ОС. Выполняем команду:

[root@k8s-1 ~]# hostnamectl set-hostname k8s-1

Здесь k8s-1 — имя первой виртуальной машины, k8s-2 и k8s-3 — второй и третьей соответственно. После применения перегружаем виртуальные машины.

Устанавливаем дополнительное ПО:

[root@k8s-1 ~]# yum install wget curl git screen python-pip sshpass

Генерируем ключ SSH:

[root@k8s-1 ~]# ssh-keygen

Копируем ключ на удаленные серверы. Выполняем команды:

[root@k8s-1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-1
[root@k8s-1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-2
[root@k8s-1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-3

Устанавливаем ansible:

[root@k8s-1 ~]# yum install ansible pip

Редактируем файл хостов для ansible:

[root@k8s-1 ~]# nano /etc/ansible/hosts

Добавляем строчки:

[k8sservers]
k8s-1
k8s-2
k8s-3

Создаем новый playbook для ansible. Данный playbook необходим для подготовки серверов:

[root@k8s-1 ~]# nano pb1.yml

Содержимое файла pb1.yml:

---
- hosts: all
tasks:

- name: Install EPEL repo
yum:
name: epel-release
state: present

- name: Disable SELinux
selinux:
state: disabled

- name: Disable SWAP since kubernetes can't work with swap enabled (1/2)
shell: |
swapoff -a

- name: Disable SWAP in fstab since kubernetes can't work with swap enabled (2/2)
replace:
path: /etc/fstab
regexp: '^([^#].*?\sswap\s+sw\s+.*)$'
replace: '# \1'

- name: set timezone to Europe/Moscow
timezone:
name: Europe/Moscow

- name: Ensure firewalld service is disabled and stopped
systemd:
name: firewalld
state: stopped
enabled: no
masked: yes
register: firewalld_result
failed_when: "firewalld_result is failed and 'Could not find the requested service' not in firewalld_result.msg"
when: ansible_os_family == 'RedHat' and ansible_distribution_major_version >= '7'

- name: restart server
shell: 'sleep 1 && shutdown -r now "Reboot triggered by Ansible" && sleep 1'
async: 1
poll: 0
become: true

Данный файл выполняет следующие действия на всех нодах:

  1. Подключает репозиторий EPEL
  2. Отключает Selinux
  3. Отключает Swap
  4. Отключает firewalld
  5. Меняет timezone

Эти действия необходимы для дальнейшей корректной установки и работы Kubernetes.

Выполняем команду:

[root@k8s-1 ~]# ansible-playbook pb1.yml

После выполнения, все серверы автоматически перезагрузятся. Подготовка серверов закончена, можно переходить к установке Kubernetes.

УСТАНОВКА KUBERNETES

Делаем клон репозитория kubespray. Выполняем команду:

[root@k8s-1 ]# git clone https://github.com/kubernetes-sigs/kubespray

Последняя версия Kubespray не поддерживает установку Kubernetes ниже 1.17.0. В нашем примере мы будем устанавливать версию 1.16.x для демонстрации возможности обновления через Kubespray в дальнейших статьях. Для установки версии 1.16.14 переключаемся в ветку remotes/origin/release-2.13 репозитория.

[root@k8s-1 ]#cd kubespray
[root@k8s-1 kubespray]# git checkout remotes/origin/release-2.13

Выполняем установку необходимых зависимостей:

[root@k8s-1 kubespray ]# pip install -r requirements.txt

Редактируем файл где описываем хосты и кто какую роль будет выполнять. Так же прописываем IP-адреса, которые будут использоваться:

[root@k8s-1 ]# nano /root/kubespray/inventory/sample/inventory.ini
k8s-1 ansible_ssh_host=10.15.73.41 ip=10.15.73.41
k8s-2 ansible_ssh_host=10.15.73.42 ip=10.15.73.42
k8s-3 ansible_ssh_host=10.15.73.43 ip=10.15.73.43

[kube-master]
k8s-1

[etcd]
k8s-1
k8s-2
k8s-3

[kube-node]
k8s-2
k8s-3


[k8s-cluster:children]
kube-node
kube-master

Меняем устанавливаемую версию. На момент написания статьи была версия 1.16.14. Редактируем файл:

[root@k8s-1 ]# nano /root/kubespray/inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml

Меняем следующее значение:

## Change this to use another Kubernetes version, e.g. a current beta release
kube_version: v1.16.14

Запускаем установку кластера:

[root@k8s-1 ]# cd /root/kubespray
[root@k8s-1 kubespray]# ansible-playbook -u root -b -i inventory/sample/inventory.ini cluster.yml

Во время не должно быть ошибок. Если же они возникли, то необходимо исправить найденные проблемы и запустить установку кластера снова.

После установки проверяем информацию по кластеру (должно выдавать kubernetes master is running at ...):

[root@k8s-1 kubespray]# kubectl cluster-info

Проверяем статус узлов (покажется список узлов, роль и статус Ready с таймингом работы):

[root@k8s-1 kubespray]# kubectl get nodes

Проверяем статус подов:

[root@k8s-1 ]# kubectl get pod -A

На этом базовая установка k8s закончена.

Мы можем помочь в настройке k8s и поддержке кластера. Оставьте заявку!