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