Есть вопросы?
Закажите звонок специалиста!
Есть вопросы?
Закажите звонок специалиста!
Существует несколько вариантов развертывания кластера Kubernetes. Самый простой из них — Minikube или кластер на одну ноду. Подробный процесс его установки описан на официальном сайте Kubernetes. Мы же рассмотрим установку кластера на нескольких нодах, используя kubespray.
Kubespray — это набор Ansible-ролей для установки и конфигурации Kubernetes. Он обеспечивает:
Для понимания процесса установки рассмотрим структуру кластера. Кластер Kubernetes состоит из двух типов ресурсов:
При разворачивании приложения в Kubernetes, мы сообщаем Мастеру, что нужно запустить контейнеры приложений. Мастер планирует запуск контейнеров на узлах кластера. Узлы связываются с мастером с помощью Kubernetes API , который предоставляет Мастер.
Перейдем непосредственно к процессу установки. Подготавливаем несколько виртуальных машин. У нас будет 3 виртуальных машины с ОС Centos 7 minimal. В дальнейших статьях, посвященных Kubernetes, мы будем добавлять виртуальные машины для демонстрации всех возможностей кластера.
Адресация виртуальных машин:
Для каждой виртуальной машины меняем имя командой внутри гостевой ОС. Выполняем команду:
[[email protected] ~]# hostnamectl set-hostname k8s-1
Здесь k8s-1 — имя первой виртуальной машины, k8s-2 и k8s-3 — второй и третьей соответственно. После применения перегружаем виртуальные машины.
Устанавливаем дополнительное ПО:
[[email protected] ~]# yum install wget curl git screen python-pip sshpass
Генерируем ключ SSH:
[[email protected] ~]# ssh-keygen
Копируем ключ на удаленные серверы. Выполняем команды:
[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] [[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] [[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
Устанавливаем ansible:
[[email protected] ~]# yum install ansible pip
Редактируем файл хостов для ansible:
[[email protected] ~]# nano /etc/ansible/hosts
Добавляем строчки:
[k8sservers] k8s-1 k8s-2 k8s-3
Создаем новый playbook для ansible. Данный playbook необходим для подготовки серверов:
[[email protected] ~]# 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
Данный файл выполняет следующие действия на всех нодах:
Эти действия необходимы для дальнейшей корректной установки и работы Kubernetes.
Выполняем команду:
[[email protected] ~]# ansible-playbook pb1.yml
После выполнения, все серверы автоматически перезагрузятся. Подготовка серверов закончена, можно переходить к установке Kubernetes.
Делаем клон репозитория kubespray. Выполняем команду:
[[email protected] ]# 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 репозитория.
[[email protected] ]#cd kubespray [[email protected] kubespray]# git checkout remotes/origin/release-2.13
Выполняем установку необходимых зависимостей:
[[email protected] kubespray ]# pip install -r requirements.txt
Редактируем файл где описываем хосты и кто какую роль будет выполнять. Так же прописываем IP-адреса, которые будут использоваться:
[[email protected] ]# 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. Редактируем файл:
[[email protected] ]# 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
Запускаем установку кластера:
[[email protected] ]# cd /root/kubespray [[email protected] kubespray]# ansible-playbook -u root -b -i inventory/sample/inventory.ini cluster.yml
Во время не должно быть ошибок. Если же они возникли, то необходимо исправить найденные проблемы и запустить установку кластера снова.
После установки проверяем информацию по кластеру (должно выдавать kubernetes master is running at ...):
[[email protected] kubespray]# kubectl cluster-info
Проверяем статус узлов (покажется список узлов, роль и статус Ready с таймингом работы):
[[email protected] kubespray]# kubectl get nodes
Проверяем статус подов:
[[email protected] ]# kubectl get pod -A
На этом базовая установка k8s закончена.
Мы можем помочь в настройке k8s и поддержке кластера. Оставьте заявку!