3 Kubernetes кластеров 1 база на локальной машине - PullRequest
1 голос
/ 07 ноября 2019

Я хотел бы изучить Kubernetes и хотел бы установить его на своем ноутбуке.

Архитектура будет выглядеть следующим образом:

enter image description here

  • Создание 4 экземпляров виртуальных машин сервера Ubuntu 18.04 на моем ноутбуке
  • 3 из 4 виртуальных машин будут кластерами Kubernetes, а 1 виртуальная машина будет базовой
  • Доступ через SSH к базовой виртуальной машине

Для виртуализации я использую Virtual Box.

Вопрос в том, как этого добиться?

Ответы [ 2 ]

4 голосов
/ 12 ноября 2019

Чтобы настроить Kubernetes Cluster на серверах Ubuntu с Virtualbox и Kubeadm, выполните следующие действия:

Предварительные требования:

  • Виртуальные машины с минимальной спецификацией:
    • 2ядра и 2 ГБ ОЗУ для главного узла
    • 1 ядро ​​и 1 ГБ для каждого из рабочих узлов
  • Ubuntu Server 18.04, установленный на всех виртуальных машинах
  • Сервер OpenSSHустановлено на всех виртуальных машинах

Все виртуальные машины должны взаимодействовать с Интернетом, главным хостом и друг с другом. Это можно сделать с помощью различных средств, таких как мостовые сети, адаптеры виртуальных хостов и т. Д. Пример схемы сети, приведенный ниже, можно настроить.

Схема сети

Ansible:

Вы можете делать все вручную, но для ускорения процесса настройки вы можете использовать инструмент автоматизации, например Ansible. Его можно установить на хост виртуализации, другую виртуальную машину и т. Д.

Этапы установки для воспроизведения на хосте

  • Обновление информации о пакетах в репозитории:
    $ sudo apt update
  • Установка менеджера пакетов для Python3:
    $ sudo apt install python3-pip
  • Установка пакета Ansible:
    $ sudo pip3 install ansible

Настройка доступа по ключу SSH:

Генерация пар ключей

Чтобы иметь возможность подключаться к виртуальным машинам без пароля, вам необходимо настроить ключи ssh. Команда ниже создаст пару ключей ssh ​​(приватных и открытых) и позволит вам войти в разные системы без ввода пароля.
$ ssh-keygen -t rsa -b 4096
Эти ключи будут созданы в расположении по умолчанию: / home /USER / .ssh

Авторизация ключей на виртуальных машинах

Следующим шагом является загрузка вновь созданных ключей ssh ​​на все виртуальные машины.
Для каждой извиртуальная машина, которую вам нужно вызвать:
$ ssh-copy-id USER@IP_ADDRESS
Эта команда скопирует ваш открытый ключ в файл авторизованные_ключи и позволит вам войти без пароля.

SSH root-доступ

По умолчанию доступ к корневой учетной записи с ssh невозможен только по паролю. Доступ к нему можно получить с помощью ключей ssh ​​(которые вы создали ранее). Предполагая настройки файлов по умолчанию, вы можете скопировать каталог ssh из пользователя в корневой каталог.

Этот шаг необходимо выполнить на всех виртуальных машинах:
$ sudo cp -r /home/USER/.ssh /root/

Вы можете проверить это, выполнив следующую команду на главном хосте:
$ ssh root@IP_ADDRESS

Если вы можете подключиться без пароля, это означает, что ключи настроены правильно.

Проверка соединения между виртуальными машинами и Ansible:

Проверка соединения

Необходимо проверить, может ли Ansible подключаться ко всем виртуальным машинам. Для этого вам понадобятся 2 вещи:

  • Hosts файл с информацией о хостах (в данном случае с виртуальными машинами)
  • файл Playbook с инструкциями, что вам требуется от Ansible для выполнения

Пример файла hosts:

[kubernetes:children]  
master  
nodes  

[kubernetes:vars]  
ansible_user=root  
ansible_port=22  

[master]  
kubernetes-master ansible_host=10.0.0.10  

[nodes]  
kubernetes-node1 ansible_host=10.0.0.11  
kubernetes-node2 ansible_host=10.0.0.12  
kubernetes-node3 ansible_host=10.0.0.13

Файл хостов состоит из 2 основных групп хостов:

  • master - группа, созданная для главного узла
  • узлов - группа, созданная для рабочих узлов

Переменные, специфичные для группы, хранятся в разделе [kubernetes: vars] .

Пример playbook:

- name: Playbook for checking connection between hosts  
  hosts: all  
  gather_facts: no  

  tasks:
  - name: Task to check the connection  
    ping:

Основная цель вышеприведенного playbook - проверить соединение между хостом и виртуальными машинами.
Вы можете проверить соединение, вызвав команду:
$ ansible-playbook -i hosts_file ping.yaml

Вывод этой команды должен выглядеть следующим образом:

PLAY [Playbook for checking connection between hosts] *****************************************************  

TASK [Task to check the connection] ***********************************************************************  

ok: [kubernetes-node1]  
ok: [kubernetes-node2]  
ok: [kubernetes-node3]  
ok: [kubernetes-master]  

