63
July 7, 2024, 5:44 a.m.
Удаленное развертывание проектов kubernetes кластер
Задача: реализовать удаленное развертывание проекта на удаленный кластер с помощью интрументов ANSIBLE, HELM, KUBECTL.
Для достижения результата по поставленной задаче, необходимо понимать, что есть динамическая часть, котрорую мы можем конфигурировать HELM, и есть статичная часть или уникальная часть, котороую генерировать нет смысла. Развертывание будет состоять из двух больших частей:
- helm-чарты;
- штучные манифесты.
Примеры переменных, которые используются при конфигурации:
CHARTS:
- {name: common, chart: traefik, kubeconfig: config, namespace: kube-system, project: traefik, state: present}
- {name: grafana, chart: universal, kubeconfig: config, namespace: kube-system, project: monitoring, state: present}
CUSTOM_MANIFESTS:
- {name: nextcloud-1-mw, kubeconfig: config, namespace: nextcloud-ns, state: present }
Пример task anisble:
- name: Install Helm Chart
kubernetes.core.helm:
name: "{{ item.name }}"
chart_ref: "../../../../helm-charts/{{ item.chart }}"
namespace: "{{ item.namespace }}"
values_files:
- "../../../helm/vars/COMMON.yaml"
- "../../../helm/vars/{{ item.project }}.yaml"
kubeconfig: "~/.kube/{{ item.kubeconfig }}"
state: "{{ item.state }}"
create_namespace: true
with_items: "{{ CHARTS }}"
- name: Deploy custom Kubernetes
kubernetes.core.k8s:
kubeconfig: "~/.kube/{{ item.kubeconfig }}"
namespace: "{{ item.namespace }}"
state: "{{ item.state }}"
definition: "{{ lookup('template', '../../../helm/custom-manifests/{{ item.name }}.yaml') }}"
with_items: "{{ CUSTOM_MANIFESTS }}"
где:
"../../../helm/vars/COMMON.yaml"
- статичная для всех чартов перменные (если такие есть);kubeconfig
- путь до файла с данными от k3(8)s кластреа (в нем находится адрес кластера, и другие данные для подкючения);create_namespace
- ставим по необходимости;definition
- указывается путь к манифесту, в данном случае вместоfile
используетсяtemplate
чтобы была возможность генерировать манифесты из j2 по необходимости.