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 по необходимости.