PLAY RECAP ************************************************************************************************  

kubernetes-master : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0  
kubernetes-node1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0  
kubernetes-node2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0  
kubernetes-node3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0  

Вывод выше подтверждает, что соединение между Ansible и виртуальными машинами было успешным.

Конфигурация перед развертыванием кластера:

Настройка имен хостов

Имена хостов можно настроить с помощью Ansible. Каждый vm должен соединяться с каждым vm по своим именам хостов. Ansible может изменять имена хостов, а также файл / etc / hosts. Пример playbook: hostname.yaml

Отключить SWAP

Необходимо поменять своп при работе с Kubernetes. Пример playbook: disable_swap.yaml

Установка дополнительного программного обеспечения

Некоторые пакеты требуются перед инициализацией. Все они могут быть установлены с Ansible:
Пример playbook: apt_install.yaml

Контейнерный интерфейс времени выполнения

В этом примере вы установите Docker в качестве своего CRI. Playbook docker_install.yaml будет:

  • Добавить ключ подписи apt для Docker
  • Добавить хранилище Docker
  • Установить Docker с определенной версией (рекомендуется последняя))

Конфигурация Docker

[ПРЕДУПРЕЖДЕНИЕ IsDockerSystemdCheck]: обнаружил «cgroupfs» как драйвер cgroup Docker. Рекомендуемый драйвер "systemd"

При развертывании кластера Kubernetes kubeadm выдаст выше предупреждение о драйвере Docker cgroup. Playbook docker_configure.yaml был создан для решения этой проблемы.

Установка инструментов Kubernetes

Существует несколько основных компонентов Kubernetes, которые необходимо установить перед развертыванием кластера. Playbook kubetools_install.yaml будет:

  • Для главного и рабочего узлов:
    • Добавить подходящий ключ подписи для Kubernetes
    • Добавить хранилище Kubernetes
    • Установить kubelet и kubeadm
  • Дополнительно для главного узла:
    • Установить kubectl

Перезагрузить

Playbook reboot.yaml перезагрузит все виртуальные машины.

Развертывание кластера:

Инициализация кластера

После успешного завершения всех описанных выше шагов можно создать кластер. Команда ниже инициализирует кластер:

$ kubeadm init --apiserver-advertise-address=IP_ADDRESS_OF_MASTER_NODE --pod-network-cidr=192.168.0.0/16

Kubeadm может дать предупреждение о количестве процессоров. Его можно игнорировать, передавая дополнительный аргумент команде инициализации kubeadm: --ignore-preflight-errors=NumCPU

При успешной инициализации kubeadm должно получиться что-то похожее на это:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.0.0.10:6443 --token SECRET-TOKEN \
    --discovery-token-ca-cert-hash sha256:SECRET-CA-CERT-HASH

Копировать команду соединения kubeadm для всех рабочих узлов:

kubeadm join 10.0.0.10:6443 --token SECRET-TOKEN \
    --discovery-token-ca-cert-hash sha256:SECRET-CA-CERT-HASH

Запустите приведенные ниже команды как обычный пользователь:

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

Развертывание сетевого интерфейса контейнера (CNI)

CNI отвечает за взаимодействие между модулями и узлами. Есть много примеров, таких как:

  • Фланель
  • Калико
  • Плетение
  • Multus

Команда ниже установитБязь:

$ kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml

Подготовка рабочих узлов

Выполнение ранее сохраненной команды из вывода kubeadm init на всех рабочих узлах :

kubeadm join 10.0.0.10:6443 --token SECRET-TOKEN \
    --discovery-token-ca-cert-hash sha256:SECRET-CA-CERT-HASH

Все рабочие узлы должны выводить:

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

Тестирование:

Выполнить приведенную ниже команду на главном узле как обычный пользователь, чтобы проверить, правильно ли подключены узлы:

$ kubectl get nodes

Вывод этой команды:

NAME                STATUS   ROLES    AGE    VERSION
kubernetes-master   Ready    master   115m   v1.16.2
kubernetes-node1    Ready    <none>   106m   v1.16.2
kubernetes-node2    Ready    <none>   105m   v1.16.2
kubernetes-node3    Ready    <none>   105m   v1.16.2

Выше вывода делается вывод, что все узлы настроены правильно.

Модули теперь могут быть развернуты в кластере!

1 голос
/ 07 ноября 2019

Надеюсь, это поможет. Самый простой способ, который я нашел, попробовал почти любой другой способ сделать это. Rancher 2.0 - это инструмент для оркестровки, позволяющий легко приступить к созданию кластера специально для kubernetes и максимально быстро развернуть первую службу. Это помогает в понимании протоколов кубернетес через нисходящий подход.

Rancher предоставляет очень простой в использовании удобный пользовательский интерфейс, чтобы войти в него с хорошо написанными руководствами. Если вам помогает визуализация, это лучший способ сделать это.

Это пример использования имеющейся у нас архитектуры и того, чего можно достичь с помощью Rancher RKE.

enter image description here

Некоторые ссылки + также есть видео.

...