diff --git a/App/Frontend/src/app/dashboard/dashboard.component.css b/App/Frontend/src/app/dashboard/dashboard.component.css index 68991c0..0781a60 100644 --- a/App/Frontend/src/app/dashboard/dashboard.component.css +++ b/App/Frontend/src/app/dashboard/dashboard.component.css @@ -8,7 +8,6 @@ .dashboard-header-section1 { grid-area: header1; } .dashboard-header-section2 { grid-area: header2; } .dashboard-header-section3 { grid-area: header3; } -.dashboard-header-section4 { grid-area: header4; } .nav { grid-area: nav; } .dashboard-main { grid-area: main; } .footer { grid-area: footer; } @@ -30,21 +29,20 @@ /* Dashboard Header */ .dashboard-header { display: grid; - grid-template-areas: 'header1 header2 header3 header4'; - grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-areas: 'header1 header2 header3'; + grid-template-columns: 1fr 1fr 1fr; gap: 16px; } .dashboard-header-section1, .dashboard-header-section2, -.dashboard-header-section3, -.dashboard-header-section4 { +.dashboard-header-section3 { background-color: var(--quaternary); color: var(--text); border-radius: var(--radius); box-shadow: 2px 0 5px var(--shadow); width: 100%; - height: 170px; + height: 190px; font-weight: bold; font-size: 1rem; align-items: center; @@ -62,16 +60,23 @@ padding: 0; } -#dashboard-header-4 { - margin-top: 5%; +.dashboard-header-1, +.dashboard-header-2, +.dashboard-header-3 { align-content: center; align-items: center; display: flex; flex-direction: column; justify-content: center; } -#dashboard-header-2,#dashboard-header-3 { - float: left; + +.dashboard-header-1, +.dashboard-header-2 { + margin-top: 0; +} + +.dashboard-header-3 { + margin-top: 5%; } .progress-container { @@ -155,10 +160,11 @@ .dashboard-header { grid-template-areas: - 'header1 header2' - 'header3 header4'; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr 1fr; + 'header1' + 'header2' + 'header3'; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr 1fr; } } @@ -176,16 +182,14 @@ grid-template-areas: 'header1' 'header2' - 'header3' - 'header4'; + 'header3'; grid-template-columns: 1fr; - grid-template-rows: 1fr 1fr 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr; } .dashboard-header-section1, .dashboard-header-section2, - .dashboard-header-section3, - .dashboard-header-section4 { + .dashboard-header-section3 { margin-bottom: 16px; } diff --git a/App/Frontend/src/app/dashboard/dashboard.component.html b/App/Frontend/src/app/dashboard/dashboard.component.html index 462dfde..c346168 100644 --- a/App/Frontend/src/app/dashboard/dashboard.component.html +++ b/App/Frontend/src/app/dashboard/dashboard.component.html @@ -2,17 +2,11 @@
-
-

{{ 'DASHBOARD.NODES' | translate }}

- -
-
-

{{ 'DASHBOARD.CPU' | translate }}

- + {{ 'DASHBOARD.CPU' | translate }}
-
+

{{ 'DASHBOARD.RAM' | translate }}

- + {{ 'DASHBOARD.RAM' | translate }}
-
+

{{ 'DASHBOARD.DISK' | translate }}

- +
diff --git a/App/Frontend/src/app/dashboard/dashboard.component.ts b/App/Frontend/src/app/dashboard/dashboard.component.ts index 3da250c..ed87ac9 100644 --- a/App/Frontend/src/app/dashboard/dashboard.component.ts +++ b/App/Frontend/src/app/dashboard/dashboard.component.ts @@ -22,7 +22,7 @@ import { SpiderWebComponent } from "../spider-web/spider-web.component"; }) export class DashboardComponent implements AfterViewInit, OnInit { -// Fullscreen button + // Fullscreen button @ViewChild('dashboardMain') dashboardMain!: ElementRef; @ViewChild('dashboardTitle') dashboardTitle!: ElementRef; @@ -100,10 +100,10 @@ export class DashboardComponent implements AfterViewInit, OnInit { updateChartData(): void { this.memoryChartData = [ - { name: 'Used', value: this.usage.MemUsage }, + { name: 'Used', value: parseFloat(this.usage.MemUsage.toFixed(2)) }, ]; this.cpuChartData = [ - { name: 'Used', value: this.usage?.CpuUsage || 0 }, + { name: 'Used', value: parseFloat((this.usage?.CpuUsage || 0).toFixed(2)) }, ]; this.diskUsagePercentage = (this.usage.DiskUsage / this.usage.DiskCapacity) * 100; diff --git a/App/Frontend/src/app/search/search.component.html b/App/Frontend/src/app/search/search.component.html index e69976b..3209c60 100644 --- a/App/Frontend/src/app/search/search.component.html +++ b/App/Frontend/src/app/search/search.component.html @@ -10,7 +10,7 @@
- + diff --git a/App/Frontend/src/assets/i18n/de.json b/App/Frontend/src/assets/i18n/de.json index e0f2a7a..50daad9 100644 --- a/App/Frontend/src/assets/i18n/de.json +++ b/App/Frontend/src/assets/i18n/de.json @@ -21,7 +21,6 @@ "LOGIN_BUTTON": "Anmelden" }, "DASHBOARD": { - "NODES": "Knoten", "CPU": "CPU-Nutzung", "RAM": "RAM-Nutzung", "DISK": "Festplattennutzung" @@ -29,7 +28,7 @@ "SEARCH": { "SEARCH_PLACEHOLDER": "Cluster suchen...", "SEARCH": "Suche", - "NODE": "Knoten", + "NODES": "Knoten", "PODS": "Pods", "SERVICES": "Dienste", "DEPLOYMENTS": "Bereitstellungen", diff --git a/App/Frontend/src/assets/i18n/en.json b/App/Frontend/src/assets/i18n/en.json index 3ea2475..46d1c60 100644 --- a/App/Frontend/src/assets/i18n/en.json +++ b/App/Frontend/src/assets/i18n/en.json @@ -21,7 +21,6 @@ "LOGIN_BUTTON": "Log in" }, "DASHBOARD": { - "NODES": "Nodes", "CPU": "CPU Usage", "RAM": "RAM Usage", "DISK": "Disk Usage" @@ -29,7 +28,7 @@ "SEARCH": { "SEARCH_PLACEHOLDER": "Search Cluster...", "SEARCH": "Search", - "NODE": "Node", + "NODES": "Node", "PODS": "Pods", "SERVICES": "Services", "DEPLOYMENTS": "Deployments", diff --git a/App/Frontend/src/assets/i18n/fr.json b/App/Frontend/src/assets/i18n/fr.json index d2feca6..53ed094 100644 --- a/App/Frontend/src/assets/i18n/fr.json +++ b/App/Frontend/src/assets/i18n/fr.json @@ -21,7 +21,6 @@ "LOGIN_BUTTON": "Se connecter" }, "DASHBOARD": { - "NODES": "Nœuds", "CPU": "Utilisation du CPU", "RAM": "Utilisation de la RAM", "DISK": "Utilisation du disque" @@ -29,7 +28,7 @@ "SEARCH": { "SEARCH_PLACEHOLDER": "Rechercher un cluster...", "SEARCH": "Rechercher", - "NODE": "Nœud", + "NODES": "Nœud", "PODS": "Pods", "SERVICES": "Services", "DEPLOYMENTS": "Déploiements", diff --git a/App/Frontend/src/assets/i18n/nl.json b/App/Frontend/src/assets/i18n/nl.json index fe31c48..087f92d 100644 --- a/App/Frontend/src/assets/i18n/nl.json +++ b/App/Frontend/src/assets/i18n/nl.json @@ -21,7 +21,6 @@ "LOGIN_BUTTON": "Inloggen" }, "DASHBOARD": { - "NODES": "Knooppunten", "CPU": "CPU-gebruik", "RAM": "RAM-gebruik", "DISK": "Schijfgebruik" @@ -29,7 +28,7 @@ "SEARCH": { "SEARCH_PLACEHOLDER": "Zoek Cluster...", "SEARCH": "Zoek", - "NODE": "Knooppunt", + "NODES": "Knooppunt", "PODS": "Pods", "SERVICES": "Diensten", "DEPLOYMENTS": "Deployments", diff --git a/App/Frontend/src/assets/i18n/tlh.json b/App/Frontend/src/assets/i18n/tlh.json index aa6ae94..1b35ba2 100644 --- a/App/Frontend/src/assets/i18n/tlh.json +++ b/App/Frontend/src/assets/i18n/tlh.json @@ -21,7 +21,6 @@ "LOGIN_BUTTON": "'el" }, "DASHBOARD": { - "NODES": "tetlh", "CPU": "Qapchu' lo'", "RAM": "qawHaq lo'", "DISK": "naw' lo'" @@ -29,7 +28,7 @@ "SEARCH": { "SEARCH_PLACEHOLDER": "nej yugh...", "SEARCH": "nej", - "NODE": "tetlh", + "NODES": "tetlh", "PODS": "pa'mey", "SERVICES": "vummeH mIw", "DEPLOYMENTS": "lanchu'ghach", diff --git a/App/Frontend/src/assets/i18n/zh.json b/App/Frontend/src/assets/i18n/zh.json index 12d5a5c..6582073 100644 --- a/App/Frontend/src/assets/i18n/zh.json +++ b/App/Frontend/src/assets/i18n/zh.json @@ -21,7 +21,6 @@ "LOGIN_BUTTON": "登录" }, "DASHBOARD": { - "NODES": "节点", "CPU": "中央处理器 使用率", "RAM": "内存使用率", "DISK": "磁盘使用率" @@ -29,7 +28,7 @@ "SEARCH": { "SEARCH_PLACEHOLDER": "搜索集群...", "SEARCH": "搜索", - "NODE": "节点", + "NODES": "节点", "PODS": "容器组", "SERVICES": "服务", "DEPLOYMENTS": "部署", diff --git a/Kubernetes/k10s.yaml b/Kubernetes/k10s.yaml index 4a31b55..f50118f 100644 --- a/Kubernetes/k10s.yaml +++ b/Kubernetes/k10s.yaml @@ -20,7 +20,7 @@ metadata: name: k10s-frontend-deployment namespace: k10s-namespaces spec: - replicas: 3 + replicas: 1 selector: matchLabels: app: k10s-frontend @@ -63,7 +63,7 @@ metadata: name: k10s-backend-deployment namespace: k10s-namespaces spec: - replicas: 3 + replicas: 1 selector: matchLabels: app: k10s-backend @@ -130,19 +130,16 @@ metadata: rules: - apiGroups: [""] resources: ["pods", "services", "endpoints", "nodes", "namespaces", "configmaps", "secrets"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + verbs: ["get", "list", "create", "update", "patch", "delete"] - apiGroups: ["apps"] resources: ["deployments", "replicasets", "statefulsets"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] - - apiGroups: ["batch"] - resources: ["jobs", "cronjobs"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] - - apiGroups: ["extensions"] - resources: ["ingresses"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + verbs: ["get", "list", "create", "update", "patch", "delete"] - apiGroups: ["networking.k8s.io"] resources: ["networkpolicies"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + verbs: ["get", "list", "create", "update", "patch", "delete"] + - apiGroups: ["metrics.k8s.io"] + resources: ["nodes", "pods"] + verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -232,4 +229,192 @@ data: } } } +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + k8s-app: metrics-server + name: metrics-server + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + k8s-app: metrics-server + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" + name: system:aggregated-metrics-reader +rules: + - apiGroups: ["metrics.k8s.io"] + resources: ["nodes", "pods"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + k8s-app: metrics-server + name: system:metrics-server +rules: + - apiGroups: [""] + resources: ["nodes/metrics"] + verbs: ["get"] + - apiGroups: [""] + resources: ["nodes", "pods"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + k8s-app: metrics-server + name: metrics-server-auth-reader + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: extension-apiserver-authentication-reader +subjects: + - kind: ServiceAccount + name: metrics-server + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + k8s-app: metrics-server + name: metrics-server:system:auth-delegator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:auth-delegator +subjects: + - kind: ServiceAccount + name: metrics-server + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + k8s-app: metrics-server + name: system:metrics-server +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:metrics-server +subjects: + - kind: ServiceAccount + name: metrics-server + namespace: kube-system +--- +apiVersion: v1 +kind: Service +metadata: + labels: + k8s-app: metrics-server + name: metrics-server + namespace: kube-system +spec: + ports: + - name: https + port: 443 + protocol: TCP + targetPort: https + selector: + k8s-app: metrics-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + k8s-app: metrics-server + name: metrics-server + namespace: kube-system +spec: + selector: + matchLabels: + k8s-app: metrics-server + strategy: + rollingUpdate: + maxUnavailable: 0 + template: + metadata: + labels: + k8s-app: metrics-server + spec: + containers: + - args: + - --cert-dir=/tmp + - --secure-port=10250 + - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname + - --kubelet-use-node-status-port + - --metric-resolution=15s + - --kubelet-insecure-tls + image: registry.k8s.io/metrics-server/metrics-server:v0.7.2 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 3 + httpGet: + path: /livez + port: https + scheme: HTTPS + periodSeconds: 10 + name: metrics-server + ports: + - containerPort: 10250 + name: https + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readyz + port: https + scheme: HTTPS + initialDelaySeconds: 20 + periodSeconds: 10 + resources: + requests: + cpu: 100m + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /tmp + name: tmp-dir + nodeSelector: + kubernetes.io/os: linux + priorityClassName: system-cluster-critical + serviceAccountName: metrics-server + volumes: + - emptyDir: {} + name: tmp-dir +--- +apiVersion: apiregistration.k8s.io/v1 +kind: APIService +metadata: + labels: + k8s-app: metrics-server + name: v1beta1.metrics.k8s.io +spec: + group: metrics.k8s.io + groupPriorityMinimum: 100 + insecureSkipTLSVerify: true + service: + name: metrics-server + namespace: kube-system + version: v1beta1 + versionPriority: 100 --- \ No newline at end of file