Панель: редактирование конфига кластера, reapply при старте, UI и таблица

- PUT/GET конфигурации кластера, страница редактирования и модалка после сохранения
- После смены kind-config: флаг в meta и start_cluster_reapply (kind delete + create)
- Старт/стоп: полноэкранный спиннер до завершения job; модалки и документация API
- Таблица кластеров: колонка Имя 40% при table-layout fixed; чекбоксы без width 100%
- Карточки ресурсов узлов на странице кластера: до 3 в ряд; прочие правки стилей и dashboard.js
This commit is contained in:
Sergey Antropoff
2026-04-04 10:49:40 +03:00
parent af0d1705cc
commit 52538d9816
14 changed files with 2571 additions and 137 deletions
+2 -15
View File
@@ -77,82 +77,69 @@
<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.
Данные по <strong>всему кластеру</strong>: ресурсы в namespace — со всех пространств имён; узлы и список
namespace — без ограничения по отдельному ns.
</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>