Веб-UI кластера: страница деталей, kubectl по карточкам, мета 3 колонки
- Страница /cluster/<имя>: сводка, ресурсы узлов полосами, отдельные карточки на каждый kubectl get … -o json, рестарт пода. - API: overview с блоками k8s_*, POST pods/restart, расширенный набор ресурсов (-A). - Панель: спиннер загрузки, правки дашборда и стилей; документация api_routes, compose и прочие сопутствующие изменения.
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
{# Страница одного кластера: сводка ресурсов, kubectl, действия.
|
||||
Автор: Сергей Антропов — https://devops.org.ru #}
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block page_title %}Кластер {{ cluster_name }}{% endblock %}
|
||||
|
||||
{% block body_extra_class %} cluster-detail-page cluster-page-loading{% endblock %}
|
||||
|
||||
{% block body_attrs %}data-dashboard-mode="cluster" data-cluster-name="{{ cluster_name | e }}"{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<div class="footer-inner">
|
||||
<p class="footer-copyright">
|
||||
© {{ app_title }} ·
|
||||
<a href="https://devops.org.ru" target="_blank" rel="noopener">devops.org.ru</a>
|
||||
</p>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{# Полноэкранный спиннер до первой загрузки overview; скрывается в dashboard.js #}
|
||||
<div
|
||||
id="cluster-page-loading-overlay"
|
||||
class="page-loading-overlay"
|
||||
role="status"
|
||||
aria-live="polite"
|
||||
aria-busy="true"
|
||||
aria-label="Загрузка данных кластера"
|
||||
>
|
||||
<div class="page-loading-backdrop" aria-hidden="true"></div>
|
||||
<div class="page-loading-center">
|
||||
<span class="spinner page-loading-spinner" aria-hidden="true"></span>
|
||||
<span class="page-loading-label">Загрузка данных кластера…</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="cluster-detail-breadcrumb muted" aria-label="Навигация">
|
||||
<a href="/">Панель</a>
|
||||
<span aria-hidden="true"> / </span>
|
||||
<span>Кластер <code>{{ cluster_name | e }}</code></span>
|
||||
</p>
|
||||
|
||||
<section class="card cluster-detail-hero-card" aria-labelledby="cluster-detail-title">
|
||||
<div class="cluster-detail-hero-layout">
|
||||
<div class="cluster-detail-hero-left">
|
||||
<h1 class="page-title" id="cluster-detail-title">Кластер <code>{{ cluster_name | e }}</code></h1>
|
||||
<div class="cluster-detail-actions-card" aria-label="Панель действий">
|
||||
<div
|
||||
id="cluster-detail-toolbar"
|
||||
class="actions-toolbar cluster-detail-toolbar"
|
||||
role="toolbar"
|
||||
aria-label="Действия над кластером"
|
||||
></div>
|
||||
</div>
|
||||
<p id="cluster-overview-msg" class="msg muted cluster-overview-msg" role="status" aria-live="polite"></p>
|
||||
</div>
|
||||
<aside class="cluster-detail-hero-meta" aria-label="Сводка кластера">
|
||||
<div id="cluster-detail-meta" class="cluster-detail-meta" aria-live="polite"></div>
|
||||
</aside>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="cluster-aggregate-donuts-section" class="card aggregate-donuts-card" aria-labelledby="cluster-donuts-heading">
|
||||
<h2 id="cluster-donuts-heading" class="donuts-card-title">Ресурсы узлов (сводка)</h2>
|
||||
<div id="cluster-page-aggregate-donuts" class="aggregate-donuts" aria-live="polite"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-detail-nodes-card" aria-labelledby="cluster-nodes-heading">
|
||||
<h2 id="cluster-nodes-heading" class="cluster-detail-section-title">Ресурсы узлов</h2>
|
||||
<div
|
||||
id="cluster-page-node-cards"
|
||||
class="cluster-nodes-resources__cards-row cluster-page-node-cards--wide"
|
||||
aria-live="polite"
|
||||
></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-intro-card" aria-labelledby="cluster-k8s-heading">
|
||||
<h2 id="cluster-k8s-heading" class="cluster-detail-section-title">Kubernetes (kubectl)</h2>
|
||||
<p class="muted cluster-k8s-scope-hint">
|
||||
Данные по <strong>всему кластеру</strong>: для ресурсов в namespace используется
|
||||
<code>kubectl get … -A</code> (все namespace); узлы и список namespace — без фильтра по ns.
|
||||
Ниже каждый тип ресурса — отдельная карточка с тем же запросом, что выполняет API.
|
||||
</p>
|
||||
<p id="cluster-kube-global-hint" class="muted cluster-kube-hint hidden" role="status"></p>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-nodes-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-nodes-title">Узлы</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get nodes -o json</code></p>
|
||||
<div id="cluster-k8s-nodes-root" class="cluster-k8s-root" role="region" aria-label="Узлы кластера"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-ns-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-ns-title">Namespaces</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get namespaces -o json</code></p>
|
||||
<div id="cluster-k8s-namespaces-root" class="cluster-k8s-root" role="region" aria-label="Namespaces"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-pods-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-pods-title">Поды</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get pods -A -o json</code></p>
|
||||
<div id="cluster-k8s-pods-root" class="cluster-k8s-root" role="region" aria-label="Поды"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-deploy-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-deploy-title">Deployments</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get deployments -A -o json</code></p>
|
||||
<div id="cluster-k8s-deployments-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-sts-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-sts-title">StatefulSets</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get statefulsets -A -o json</code></p>
|
||||
<div id="cluster-k8s-statefulsets-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-ds-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-ds-title">DaemonSets</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get daemonsets -A -o json</code></p>
|
||||
<div id="cluster-k8s-daemonsets-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-rs-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-rs-title">ReplicaSets</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get replicasets -A -o json</code></p>
|
||||
<div id="cluster-k8s-replicasets-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-jobs-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-jobs-title">Jobs</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get jobs -A -o json</code></p>
|
||||
<div id="cluster-k8s-jobs-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-cj-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-cj-title">CronJobs</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get cronjobs -A -o json</code></p>
|
||||
<div id="cluster-k8s-cronjobs-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-svc-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-svc-title">Сервисы</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get services -A -o json</code></p>
|
||||
<div id="cluster-k8s-services-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-ing-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-ing-title">Ingresses</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get ingresses.networking.k8s.io -A -o json</code></p>
|
||||
<div id="cluster-k8s-ingresses-root" class="cluster-k8s-root" role="region"></div>
|
||||
</section>
|
||||
|
||||
<section class="card cluster-k8s-resource-card" aria-labelledby="k8s-pvc-title">
|
||||
<h2 class="cluster-detail-section-title" id="k8s-pvc-title">PVC</h2>
|
||||
<p class="muted cluster-k8s-cmd"><code>kubectl get pvc -A -o json</code></p>
|
||||
<div id="cluster-k8s-pvcs-root" class="cluster-k8s-root" role="region" aria-label="PersistentVolumeClaim"></div>
|
||||
</section>
|
||||
|
||||
{% include "partials/dashboard_modals.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script src="/static/js/dashboard.js" defer></script>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user