Как развернуть кластер kubernetes на отдельных узлах, используя только yaml в облаке Google - PullRequest
0 голосов
/ 26 марта 2020

Цель: у меня есть развертывание yaml, на котором я просто запускаю kubectl create -f deployment.yaml, и оно создает узлы с разбросанными по ним модулями, как я описал в файле yaml.

Вывод цели. 3 узла в облаке Google с 2 узлами с интерфейсом 2 / pods и 3 узлом с базой данных, работающей с постоянным томом.

Нет возможности проверить это локально, поскольку docker -desktop - это система с одним узлом. Google cloud изначально разместил все мои модули на одном узле, и они не планировали из-за нехватки ресурсов.

Итак, я посмотрел документы и спросил несколько свободных каналов. Согласие состоит в том, чтобы использовать привязку pod / node и antiAffinity, чтобы убедиться, что нужные мне модули находятся на нужных узлах.

Клиентское приложение github

Приложение API / БД github

Затраты проекта, k8s + Kustomize

Вот репозитории github, с которыми я тестирую и пытаюсь создать то, что я описываю. Я пытаюсь оставаться в облачной агности c, насколько это возможно, но если мне нужно быть более точным c с облачными ключевыми словами, пожалуйста, оставьте комментарий об этом. Все развертывание распределяется между каталогом / kubernetes в каждом проекте. Они работали локально, прежде чем я добавил элементы сходства pod / node.

1 Ответ

4 голосов
/ 27 марта 2020

Здесь вы ищете Kubeadm . Это инструмент, используемый для bootstrap мастеров Kubernetes и объединения новых узлов в кластеры. Здесь - справочный документ, а здесь - документы API для Kubelet и всех его аргументов. Используя Kubeadm и эти аргументы, вы можете создать initConfiguration , clusterConfiguration и nodeConfiguration .

1) После создания этих трех файлов поместите initConfiguration и clusterConfiguration в один файл YAML. И поместите nodeConfiguration в свой собственный файл. Поместите первый файл на ваш мастер (ы) и второй файл на ваш узел (ы). Если вы устанавливаете с конфигурацией Multi-Master, помните этот документ при создании ваших конфигураций. Вам также понадобится балансировщик нагрузки , прокси или умный DNS-трюк , чтобы включить это.

2) Установите следующие пакеты :

docker
containerd
kubelet
kubeadm

3) Отключите любые разделы подкачки, SE Linux, и настроить брандмауэр соответствующим образом.

3) Bootstrap Kubernetes на вашем Master (s) с вашим файлом конфигурации: kubeadm init --config /tmp/master.yml.

4) Добавьте рабочие узлы в кластер с вашим конфигурационным файлом: kubeadm join --config /tmp/node.yml.

5) Установите сетевой плагин .

6) Разверните оставшуюся часть программного обеспечения с помощью Настроить проект. Черт, вы даже можете управлять своими файлами конфигурации Kubeadm с помощью Kustomize . Я имею. Вы могли бы даже бросить манифест сетевого плагина здесь.

Это решение Kubernetes полностью облачно c, и все Kubernetes автоматизированы, а конфигурация - нет. Я бы автоматизировал шаги 1-5 с помощью чего-то вроде Ansible. Где вы бы объявили каждый шаг как задачу или роль в сборнике пьес. Он поддерживает тонну модулей . И есть роли с открытым исходным кодом на Galaxy , когда их нет.

Это оставляет вашу инфраструктуру. Сделать это облако агности c невозможно. Нет двух поставщиков с одинаковым API. Вот почему слои абстракции, такие как Kubernetes, существуют с самого начала. Чтобы решить эту проблему, попытайтесь использовать Cloud Aware . Используйте такой инструмент, как Terraform , чтобы управлять своей инфраструктурой за вас. Затем добавьте необходимые команды Terraform в Ansible playbook .

Bam, теперь вы можете развернуть всю свою инфраструктуру, конфигурацию и приложение с помощью одной команды. Из одиночного YAML-файла:

ansible-playbook -i inventory.ini site.yml

Ну, одиночный YAML-файл и куча других ролей и шаблоны , playbooks и Файлы конфигурации Terraform . ;)

РЕДАКТИРОВАТЬ: Вот несколько проектов с открытым исходным кодом, которые я написал, которые используют эти идеи и принципы дизайна. Вы должны быть в состоянии хотя бы поблескивать от них Ansible logi c. Первый предназначен для создания кластера с одним узлом на голом железном сервере. Последний предназначен для создания кластера из четырех узлов на Proxmox.

Оба полностью работают с все манифесты, которые я написал здесь . Что также должно предоставить вам множество примеров Kustomize и Ansible.

...