├── CONTRIBUTING.md ├── backend └── server.js ├── electron ├── preload.ts ├── tsconfig.json └── main.ts ├── .DS_Store ├── src ├── .DS_Store ├── img │ ├── .DS_Store │ ├── charts.png │ ├── Ekkremis-md.png │ ├── Ekkremis-sm.png │ ├── pod_lifecycle.jpeg │ ├── Ekkremis_Banner.jpg │ ├── Ekkremis-logo-dark.png │ └── Ekkremis-logo-light.png ├── styles │ ├── App.css │ ├── index.css │ ├── chartsModal.css │ ├── errorModal.css │ ├── topBar.css │ ├── queryBar.css │ ├── frontPage.css │ └── dashboard.css ├── components │ ├── smallComps │ │ ├── NoPage.tsx │ │ └── Button.tsx │ ├── statelessComps │ │ ├── Display.tsx │ │ ├── QueryBar.tsx │ │ ├── AllPodInfo.tsx │ │ ├── PodInfo.tsx │ │ └── TopBar.tsx │ ├── modalComps │ │ ├── ChartsModal.tsx │ │ └── ErrorModal.tsx │ ├── FrontPage.tsx │ └── Dashboard.tsx ├── index.tsx ├── App.tsx ├── utils.ts └── mock_data.json ├── CONTRIBUTORS.md ├── .gitignore ├── test └── App.test.tsx ├── public └── index.html ├── tsconfig.json ├── lICENSE ├── package.json └── README.md /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/server.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /electron/preload.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/.DS_Store -------------------------------------------------------------------------------- /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/.DS_Store -------------------------------------------------------------------------------- /src/img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/.DS_Store -------------------------------------------------------------------------------- /src/img/charts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/charts.png -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | OSLabs Beta Team sQuadro 53: 2 | - Rilo 3 | - Forest 4 | - Zihao 5 | - Matt 6 | - Cesar -------------------------------------------------------------------------------- /src/img/Ekkremis-md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/Ekkremis-md.png -------------------------------------------------------------------------------- /src/img/Ekkremis-sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/Ekkremis-sm.png -------------------------------------------------------------------------------- /src/img/pod_lifecycle.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/pod_lifecycle.jpeg -------------------------------------------------------------------------------- /src/img/Ekkremis_Banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/Ekkremis_Banner.jpg -------------------------------------------------------------------------------- /src/img/Ekkremis-logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/Ekkremis-logo-dark.png -------------------------------------------------------------------------------- /src/img/Ekkremis-logo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/Ekkremis/HEAD/src/img/Ekkremis-logo-light.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | 4 | # production 5 | /build 6 | /dist 7 | 8 | # misc 9 | .DS_Store 10 | .vscode 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/styles/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | height: 100%; 4 | } 5 | 6 | #root { 7 | height: 100%; 8 | } 9 | 10 | html { 11 | background-image: linear-gradient(#013c64, #020849); 12 | height: 100%; 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/components/smallComps/NoPage.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const NoPage = () => { 4 | 5 | return ( 6 |
7 |

No Page Found, try again

8 |
9 | ) 10 | 11 | } 12 | 13 | export default NoPage; -------------------------------------------------------------------------------- /test/App.test.tsx: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from '../src/App'; 3 | 4 | test('renders greeting', () => { 5 | render(); 6 | const linkElement = screen.getByText(/Greetings/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Ekkremis 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /electron/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "sourceMap": true, 6 | "strict": true, 7 | "outDir": "../build", 8 | "rootDir": "../", 9 | "noEmitOnError": true, 10 | "typeRoots": [ 11 | "node_modules/@types" 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import './styles/index.css'; 4 | import App from './App'; 5 | 6 | 7 | const root = ReactDOM.createRoot(document.getElementById('root')!); 8 | root.render( 9 | 10 | 11 | 12 | ); 13 | 14 | -------------------------------------------------------------------------------- /src/styles/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /src/components/statelessComps/Display.tsx: -------------------------------------------------------------------------------- 1 | // importing dependencies 2 | import React from 'react'; 3 | 4 | // component for displaying modals based on active pod 5 | const Display = (props: any) => { 6 | 7 | return( 8 |
9 |
fake graphs lol
10 | 11 |
12 | ) 13 | } 14 | 15 | export default Display; -------------------------------------------------------------------------------- /src/styles/chartsModal.css: -------------------------------------------------------------------------------- 1 | .modal { 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | width:100%; 6 | height: 100%; 7 | background: rgba(0, 0, 0, 0.6); 8 | } 9 | 10 | .modal-main { 11 | position:fixed; 12 | background: white; 13 | width: 50%; 14 | height: auto; 15 | top:50%; 16 | left:50%; 17 | transform: translate(-50%,-50%); 18 | } 19 | 20 | .display-block { 21 | display: block; 22 | } 23 | 24 | .display-none { 25 | display: none; 26 | } 27 | 28 | .chartImage { 29 | width: 100%; 30 | } -------------------------------------------------------------------------------- /src/components/smallComps/Button.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | interface Props { 4 | className: string; 5 | children?: React.ReactNode; 6 | onClick?: () => void; //might want to remove the '?' if the button will have functionality 7 | } 8 | 9 | const Button: React.FC = ({ 10 | className, 11 | children, 12 | onClick 13 | }) => { 14 | return ( 15 |
16 | 17 |
18 | ) 19 | } 20 | 21 | export default Button; -------------------------------------------------------------------------------- /src/styles/errorModal.css: -------------------------------------------------------------------------------- 1 | .modal { 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | width:100%; 6 | height: 100%; 7 | background: rgba(0, 0, 0, 0.6); 8 | } 9 | 10 | .modal-main { 11 | position:fixed; 12 | background: white; 13 | width: 50%; 14 | height: auto; 15 | top:50%; 16 | left:50%; 17 | transform: translate(-50%,-50%); 18 | } 19 | 20 | .display-block { 21 | display: block; 22 | } 23 | 24 | .display-none { 25 | display: none; 26 | } 27 | 28 | .logImage { 29 | width: 100%; 30 | } -------------------------------------------------------------------------------- /src/components/modalComps/ChartsModal.tsx: -------------------------------------------------------------------------------- 1 | import '../../styles/chartsModal.css'; 2 | 3 | type ChartProps = { 4 | show: boolean, 5 | toggleChartsModal: () => void; 6 | } 7 | 8 | const ChartsModal = (props: ChartProps) => { 9 | 10 | const showModalClassName = props.show ? "modal display-block" : "modal display-none"; 11 | 12 | return ( 13 |
14 |
15 | charts 16 | 19 |
20 |
21 | ) 22 | } 23 | 24 | 25 | export default ChartsModal; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | , "test/App.test.tsx" ] 26 | } 27 | -------------------------------------------------------------------------------- /src/styles/topBar.css: -------------------------------------------------------------------------------- 1 | .url-input { 2 | display: flex; 3 | justify-content: space-around; 4 | height: 50%; 5 | margin-left: 250px; 6 | margin-right: 20px; 7 | align-self: center; 8 | } 9 | 10 | .url-input h5 { 11 | position: relative; 12 | top: -18px; 13 | color: white; 14 | font-weight: 800; 15 | font-size: 1em; 16 | text-transform: uppercase; 17 | margin-left:5px; 18 | } 19 | 20 | .url-button { 21 | position: relative; 22 | top: -15px; 23 | } 24 | 25 | #endpoint-url{ 26 | width: 280px; 27 | background-color: #eceaeb; 28 | border: none; 29 | border-radius: 5px; 30 | height: 30px; 31 | } 32 | 33 | .login-button-container{ 34 | display: flex; 35 | margin-top: 30px; 36 | } 37 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import './styles/App.css'; 3 | import Dashboard from './components/Dashboard'; 4 | import FrontPage from './components/FrontPage'; 5 | import NoPage from './components/smallComps/NoPage'; 6 | import React from 'react'; 7 | // import { BrowserRouter as Router, Routes, Route, RouteComponentProps } from "react-router-dom"; // 8 | import { HashRouter as Router, Route, Routes } from "react-router-dom"; // 9 | 10 | type TParams = { id: string }; 11 | 12 | function App() { 13 | return ( 14 | 15 | 16 | 17 | } /> 18 | } /> 19 | } /> 20 | 21 | 22 | ); 23 | } 24 | 25 | export default App; 26 | -------------------------------------------------------------------------------- /src/components/FrontPage.tsx: -------------------------------------------------------------------------------- 1 | // Cesar 2 | import React from "react"; 3 | import '../styles/frontPage.css'; // css folder 4 | import Button from './smallComps/Button'; // this should be button 5 | import { Link } from "react-router-dom" 6 | 7 | const logo = require('../img/Ekkremis-md.png') // https://stackoverflow.com/questions/39999367/how-do-i-reference-a-local-image-in-react 8 | 9 | function FrontPage() { 10 | return ( 11 |
12 |
13 | 14 |
20 | 21 |
22 | Ekkremis Logo 23 |
24 | 25 |
26 |

EKKREMIS

27 |
28 | 29 | {/*

Coming Soon ...

IN CASE DASHBOARD WAS NOT READY FOR MVP PRESENTATION*/} 30 |
31 | ); 32 | }; 33 | 34 | export default FrontPage; -------------------------------------------------------------------------------- /lICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 OSLabs Beta 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/components/statelessComps/QueryBar.tsx: -------------------------------------------------------------------------------- 1 | // promQL Query Bar 2 | import '../../styles/queryBar.css'; 3 | import React, { useState, useEffect } from 'react'; 4 | 5 | // This is the QueryBar component that allows users to select the pod status to be displayed. The default status is set to summary. 6 | function QueryBar(props: any) { 7 | 8 | // updates status upon button click 9 | const handleClick = (string: string) => { 10 | // console.log('inside status button handleclick', string) 11 | props.setStatus(string) 12 | }; 13 | 14 | return ( 15 |
16 |
17 | {'EkkremisSubmarine'} 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 | ); 27 | }; 28 | 29 | export default QueryBar; -------------------------------------------------------------------------------- /src/styles/queryBar.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Raleway'); 2 | 3 | .query-container { 4 | text-align: center; 5 | width: 250px; 6 | display: flex; 7 | flex-direction: column; 8 | height: 100%; 9 | align-items: center; 10 | justify-content: space-around; 11 | padding: 10px; 12 | } 13 | 14 | /* // Popup Texts & button */ 15 | .query-bar { 16 | display: flex; 17 | flex-wrap: wrap; 18 | flex-direction: column; 19 | } 20 | 21 | /* //Button Link */ 22 | .query-btn-unselected { 23 | display: block; 24 | text-align: center; 25 | font-weight: 800; 26 | font-size: 1em; 27 | text-transform: uppercase; 28 | color: white; 29 | border-radius: 5%; 30 | margin: 10px; 31 | padding: 1.4em 3.5em; 32 | background-size: 200% auto; 33 | border: none; 34 | background-image: linear-gradient(to right, rgb(222, 145, 41) 0%, #f7bd58df 50%, rgb(222, 145, 41)100%); 35 | transition: 0.5s; 36 | } 37 | 38 | .query-btn-unselected:hover { 39 | background-position: right center; 40 | } 41 | 42 | .query-btn-unselected:focus { 43 | background-position: right center; 44 | } 45 | 46 | /* @media only screen and (max-width: 600px) { 47 | .query-btn { 48 | padding: 1.4em 1em; 49 | margin-left: 0; 50 | width: 150px; 51 | } 52 | .sub { 53 | width: 170px; 54 | padding-top: 10px; 55 | padding-bottom: 10px; 56 | padding-left: 0; 57 | margin-left: 0; 58 | } 59 | .query-container { 60 | width: 160px; 61 | } 62 | } */ -------------------------------------------------------------------------------- /src/styles/frontPage.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Amita&family=Red+Hat+Text:wght@600&display=swap'); 2 | /* #root { 3 | height: 100%; 4 | } 5 | 6 | html, body { 7 | height: 100%; 8 | margin: 0; 9 | padding: 0; 10 | } 11 | 12 | .App { 13 | background-image: linear-gradient(#013c64, #020849); 14 | background-size: cover; 15 | height: 100%; 16 | } 17 | 18 | THESE MUST BE ADDED TO APP.CSS IT LOOKS LIKE */ 19 | 20 | .fp{ 21 | text-align: right; 22 | } 23 | 24 | .FPbutton{ 25 | background-color: rgb(222, 145, 41); 26 | border-radius: 5px; 27 | border: none; 28 | height: 36px; 29 | padding: 10px 15px; 30 | margin: 15px 15px 50px; 31 | font-size: 16px; 32 | color: #ffffff; 33 | font-weight: thin; 34 | } 35 | 36 | .FPbutton:hover{ 37 | box-shadow: 0 0 10px 0 rgb(246, 209, 76); 38 | } 39 | 40 | @keyframes float { 41 | 0% { 42 | /* box-shadow: 0 5px 15px 0px rgba(0,0,0,0.6); grabs the whole div and not the image - makes the background gradient look weird*/ 43 | transform: translatey(0px); 44 | } 45 | 50% { 46 | /* box-shadow: 0 25px 15px 0px rgba(0,0,0,0.2); */ 47 | transform: translatey(40px); 48 | } 49 | 100% { 50 | /* box-shadow: 0 5px 15px 0px rgba(0,0,0,0.6); */ 51 | transform: translatey(0px); 52 | } 53 | } 54 | 55 | .fpLogo{ 56 | text-align: center; 57 | transform: translatey(0px); 58 | animation: float 3s ease-in-out infinite; 59 | } 60 | 61 | .fpH1{ 62 | text-align: center; 63 | margin: 120px 10px 0px; 64 | } 65 | 66 | .fpH1 > h1 { 67 | font-size: 75px; 68 | color: rgb(222, 145, 41); 69 | font-family: 'Amita', cursive; 70 | } 71 | -------------------------------------------------------------------------------- /src/components/statelessComps/AllPodInfo.tsx: -------------------------------------------------------------------------------- 1 | // importing dependencies 2 | import React, { useEffect } from 'react'; 3 | // importing other components 4 | import PodInfo from './PodInfo'; 5 | 6 | 7 | // component for all pods info 8 | const AllPodInfo = (props: any) => { 9 | let podsArray : any = []; 10 | // console.log(props.currentPods) 11 | 12 | const populateArray = () => { 13 | for (const key in props.currentPods) { 14 | podsArray.push() 15 | } 16 | } 17 | 18 | // does this call still make sense when useEffect runs on the initial load? 19 | // populateArray(); 20 | 21 | useEffect(() => { 22 | // for cleanup function 23 | let hasBeenCalled = false; 24 | // poopulate each pod array for the table 25 | if (!hasBeenCalled) { 26 | populateArray(); 27 | } 28 | // called cleanup function to prevent looping 29 | return () => { 30 | hasBeenCalled = true; 31 | } 32 | }, [props.currentPods, props.currentUrl]); // update current pods when curent pods or url changes 33 | 34 | 35 | return( 36 |
37 |
38 |
pod name
39 |
node
40 |
status
41 |
restarts
42 |
age
43 |
44 |
45 | {podsArray} 46 |
47 |
48 | ) 49 | } 50 | 51 | export default AllPodInfo; -------------------------------------------------------------------------------- /electron/main.ts: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow } from 'electron'; 2 | import * as path from 'path'; 3 | import installExtension, { REACT_DEVELOPER_TOOLS } from "electron-devtools-installer"; 4 | import { protocol } from "electron"; 5 | 6 | 7 | 8 | function createWindow() { 9 | const win = new BrowserWindow({ 10 | width: 800, 11 | height: 600, 12 | webPreferences: { 13 | // contextIsolation: false, 14 | preload: path.join(__dirname, 'preload.js'), 15 | webSecurity: false, 16 | nodeIntegration: true 17 | } 18 | }) 19 | 20 | if (app.isPackaged) { 21 | // 'build/index.html' 22 | win.loadURL(`file://${__dirname}/../index.html`); 23 | } else { 24 | win.loadURL('http://localhost:3000/index.html'); 25 | 26 | win.webContents.openDevTools(); 27 | 28 | // Hot Reloading on 'node_modules/.bin/electronPath' 29 | require('electron-reload')(__dirname, { 30 | electron: path.join(__dirname, 31 | '..', 32 | '..', 33 | 'node_modules', 34 | '.bin', 35 | 'electron' + (process.platform === "win32" ? ".cmd" : "")), 36 | forceHardReset: true, 37 | hardResetMethod: 'exit' 38 | }); 39 | } 40 | } 41 | 42 | app.whenReady().then(() => { 43 | console.log('path: ', app.getPath('userData')) 44 | // DevTools 45 | installExtension(REACT_DEVELOPER_TOOLS) 46 | .then((name) => console.log(`Added Extension: ${name}`)) 47 | .catch((err) => console.log('An error occurred: ', err)); 48 | 49 | protocol.registerFileProtocol('file', (request, callback) => { 50 | const pathname = decodeURI(request.url.replace('file:///', '')); 51 | callback(pathname); 52 | }); 53 | 54 | createWindow(); 55 | 56 | app.on('activate', () => { 57 | if (BrowserWindow.getAllWindows().length === 0) { 58 | createWindow(); 59 | } 60 | }); 61 | 62 | app.on('window-all-closed', () => { 63 | if (process.platform !== 'darwin') { 64 | app.quit(); 65 | } 66 | }); 67 | }); 68 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ekkremis", 3 | "version": "1.0.0", 4 | "author": "Team sQuadro53", 5 | "description": "Kubernetes status dashboard in a React-TypeScript-Electron app with Electron Builder", 6 | "homepage": ".", 7 | "main": "build/electron/main.js", 8 | "private": true, 9 | "dependencies": { 10 | "@testing-library/jest-dom": "^5.16.5", 11 | "@testing-library/react": "^13.4.0", 12 | "@testing-library/user-event": "^14.4.3", 13 | "@types/electron-devtools-installer": "^2.2.2", 14 | "@types/jest": "^29.0.3", 15 | "@types/node": "^18.7.20", 16 | "@types/query-string": "^6.3.0", 17 | "@types/react": "^18.0.21", 18 | "@types/react-dom": "^18.0.6", 19 | "@types/react-router-dom": "^5.3.3", 20 | "electron-devtools-installer": "^3.2.0", 21 | "electron-reload": "^1.5.0", 22 | "fs": "^0.0.1-security", 23 | "path": "^0.12.7", 24 | "react": "^18.2.0", 25 | "react-dom": "^18.2.0", 26 | "react-router-dom": "^6.4.3", 27 | "react-scripts": "5.0.1", 28 | "typescript": "^4.8.3", 29 | "yarn": "^1.22.19" 30 | }, 31 | "scripts": { 32 | "start": "react-scripts start", 33 | "build": "react-scripts build", 34 | "test": "react-scripts test", 35 | "postinstall": "electron-builder install-app-deps", 36 | "electron:dev": "concurrently \"cross-env BROWSER=none yarn start\" \"wait-on http://127.0.0.1:3000 && tsc -p electron -w\" \"wait-on http://127.0.0.1:3000 && tsc -p electron && electron .\"", 37 | "electron:build": "yarn build && tsc -p electron && electron-builder", 38 | "eject": "react-scripts eject" 39 | }, 40 | "build": { 41 | "extends": null, 42 | "files": [ 43 | "build/**/*" 44 | ], 45 | "directories": { 46 | "buildResources": "assets" 47 | } 48 | }, 49 | "eslintConfig": { 50 | "extends": [ 51 | "react-app", 52 | "react-app/jest" 53 | ] 54 | }, 55 | "devDependencies": { 56 | "concurrently": "^7.4.0", 57 | "cross-env": "^7.0.3", 58 | "electron": "^20.2.0", 59 | "electron-builder": "^23.3.3", 60 | "wait-on": "^6.0.1" 61 | }, 62 | "browserslist": { 63 | "production": [ 64 | ">0.2%", 65 | "not dead", 66 | "not op_mini all" 67 | ], 68 | "development": [ 69 | "last 1 chrome version", 70 | "last 1 firefox version", 71 | "last 1 safari version" 72 | ] 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/components/modalComps/ErrorModal.tsx: -------------------------------------------------------------------------------- 1 | import App from "../../App"; 2 | import React, { useState } from "react"; 3 | import "../../styles/errorModal.css"; 4 | 5 | import { getPendingReason } from '../../utils'; 6 | 7 | type ErrorProps = { 8 | show: boolean, 9 | toggleErrorModal: () => void; 10 | podName: string, 11 | currentUrl: string 12 | } 13 | 14 | // ErrorModal is a popup modal within each PodInfo component that displays error info 15 | const ErrorModal = (props: ErrorProps) => { 16 | // ran checks if getPendingReason has been ran to be able to toggle off the Loading component. 17 | const [ran, setRan] = useState(false); 18 | // logInfo will store the fetched error info if available. If logInfo remains falsey, then no errors will be displayed 19 | const [logInfo, setLogInfo] = useState(); 20 | // noError is another option to store a default 'no errors found!' message. If an error is found, then it will change to 'yes error'. This could be a redundant stateful object. 21 | const [noError, setNoError] = useState('no errors found!'); 22 | 23 | // showModalClassName toggles the classname of the component to toggle the css property display between 'block' and 'none'. 24 | const showModalClassName = props.show ? "modal display-block" : "modal display-none"; 25 | 26 | // The ErrorModal will invoke getPendingReason to grab the pod status waiting reason 27 | getPendingReason('actual', setRan, setLogInfo, setNoError, props.podName, props.currentUrl); 28 | 29 | return ( 30 |
31 |
32 | {ran ? 33 | : 34 | 35 | } 36 | 39 |
40 |
41 | ) 42 | } 43 | 44 | // This is a Logs component that will display error logs within the ErrorModal 45 | const Logs = (props: any) => { 46 | // render different sh*t based on noError prop 47 | 48 | return ( 49 |
50 | {props.logInfo ? 51 |
{props.logInfo}
: 52 |
NO ERRORS LOL
53 | } 54 |
55 | ) 56 | } 57 | 58 | // This is a Loading component that will display a 'LOADING' message while the fetch for the pod status waiting reason is happening. 59 | const Loading = () => { 60 | 61 | return ( 62 |
63 |

LOADING

64 |
65 | ) 66 | } 67 | 68 | export default ErrorModal; 69 | -------------------------------------------------------------------------------- /src/components/statelessComps/PodInfo.tsx: -------------------------------------------------------------------------------- 1 | // importing dependencies 2 | import React, { useState } from 'react'; 3 | // importing other components 4 | import ChartsModal from '../modalComps/ChartsModal'; 5 | import ErrorModal from '../modalComps/ErrorModal'; 6 | 7 | // type for props for podInfo 8 | type podType = { 9 | podName: string, 10 | podNamespace: string, 11 | podStatus: string, 12 | podRestart: number, 13 | podAge: number, 14 | podReason?: string, 15 | currentUrl: string 16 | } 17 | // component for individual pod info 18 | const PodInfo = (props: podType) => { 19 | 20 | const [showChartsModal, setShowChartsModal] = useState(false); 21 | 22 | const toggleChartsModal = () => { 23 | setShowChartsModal(!showChartsModal); 24 | } 25 | 26 | 27 | const [showErrorModal, setShowErrorModal] = useState(false); 28 | 29 | const toggleErrorModal = () => { 30 | setShowErrorModal(!showErrorModal); 31 | } 32 | 33 | return( 34 |
35 |
{props.podName}
36 |
{props.podNamespace}
37 |
{props.podStatus}
38 |
{props.podRestart}
39 |
{props.podAge}
40 | 41 | 42 | 43 | 44 |
45 | ) 46 | } 47 | 48 | export default PodInfo; 49 | 50 | // function getPodInfo(url: string, setPods: any) { 51 | // const promql = '/api/v1/query?query='; 52 | // let query = '(kube_pod_status_phase)==1'; 53 | // const finalUrl = url + promql + query; 54 | // fetch(finalUrl) 55 | // .then(data => data.json()) 56 | // .then(data => { 57 | // // format the data 58 | // let resultArray = data.data.result; 59 | // let resultObject :any = {"pending": {}, "running": {}, "successful": {}, "unkown": {}, "failed": {}}; 60 | // for (let i=0; i { 10 | function handleClick(setAllPods: any) { 11 | console.log('inside handleClick') 12 | // document.getElementById() returns the type HTMLElement which does not contain a value property. The subtype HTMLInputElement does however contain the value property. 13 | const inputElement = (document.getElementById('endpoint-url') as HTMLInputElement); 14 | let inputValue = inputElement.value 15 | // const url = inputValue.toString() + '/metrics' 16 | if (inputValue) props.setCurrentUrl(inputValue); 17 | else inputValue = 'http://localhost:9090'; 18 | 19 | inputElement.value = ''; 20 | // this is the get real data from localhost 9090 21 | getPodInfo("actual", setAllPods, inputValue); 22 | 23 | // this uses mock data 24 | // getPodInfo("mock", setAllPods); 25 | 26 | // declare a resultObject -> {"pending": {}, "running": {}, "succeeded": {}, "unknown": {}, "failed": {}}; 27 | // call our first fetch function to update result object, pass in resultObject as an argument 28 | // second fetch 29 | // third fetch 30 | // setAllPods(resultObject) 31 | 32 | } 33 | 34 | let placeholder = ' enter your url here'; 35 | // if (props.currentUrl) placeholder = props.currentUrl; 36 | 37 | return( 38 |
39 | Ekkremis 40 |
41 | 42 |
/metrics
43 | */} 49 |
50 |
51 |
60 |
61 | ) 62 | } 63 | 64 | export default TopBar; -------------------------------------------------------------------------------- /src/styles/dashboard.css: -------------------------------------------------------------------------------- 1 | .dashboard { 2 | width: 100%; 3 | height: 200%; 4 | } 5 | 6 | .top-bar { 7 | position: fixed; 8 | top: 0; 9 | display: flex; 10 | align-items: center; 11 | justify-content: space-around; 12 | transition: 0.5s; 13 | width: 100%; 14 | height: 75px; 15 | border: 1.2px solid #ec633677; 16 | box-shadow: 0 2px 3px #E2E0E1, 0 1px 3px #ec6336b5; 17 | } 18 | 19 | .header-logo { 20 | position: fixed; 21 | left: 0; 22 | margin-top: 5px; 23 | margin-left: 50px; 24 | } 25 | 26 | .main { 27 | display: flex; 28 | justify-content: center; 29 | margin-top: 75px; 30 | height: 100%; 31 | } 32 | 33 | .query-bar { 34 | position: fixed; 35 | left: 0; 36 | margin-left: 20px; 37 | margin-top: 10px; 38 | height: 800px; 39 | max-width: 250px; 40 | margin-right: 100px; 41 | } 42 | 43 | .right-side { 44 | margin-left: 300px; 45 | position: relative; 46 | } 47 | 48 | .display { 49 | border: 1.2px solid #ec633677; 50 | box-shadow: 0 4px 6px #E2E0E1, 0 1px 3px #ec6336b5; 51 | flex: 0.3; 52 | height: 200px; 53 | width: 550px; 54 | margin-top: 50px; 55 | } 56 | 57 | .display img { 58 | height: 200px; 59 | width: 550px; 60 | margin-top: -58px; 61 | } 62 | 63 | .pods-header { 64 | height: 35px; 65 | width: 100%; 66 | display: flex; 67 | border: none; 68 | border-radius: 5px; 69 | background-color: rgb(222, 145, 41); 70 | transition: 0.5s; 71 | margin-top: 30px; 72 | margin-bottom: -15px; 73 | } 74 | 75 | .pods-header h5 { 76 | padding-left: 10px; 77 | margin: 30px; 78 | margin-top: 10px; 79 | color: white; 80 | } 81 | 82 | .all-pod-info { 83 | border: 1.2px solid #ec633677; 84 | border-radius: 5px; 85 | flex: 0.3; 86 | height: 290px; 87 | width: 650px; 88 | margin-top: 20px; 89 | overflow-y: auto 90 | } 91 | 92 | .pod-info { 93 | height: 50px; 94 | width: 97%; 95 | display: flex; 96 | justify-content: center; 97 | background-color: #E2E0E1; 98 | border: 1.2px solid #ec633677; 99 | border-radius: 5px; 100 | margin: 5px; 101 | padding-bottom: 10px; 102 | padding-top: -10px; 103 | } 104 | 105 | .pod-info h5 { 106 | margin-left: 20px; 107 | margin-right: 20px; 108 | text-align: center; 109 | } 110 | 111 | @media only screen and (max-width: 600px) { 112 | .right-side { 113 | margin-left: 180px; 114 | } 115 | .query-bar { 116 | margin-left: 5px; 117 | width: 220px; 118 | } 119 | .header-logo { 120 | position: fixed; 121 | left: 0; 122 | margin-top: 5px; 123 | margin-left: 2px; 124 | } 125 | .display { 126 | width: 200px; 127 | } 128 | .all-pod-info { 129 | width: 200px; 130 | } 131 | .pods-header { 132 | width: 190px; 133 | } 134 | } 135 | 136 | -------------------------------------------------------------------------------- /src/components/Dashboard.tsx: -------------------------------------------------------------------------------- 1 | // importing dependencies 2 | import React, { useState, useEffect } from 'react'; 3 | // importing other components 4 | import '../styles/dashboard.css'; 5 | import QueryBar from './statelessComps/QueryBar'; 6 | import AllPodInfo from './statelessComps/AllPodInfo'; 7 | import TopBar from './statelessComps/TopBar'; 8 | import Display from './statelessComps/Display'; 9 | // importing functions from utils 10 | import { getPodInfo } from '../utils'; 11 | 12 | 13 | // import mock data 14 | // import mockData from '../mock_data.json' assert { type: 'JSON' }; 15 | // mockData = mockData.json(); 16 | let mockData: any = {"pending": {}, "running": {}, "succeeded": {}, "unknown": {}, "failed": {}} 17 | 18 | // fetch('../mock_data.json') 19 | // .then(response => response.json()) 20 | // .then(data => mockData = data.data) 21 | // .catch(error => console.log(error)); 22 | 23 | // the parent componeent that holds all states and puts all other components together 24 | const Dashboard = () => { 25 | // state for current URL 26 | const [currentUrl, setCurrentUrl] = useState('http://localhost:9090'); 27 | // state for current active nav bar category 28 | const [status, setStatus] = useState('summary'); 29 | // state for current pods for display - initialized by each button click - creates a subset of allPods based on status 30 | const [currentPods, setCurrentPods] = useState({ 31 | "pendingPod1": { "podName": "pending pod 1", "node": "minikube", "status": "pending", "restarts": 0, "age": "53 minutes" }, 32 | "pendingPod2": { "podName": "pending pod 2", "node": "minikube", "status": "pending", "restarts": 0, "age": "53 minutes" }, 33 | "pendingPod3": { "podName": "pending pod 3", "node": "minikube", "status": "pending", "restarts": 0, "age": "53 minutes" } 34 | }); 35 | // all pods looks like this: {"pending": {}, "running": {}, "succeeded": {}, "unknown": {}, "failed": {}} 36 | const [allPods, setAllPods] = useState(mockData); 37 | 38 | // function to convert all pod data to summary format 39 | async function generateSummary() { 40 | // array of keys of allPods 41 | let keysArray = Object.keys(allPods); 42 | let resultObject = {}; 43 | for (let i = 0; i < keysArray.length; i++) { 44 | Object.assign(resultObject, allPods[keysArray[i]]) 45 | } 46 | // return an object that's in an accepted format by currentPods 47 | return resultObject; 48 | } 49 | 50 | // failed attempt to get the data to render on first load... 51 | // if (!status) setStatus('summary'); 52 | 53 | useEffect(() => { 54 | // for the cleanup function 55 | let hasBeenRun = false; 56 | if (!hasBeenRun) { 57 | // reshape all pod data to fit status - resets current pods 58 | if (status !== 'summary') setCurrentPods(allPods[status]); 59 | else { 60 | (async () => { 61 | getPodInfo("actual", setAllPods, currentUrl); 62 | const summary: any = await generateSummary(); 63 | console.log(summary); 64 | setCurrentPods(summary); 65 | })(); 66 | } 67 | } 68 | console.log(currentPods); 69 | // cleanup function to aviod looping 70 | return () => { 71 | hasBeenRun = true; 72 | } 73 | }, [status, currentUrl]); // update current pods when status or url changes 74 | 75 | 76 | return( 77 |
78 | 79 |
80 |
81 | 82 |
83 |
84 | 85 | 86 |
87 |
88 |
89 | ) 90 | } 91 | 92 | export default Dashboard; 93 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Ekkremis


2 |

3 | 4 | Ekkremis Banner 5 | 6 |

7 | 8 |

9 | Optomize your Kubernetes pod lifecycle. Built with React Typescript with Electron/Node.js runtime. 10 |

11 | 12 | 13 | 14 | ## Table of Contents 15 | 16 | - [Introduction](#introduction) 17 | - [Features](#features) 18 | - [Feedback](#feedback) 19 | - [Contributors](#contributors) 20 | - [Alerts Setup](#alerts-setup) 21 | - [Dashboard Build](#dashboard-build) 22 | - [Acknowledgments](#acknowledgments) 23 | 24 | 25 | ## Introduction 26 | 27 | Some Kubernetes pods can't be scheduled and get stuck in a pending phase of the pod lifecycle. 28 | 29 |

30 | 31 |

32 | 33 | The status of pending pods has to be manually queried to proceed with resolving them, which slows down the deployment workflow. 34 | 35 | This repository contains the code for Ekkremis: a prometheus-based alertmanager to resolve kubernetes pods pending issues. Ekkremis leverages prometheus data scraping and reports back when issues interfere with scheduling along with tailored solutions. Additionally, Ekkremis has an optional lifecycle dashboard where DevOps engineers will find a consolidated view of pod metrics by state. Solutions provided by Ekkremis (greek for pending) increases Kubernetes deployment efficiency by providing updates on pending and other unhealthy pods to get them up and running faster. 36 | 37 | ## Requirements 38 | - Prometheus (can run demo without) 39 | - npm (web view only) 40 | - yarn (web or electron app) 41 | 42 | ## Features 43 | 44 | A few of the things you can do with Ekkremis: 45 | 46 | * Reduce manual queries to find unhealthy or pending pods 47 | * Receive alerts by email or slack when your pods are stuck in pending 48 | * Implement tailored solutions suggested by Ekkremis to get your pods up and running 49 | 50 | 51 | **Optional Ekkremis Lifecycle Dashboard.** 52 | 53 | Lots of great screenshots coming! 54 | 55 | 63 | 64 | 65 | ## Alerts Setup 66 | 69 | 70 | ## Dashboard Build Process 71 | 72 | 73 | **Initial Setup** 74 | - Clone or download the repo 75 | - `npm install` to install dependencies 76 | 77 | **If running Ekkremis on Web App** 78 | - `npm run build` to create a build folder 79 | 80 | **If running Ekkremis on Electron App** 81 | - install yarn if you don't already have it (required for the following steps) 82 | - `npm run postinstall` to install electron-specific dependencies 83 | - `npm run electron:build` to build the Electron app for current platform and current architecture using default target 84 | 85 | **Once running the app** 86 | - Add your prometheus metrics endpoint for Kubernetes pods to the metrics input (Ekkremis defaults to http://localhost:9090) 87 | - Navigate between pod status metric displays through the navigation bar on the left 88 | - Gain more information about individual unhealthy or pending pods by selecting the 'error' and 'charts' buttons 89 | - Implement solutions suggested in Ekkremis for pending pods 90 | 91 | ## Running the DEMO with Mock Data 92 | 93 | - Add this mock promethus endpoint to the metrics input 94 | 95 | ## Feedback 96 | 97 | If something is not behaving intuitively, it is a bug and should be reported. 98 | Report it here by creating an issue: https://github.com/oslabs-beta/ekkremis/issues 99 | 100 | Help us fix the problem as quickly as possible by following [Mozilla's guidelines for reporting bugs.](https://developer.mozilla.org/en-US/docs/Mozilla/QA/Bug_writing_guidelines#General_Outline_of_a_Bug_Report) 101 | 102 | Feel free to send us feedback on [Twitter](https://twitter.com/gitpointapp) or [file an issue](https://github.com/gitpoint/git-point/issues/new). Feature requests are always welcome. If you wish to contribute, please take a quick look at the [guidelines](./CONTRIBUTING.md)! 103 | 104 | If there's anything you'd like to chat about, please feel free to join our [Gitter chat](https://gitter.im/git-point)! 105 | 106 | ## Contributors 107 | 108 | This project is brought to you by these [awesome contributors](./CONTRIBUTORS.md). 109 | 110 | Please take a look at the [contributing guidelines](./CONTRIBUTING.md) for a detailed process on how to build your application as well as troubleshooting information. 111 | 112 | ## Acknowledgments 113 | 114 | Thanks to tech accelerator [OSLabs-Beta](https://github.com/oslabs-beta) for supporting this project. 115 | 116 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | 2 | // import { app } from 'electron'; 3 | import path from 'path'; 4 | 5 | /* 6 | This function is a test to see if mock data can be fetched from a local json file, in order to reuse the fetch functionality for actual Prometheus metrics. 7 | The fetch funtionality works for the json file when hardcoded as 'file:///Users/z/codesmith/Ekkremis/src/mock_data.json'. 8 | Still need to find a way to dynamically build the file path to the mock data. 9 | The app tries to fetch from localhost unless specifying 'file://'. 10 | __dirname returns '/' from within this file. 11 | Within main.ts, app.getPath('userData') returns the path that can be combined with 'file://' + app.getPath('userData') + '/src/mock_data.json'. 12 | */ 13 | 14 | export function test() { 15 | // console.log(__dirname) // returns '/' 16 | // const string = ('file:///Users/z/codesmith/Ekkremis/src/mock_data.json') 17 | const string = 'file://' + 'static'; 18 | console.log(string); 19 | fetch(string) 20 | .then(data => data.json()) 21 | .then(data => { 22 | console.log(data) 23 | }) 24 | } 25 | 26 | // UseCase allows for only two accepted types for data source useCase, 'mock' & 'actual' . 27 | type UseCase = "mock" | "actual"; 28 | 29 | // getPodInfo fetches the current phase of the pods along with total restarts and age in hours. 30 | export function getPodInfo(useCase: UseCase, setAllPods: any, url?: string) { 31 | // this promql is the initial portion of the Prometheus query string. 32 | const promql = '/api/v1/query?query='; 33 | 34 | // These are queries for the current phase of the pods along with total restarts and age in seconds. 35 | let statusPhaseQuery = '(kube_pod_status_phase)==1'; 36 | let restartQuery = '(kube_pod_container_status_restarts_total)'; 37 | let ageQuery = '(kube_pod_start_time)'; 38 | 39 | let finalStatusUrl: string = ''; 40 | let finalRestartUrl: string = ''; 41 | let finalAgeUrl: string = ''; 42 | if (useCase==='actual') { 43 | finalStatusUrl = url + promql + statusPhaseQuery; 44 | finalRestartUrl = url + promql + restartQuery; 45 | finalAgeUrl = url + promql + ageQuery; 46 | } 47 | console.log('sendQuery invoked', finalStatusUrl) 48 | 49 | // Three separate fetch requests are made here to build up a restart object that stores restarts and the pod age converted from seconds to hours. 50 | // The last fetch request gets the pod status object and then maps the restarts and age to each pod before setting the allPods state. 51 | let resultObject :any = {"pending": {}, "running": {}, "succeeded": {}, "unknown": {}, "failed": {}}; 52 | let restartObject :any = {}; 53 | fetch(finalRestartUrl) 54 | .then(data => data.json()) 55 | .then(data => { 56 | let resultArray; 57 | if (useCase==='mock') resultArray = data[restartQuery].data.result; 58 | else if (useCase==='actual') resultArray = data.data.result; 59 | for (let i=0; i { 66 | fetch(finalAgeUrl) 67 | .then(data => data.json()) 68 | .then(data => { 69 | let resultArray; 70 | if (useCase==='mock') resultArray = data[restartQuery].data.result; 71 | else if (useCase==='actual') resultArray = data.data.result; 72 | const currentTime = Math.floor(Date.now() / 1000); 73 | for (let i=0; i { 80 | fetch(finalStatusUrl) 81 | .then(data => data.json()) 82 | .then(data => { 83 | // format the data 84 | let resultArray; 85 | if (useCase==='mock') resultArray = data[statusPhaseQuery].data.result; 86 | else if (useCase==='actual') resultArray = data.data.result; 87 | for (let i=0; i data.json()) 122 | .then(data => { 123 | if (data.data.result.length===0) { 124 | // setRan to true so the Log component renders in place of the Loading component. 125 | setRan(true); 126 | return 'no'; 127 | }; 128 | const reason = data.data.result[0].metric.reason; 129 | // Set the error log reason to be the reason. 130 | setLogInfo(reason); 131 | // Set the noError state to have an error. 132 | setNoError('yes error'); 133 | // setRan to true so the Log component renders in place of the Loading component. 134 | setRan(true); 135 | }) 136 | } 137 | -------------------------------------------------------------------------------- /src/mock_data.json: -------------------------------------------------------------------------------- 1 | { 2 | "(kube_pod_status_phase)==1": { 3 | "status": "success", 4 | "data": { 5 | "resultType": "vector", 6 | "result": [ 7 | { 8 | "metric": { 9 | "__name__": "kube_pod_status_phase", 10 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 11 | "job": "kube-state-metrics", 12 | "namespace": "default", 13 | "phase": "Pending", 14 | "pod": "cowclicker-7dbd496458-rpznx", 15 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 16 | }, 17 | "value": [1667258442.939, "1"] 18 | }, 19 | { 20 | "metric": { 21 | "__name__": "kube_pod_status_phase", 22 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 23 | "job": "kube-state-metrics", 24 | "namespace": "default", 25 | "phase": "Pending", 26 | "pod": "cowclicker-7dbd496458-fvq9w", 27 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 28 | }, 29 | "value": [1667258442.939, "1"] 30 | }, 31 | { 32 | "metric": { 33 | "__name__": "kube_pod_status_phase", 34 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 35 | "job": "kube-state-metrics", 36 | "namespace": "default", 37 | "phase": "Pending", 38 | "pod": "cowclicker-4dbe896458-dmqfq", 39 | "uid": "45269121-81db-462a-bc2f-e42c355b7153" 40 | }, 41 | "value": [1667258442.939, "1"] 42 | }, 43 | { 44 | "metric": { 45 | "__name__": "kube_pod_status_phase", 46 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 47 | "job": "kube-state-metrics", 48 | "namespace": "default", 49 | "phase": "Pending", 50 | "pod": "cowclicker-7dbd496458-dmscq", 51 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 52 | }, 53 | "value": [1667258442.939, "1"] 54 | }, 55 | { 56 | "metric": { 57 | "__name__": "kube_pod_status_phase", 58 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 59 | "job": "kube-state-metrics", 60 | "namespace": "default", 61 | "phase": "Running", 62 | "pod": "cowclicker-7dbd496458-dmscq", 63 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 64 | }, 65 | "value": [1667258442.939, "1"] 66 | }, 67 | { 68 | "metric": { 69 | "__name__": "kube_pod_status_phase", 70 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 71 | "job": "kube-state-metrics", 72 | "namespace": "default", 73 | "phase": "Running", 74 | "pod": "cowclicker-7dbd496458-fvq9w", 75 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 76 | }, 77 | "value": [1667258442.939, "1"] 78 | }, 79 | { 80 | "metric": { 81 | "__name__": "kube_pod_status_phase", 82 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 83 | "job": "kube-state-metrics", 84 | "namespace": "default", 85 | "phase": "Running", 86 | "pod": "cowclicker-7dbd496458-rpznx", 87 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 88 | }, 89 | "value": [1667258442.939, "1"] 90 | }, 91 | { 92 | "metric": { 93 | "__name__": "kube_pod_status_phase", 94 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 95 | "job": "kube-state-metrics", 96 | "namespace": "kube-system", 97 | "phase": "Running", 98 | "pod": "coredns-565d847f94-g2m7t", 99 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 100 | }, 101 | "value": [1667258442.939, "1"] 102 | }, 103 | { 104 | "metric": { 105 | "__name__": "kube_pod_status_phase", 106 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 107 | "job": "kube-state-metrics", 108 | "namespace": "kube-system", 109 | "phase": "Running", 110 | "pod": "etcd-minikube", 111 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 112 | }, 113 | "value": [1667258442.939, "1"] 114 | }, 115 | { 116 | "metric": { 117 | "__name__": "kube_pod_status_phase", 118 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 119 | "job": "kube-state-metrics", 120 | "namespace": "kube-system", 121 | "phase": "Running", 122 | "pod": "kube-apiserver-minikube", 123 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 124 | }, 125 | "value": [1667258442.939, "1"] 126 | }, 127 | { 128 | "metric": { 129 | "__name__": "kube_pod_status_phase", 130 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 131 | "job": "kube-state-metrics", 132 | "namespace": "kube-system", 133 | "phase": "Running", 134 | "pod": "kube-controller-manager-minikube", 135 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 136 | }, 137 | "value": [1667258442.939, "1"] 138 | }, 139 | { 140 | "metric": { 141 | "__name__": "kube_pod_status_phase", 142 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 143 | "job": "kube-state-metrics", 144 | "namespace": "kube-system", 145 | "phase": "Running", 146 | "pod": "kube-proxy-hmwlw", 147 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 148 | }, 149 | "value": [1667258442.939, "1"] 150 | }, 151 | { 152 | "metric": { 153 | "__name__": "kube_pod_status_phase", 154 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 155 | "job": "kube-state-metrics", 156 | "namespace": "kube-system", 157 | "phase": "Running", 158 | "pod": "kube-scheduler-minikube", 159 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 160 | }, 161 | "value": [1667258442.939, "1"] 162 | }, 163 | { 164 | "metric": { 165 | "__name__": "kube_pod_status_phase", 166 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 167 | "job": "kube-state-metrics", 168 | "namespace": "kube-system", 169 | "phase": "Running", 170 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 171 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 172 | }, 173 | "value": [1667258442.939, "1"] 174 | }, 175 | { 176 | "metric": { 177 | "__name__": "kube_pod_status_phase", 178 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 179 | "job": "kube-state-metrics", 180 | "namespace": "kube-system", 181 | "phase": "Running", 182 | "pod": "metrics-server-769cd898cd-wchcp", 183 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 184 | }, 185 | "value": [1667258442.939, "1"] 186 | }, 187 | { 188 | "metric": { 189 | "__name__": "kube_pod_status_phase", 190 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 191 | "job": "kube-state-metrics", 192 | "namespace": "kube-system", 193 | "phase": "Running", 194 | "pod": "storage-provisioner", 195 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 196 | }, 197 | "value": [1667258442.939, "1"] 198 | }, 199 | { 200 | "metric": { 201 | "__name__": "kube_pod_status_phase", 202 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 203 | "job": "kube-state-metrics", 204 | "namespace": "kubernetes-dashboard", 205 | "phase": "Running", 206 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 207 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 208 | }, 209 | "value": [1667258442.939, "1"] 210 | }, 211 | { 212 | "metric": { 213 | "__name__": "kube_pod_status_phase", 214 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 215 | "job": "kube-state-metrics", 216 | "namespace": "kubernetes-dashboard", 217 | "phase": "Running", 218 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 219 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 220 | }, 221 | "value": [1667258442.939, "1"] 222 | }, 223 | { 224 | "metric": { 225 | "__name__": "kube_pod_status_phase", 226 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 227 | "job": "kube-state-metrics", 228 | "namespace": "monitoring", 229 | "phase": "Running", 230 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 231 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 232 | }, 233 | "value": [1667258442.939, "1"] 234 | }, 235 | { 236 | "metric": { 237 | "__name__": "kube_pod_status_phase", 238 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 239 | "job": "kube-state-metrics", 240 | "namespace": "default", 241 | "phase": "Failed", 242 | "pod": "experimental-pod-1", 243 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 244 | }, 245 | "value": [1667258442.939, "1"] 246 | }, 247 | { 248 | "metric": { 249 | "__name__": "kube_pod_status_phase", 250 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 251 | "job": "kube-state-metrics", 252 | "namespace": "metrics", 253 | "phase": "Failed", 254 | "pod": "experimental-metrics-pod-1", 255 | "uid": "d4804b22-a05p-4dc2-b724-810a58ac671f" 256 | }, 257 | "value": [1667258442.939, "1"] 258 | }, 259 | { 260 | "metric": { 261 | "__name__": "kube_pod_status_phase", 262 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 263 | "job": "kube-state-metrics", 264 | "namespace": "default", 265 | "phase": "Succeeded", 266 | "pod": "experimental-pod-2", 267 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 268 | }, 269 | "value": [1667258442.939, "1"] 270 | }, 271 | { 272 | "metric": { 273 | "__name__": "kube_pod_status_phase", 274 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 275 | "job": "kube-state-metrics", 276 | "namespace": "metrics", 277 | "phase": "Succeeded", 278 | "pod": "experimental-metrics-pod-2", 279 | "uid": "d4804b22-a05p-4dc2-b724-810a58ac671f" 280 | }, 281 | "value": [1667258442.939, "1"] 282 | }, 283 | { 284 | "metric": { 285 | "__name__": "kube_pod_status_phase", 286 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 287 | "job": "kube-state-metrics", 288 | "namespace": "default", 289 | "phase": "Unknown", 290 | "pod": "experimental-pod-3", 291 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 292 | }, 293 | "value": [1667258442.939, "1"] 294 | } 295 | ] 296 | } 297 | }, 298 | "(kube_pod_container_status_waiting_reason)": { 299 | "status": "success", 300 | "data": { 301 | "resultType": "vector", 302 | "result": [ 303 | { 304 | "metric": { 305 | "__name__": "kube_pod_container_status_waiting_reason", 306 | "container": "cowclicker-test4", 307 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 308 | "job": "kube-state-metrics", 309 | "namespace": "default", 310 | "pod": "cowclicker-97d4s", 311 | "reason": "ImagePullBackOff", 312 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 313 | }, 314 | "value": [1667666054.08, "1"] 315 | }, 316 | { 317 | "metric": { 318 | "__name__": "kube_pod_container_status_waiting_reason", 319 | "container": "cowclicker-test4", 320 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 321 | "job": "kube-state-metrics", 322 | "namespace": "default", 323 | "pod": "cowclicker-k82f7", 324 | "reason": "ImagePullBackOff", 325 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 326 | }, 327 | "value": [1667666054.08, "1"] 328 | }, 329 | { 330 | "metric": { 331 | "__name__": "kube_pod_container_status_waiting_reason", 332 | "container": "cowclicker-test4", 333 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 334 | "job": "kube-state-metrics", 335 | "namespace": "default", 336 | "pod": "cowclicker-xlsmq", 337 | "reason": "ImagePullBackOff", 338 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 339 | }, 340 | "value": [1667666054.08, "1"] 341 | } 342 | ] 343 | } 344 | }, 345 | "(kube_pod_container_status_restarts_total)": { 346 | "status": "success", 347 | "data": { 348 | "resultType": "vector", 349 | "result": [ 350 | { 351 | "metric": { 352 | "__name__": "kube_pod_container_status_restarts_total", 353 | "container": "coredns", 354 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 355 | "job": "kube-state-metrics", 356 | "namespace": "kube-system", 357 | "pod": "coredns-565d847f94-g2m7t", 358 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 359 | }, 360 | "value": [1667666222.644, "17"] 361 | }, 362 | { 363 | "metric": { 364 | "__name__": "kube_pod_container_status_restarts_total", 365 | "container": "cowclicker", 366 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 367 | "job": "kube-state-metrics", 368 | "namespace": "default", 369 | "pod": "cowclicker-7dbd496458-dmscq", 370 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 371 | }, 372 | "value": [1667666222.644, "14"] 373 | }, 374 | { 375 | "metric": { 376 | "__name__": "kube_pod_container_status_restarts_total", 377 | "container": "cowclicker", 378 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 379 | "job": "kube-state-metrics", 380 | "namespace": "default", 381 | "pod": "cowclicker-7dbd496458-fvq9w", 382 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 383 | }, 384 | "value": [1667666222.644, "14"] 385 | }, 386 | { 387 | "metric": { 388 | "__name__": "kube_pod_container_status_restarts_total", 389 | "container": "cowclicker", 390 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 391 | "job": "kube-state-metrics", 392 | "namespace": "default", 393 | "pod": "cowclicker-7dbd496458-rpznx", 394 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 395 | }, 396 | "value": [1667666222.644, "14"] 397 | }, 398 | { 399 | "metric": { 400 | "__name__": "kube_pod_container_status_restarts_total", 401 | "container": "cowclicker-test4", 402 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 403 | "job": "kube-state-metrics", 404 | "namespace": "default", 405 | "pod": "cowclicker-97d4s", 406 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 407 | }, 408 | "value": [1667666222.644, "0"] 409 | }, 410 | { 411 | "metric": { 412 | "__name__": "kube_pod_container_status_restarts_total", 413 | "container": "cowclicker-test4", 414 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 415 | "job": "kube-state-metrics", 416 | "namespace": "default", 417 | "pod": "cowclicker-k82f7", 418 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 419 | }, 420 | "value": [1667666222.644, "0"] 421 | }, 422 | { 423 | "metric": { 424 | "__name__": "kube_pod_container_status_restarts_total", 425 | "container": "cowclicker-test4", 426 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 427 | "job": "kube-state-metrics", 428 | "namespace": "default", 429 | "pod": "cowclicker-xlsmq", 430 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 431 | }, 432 | "value": [1667666222.644, "0"] 433 | }, 434 | { 435 | "metric": { 436 | "__name__": "kube_pod_container_status_restarts_total", 437 | "container": "dashboard-metrics-scraper", 438 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 439 | "job": "kube-state-metrics", 440 | "namespace": "kubernetes-dashboard", 441 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 442 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 443 | }, 444 | "value": [1667666222.644, "16"] 445 | }, 446 | { 447 | "metric": { 448 | "__name__": "kube_pod_container_status_restarts_total", 449 | "container": "etcd", 450 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 451 | "job": "kube-state-metrics", 452 | "namespace": "kube-system", 453 | "pod": "etcd-minikube", 454 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 455 | }, 456 | "value": [1667666222.644, "17"] 457 | }, 458 | { 459 | "metric": { 460 | "__name__": "kube_pod_container_status_restarts_total", 461 | "container": "kube-apiserver", 462 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 463 | "job": "kube-state-metrics", 464 | "namespace": "kube-system", 465 | "pod": "kube-apiserver-minikube", 466 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 467 | }, 468 | "value": [1667666222.644, "17"] 469 | }, 470 | { 471 | "metric": { 472 | "__name__": "kube_pod_container_status_restarts_total", 473 | "container": "kube-controller-manager", 474 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 475 | "job": "kube-state-metrics", 476 | "namespace": "kube-system", 477 | "pod": "kube-controller-manager-minikube", 478 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 479 | }, 480 | "value": [1667666222.644, "18"] 481 | }, 482 | { 483 | "metric": { 484 | "__name__": "kube_pod_container_status_restarts_total", 485 | "container": "kube-proxy", 486 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 487 | "job": "kube-state-metrics", 488 | "namespace": "kube-system", 489 | "pod": "kube-proxy-hmwlw", 490 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 491 | }, 492 | "value": [1667666222.644, "17"] 493 | }, 494 | { 495 | "metric": { 496 | "__name__": "kube_pod_container_status_restarts_total", 497 | "container": "kube-scheduler", 498 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 499 | "job": "kube-state-metrics", 500 | "namespace": "kube-system", 501 | "pod": "kube-scheduler-minikube", 502 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 503 | }, 504 | "value": [1667666222.644, "17"] 505 | }, 506 | { 507 | "metric": { 508 | "__name__": "kube_pod_container_status_restarts_total", 509 | "container": "kube-state-metrics", 510 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 511 | "job": "kube-state-metrics", 512 | "namespace": "kube-system", 513 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 514 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 515 | }, 516 | "value": [1667666222.644, "21"] 517 | }, 518 | { 519 | "metric": { 520 | "__name__": "kube_pod_container_status_restarts_total", 521 | "container": "kubernetes-dashboard", 522 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 523 | "job": "kube-state-metrics", 524 | "namespace": "kubernetes-dashboard", 525 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 526 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 527 | }, 528 | "value": [1667666222.644, "26"] 529 | }, 530 | { 531 | "metric": { 532 | "__name__": "kube_pod_container_status_restarts_total", 533 | "container": "metrics-server", 534 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 535 | "job": "kube-state-metrics", 536 | "namespace": "kube-system", 537 | "pod": "metrics-server-769cd898cd-wchcp", 538 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 539 | }, 540 | "value": [1667666222.644, "48"] 541 | }, 542 | { 543 | "metric": { 544 | "__name__": "kube_pod_container_status_restarts_total", 545 | "container": "prometheus", 546 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 547 | "job": "kube-state-metrics", 548 | "namespace": "monitoring", 549 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 550 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 551 | }, 552 | "value": [1667666222.644, "12"] 553 | }, 554 | { 555 | "metric": { 556 | "__name__": "kube_pod_container_status_restarts_total", 557 | "container": "storage-provisioner", 558 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 559 | "job": "kube-state-metrics", 560 | "namespace": "kube-system", 561 | "pod": "storage-provisioner", 562 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 563 | }, 564 | "value": [1667666222.644, "36"] 565 | } 566 | ] 567 | } 568 | }, 569 | "(kube_pod_container_resource_requests)": { 570 | "status": "success", 571 | "data": { 572 | "resultType": "vector", 573 | "result": [ 574 | { 575 | "metric": { 576 | "__name__": "kube_pod_container_resource_requests", 577 | "container": "coredns", 578 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 579 | "job": "kube-state-metrics", 580 | "namespace": "kube-system", 581 | "node": "minikube", 582 | "pod": "coredns-565d847f94-g2m7t", 583 | "resource": "cpu", 584 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586", 585 | "unit": "core" 586 | }, 587 | "value": [1667666307.868, "0.1"] 588 | }, 589 | { 590 | "metric": { 591 | "__name__": "kube_pod_container_resource_requests", 592 | "container": "coredns", 593 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 594 | "job": "kube-state-metrics", 595 | "namespace": "kube-system", 596 | "node": "minikube", 597 | "pod": "coredns-565d847f94-g2m7t", 598 | "resource": "memory", 599 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586", 600 | "unit": "byte" 601 | }, 602 | "value": [1667666307.868, "73400320"] 603 | }, 604 | { 605 | "metric": { 606 | "__name__": "kube_pod_container_resource_requests", 607 | "container": "etcd", 608 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 609 | "job": "kube-state-metrics", 610 | "namespace": "kube-system", 611 | "node": "minikube", 612 | "pod": "etcd-minikube", 613 | "resource": "cpu", 614 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec", 615 | "unit": "core" 616 | }, 617 | "value": [1667666307.868, "0.1"] 618 | }, 619 | { 620 | "metric": { 621 | "__name__": "kube_pod_container_resource_requests", 622 | "container": "etcd", 623 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 624 | "job": "kube-state-metrics", 625 | "namespace": "kube-system", 626 | "node": "minikube", 627 | "pod": "etcd-minikube", 628 | "resource": "memory", 629 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec", 630 | "unit": "byte" 631 | }, 632 | "value": [1667666307.868, "104857600"] 633 | }, 634 | { 635 | "metric": { 636 | "__name__": "kube_pod_container_resource_requests", 637 | "container": "kube-apiserver", 638 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 639 | "job": "kube-state-metrics", 640 | "namespace": "kube-system", 641 | "node": "minikube", 642 | "pod": "kube-apiserver-minikube", 643 | "resource": "cpu", 644 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486", 645 | "unit": "core" 646 | }, 647 | "value": [1667666307.868, "0.25"] 648 | }, 649 | { 650 | "metric": { 651 | "__name__": "kube_pod_container_resource_requests", 652 | "container": "kube-controller-manager", 653 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 654 | "job": "kube-state-metrics", 655 | "namespace": "kube-system", 656 | "node": "minikube", 657 | "pod": "kube-controller-manager-minikube", 658 | "resource": "cpu", 659 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867", 660 | "unit": "core" 661 | }, 662 | "value": [1667666307.868, "0.2"] 663 | }, 664 | { 665 | "metric": { 666 | "__name__": "kube_pod_container_resource_requests", 667 | "container": "kube-scheduler", 668 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 669 | "job": "kube-state-metrics", 670 | "namespace": "kube-system", 671 | "node": "minikube", 672 | "pod": "kube-scheduler-minikube", 673 | "resource": "cpu", 674 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475", 675 | "unit": "core" 676 | }, 677 | "value": [1667666307.868, "0.1"] 678 | }, 679 | { 680 | "metric": { 681 | "__name__": "kube_pod_container_resource_requests", 682 | "container": "metrics-server", 683 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 684 | "job": "kube-state-metrics", 685 | "namespace": "kube-system", 686 | "node": "minikube", 687 | "pod": "metrics-server-769cd898cd-wchcp", 688 | "resource": "cpu", 689 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e", 690 | "unit": "core" 691 | }, 692 | "value": [1667666307.868, "0.1"] 693 | }, 694 | { 695 | "metric": { 696 | "__name__": "kube_pod_container_resource_requests", 697 | "container": "metrics-server", 698 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 699 | "job": "kube-state-metrics", 700 | "namespace": "kube-system", 701 | "node": "minikube", 702 | "pod": "metrics-server-769cd898cd-wchcp", 703 | "resource": "memory", 704 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e", 705 | "unit": "byte" 706 | }, 707 | "value": [1667666307.868, "209715200"] 708 | }, 709 | { 710 | "metric": { 711 | "__name__": "kube_pod_container_resource_requests", 712 | "container": "prometheus", 713 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 714 | "job": "kube-state-metrics", 715 | "namespace": "monitoring", 716 | "node": "minikube", 717 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 718 | "resource": "cpu", 719 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f", 720 | "unit": "core" 721 | }, 722 | "value": [1667666307.868, "0.5"] 723 | }, 724 | { 725 | "metric": { 726 | "__name__": "kube_pod_container_resource_requests", 727 | "container": "prometheus", 728 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 729 | "job": "kube-state-metrics", 730 | "namespace": "monitoring", 731 | "node": "minikube", 732 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 733 | "resource": "memory", 734 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f", 735 | "unit": "byte" 736 | }, 737 | "value": [1667666307.868, "500000000"] 738 | } 739 | ] 740 | } 741 | }, 742 | "(kube_pod_status_reason)": { 743 | "status": "success", 744 | "data": { 745 | "resultType": "vector", 746 | "result": [ 747 | { 748 | "metric": { 749 | "__name__": "kube_pod_status_reason", 750 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 751 | "job": "kube-state-metrics", 752 | "namespace": "default", 753 | "pod": "cowclicker-7dbd496458-dmscq", 754 | "reason": "Evicted", 755 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 756 | }, 757 | "value": [1667666608.16, "0"] 758 | }, 759 | { 760 | "metric": { 761 | "__name__": "kube_pod_status_reason", 762 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 763 | "job": "kube-state-metrics", 764 | "namespace": "default", 765 | "pod": "cowclicker-7dbd496458-dmscq", 766 | "reason": "NodeAffinity", 767 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 768 | }, 769 | "value": [1667666608.16, "0"] 770 | }, 771 | { 772 | "metric": { 773 | "__name__": "kube_pod_status_reason", 774 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 775 | "job": "kube-state-metrics", 776 | "namespace": "default", 777 | "pod": "cowclicker-7dbd496458-dmscq", 778 | "reason": "NodeLost", 779 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 780 | }, 781 | "value": [1667666608.16, "0"] 782 | }, 783 | { 784 | "metric": { 785 | "__name__": "kube_pod_status_reason", 786 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 787 | "job": "kube-state-metrics", 788 | "namespace": "default", 789 | "pod": "cowclicker-7dbd496458-dmscq", 790 | "reason": "Shutdown", 791 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 792 | }, 793 | "value": [1667666608.16, "0"] 794 | }, 795 | { 796 | "metric": { 797 | "__name__": "kube_pod_status_reason", 798 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 799 | "job": "kube-state-metrics", 800 | "namespace": "default", 801 | "pod": "cowclicker-7dbd496458-dmscq", 802 | "reason": "UnexpectedAdmissionError", 803 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 804 | }, 805 | "value": [1667666608.16, "0"] 806 | }, 807 | { 808 | "metric": { 809 | "__name__": "kube_pod_status_reason", 810 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 811 | "job": "kube-state-metrics", 812 | "namespace": "default", 813 | "pod": "cowclicker-7dbd496458-fvq9w", 814 | "reason": "Evicted", 815 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 816 | }, 817 | "value": [1667666608.16, "0"] 818 | }, 819 | { 820 | "metric": { 821 | "__name__": "kube_pod_status_reason", 822 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 823 | "job": "kube-state-metrics", 824 | "namespace": "default", 825 | "pod": "cowclicker-7dbd496458-fvq9w", 826 | "reason": "NodeAffinity", 827 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 828 | }, 829 | "value": [1667666608.16, "0"] 830 | }, 831 | { 832 | "metric": { 833 | "__name__": "kube_pod_status_reason", 834 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 835 | "job": "kube-state-metrics", 836 | "namespace": "default", 837 | "pod": "cowclicker-7dbd496458-fvq9w", 838 | "reason": "NodeLost", 839 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 840 | }, 841 | "value": [1667666608.16, "0"] 842 | }, 843 | { 844 | "metric": { 845 | "__name__": "kube_pod_status_reason", 846 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 847 | "job": "kube-state-metrics", 848 | "namespace": "default", 849 | "pod": "cowclicker-7dbd496458-fvq9w", 850 | "reason": "Shutdown", 851 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 852 | }, 853 | "value": [1667666608.16, "0"] 854 | }, 855 | { 856 | "metric": { 857 | "__name__": "kube_pod_status_reason", 858 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 859 | "job": "kube-state-metrics", 860 | "namespace": "default", 861 | "pod": "cowclicker-7dbd496458-fvq9w", 862 | "reason": "UnexpectedAdmissionError", 863 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 864 | }, 865 | "value": [1667666608.16, "0"] 866 | }, 867 | { 868 | "metric": { 869 | "__name__": "kube_pod_status_reason", 870 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 871 | "job": "kube-state-metrics", 872 | "namespace": "default", 873 | "pod": "cowclicker-7dbd496458-rpznx", 874 | "reason": "Evicted", 875 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 876 | }, 877 | "value": [1667666608.16, "0"] 878 | }, 879 | { 880 | "metric": { 881 | "__name__": "kube_pod_status_reason", 882 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 883 | "job": "kube-state-metrics", 884 | "namespace": "default", 885 | "pod": "cowclicker-7dbd496458-rpznx", 886 | "reason": "NodeAffinity", 887 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 888 | }, 889 | "value": [1667666608.16, "0"] 890 | }, 891 | { 892 | "metric": { 893 | "__name__": "kube_pod_status_reason", 894 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 895 | "job": "kube-state-metrics", 896 | "namespace": "default", 897 | "pod": "cowclicker-7dbd496458-rpznx", 898 | "reason": "NodeLost", 899 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 900 | }, 901 | "value": [1667666608.16, "0"] 902 | }, 903 | { 904 | "metric": { 905 | "__name__": "kube_pod_status_reason", 906 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 907 | "job": "kube-state-metrics", 908 | "namespace": "default", 909 | "pod": "cowclicker-7dbd496458-rpznx", 910 | "reason": "Shutdown", 911 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 912 | }, 913 | "value": [1667666608.16, "0"] 914 | }, 915 | { 916 | "metric": { 917 | "__name__": "kube_pod_status_reason", 918 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 919 | "job": "kube-state-metrics", 920 | "namespace": "default", 921 | "pod": "cowclicker-7dbd496458-rpznx", 922 | "reason": "UnexpectedAdmissionError", 923 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 924 | }, 925 | "value": [1667666608.16, "0"] 926 | }, 927 | { 928 | "metric": { 929 | "__name__": "kube_pod_status_reason", 930 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 931 | "job": "kube-state-metrics", 932 | "namespace": "default", 933 | "pod": "cowclicker-97d4s", 934 | "reason": "Evicted", 935 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 936 | }, 937 | "value": [1667666608.16, "0"] 938 | }, 939 | { 940 | "metric": { 941 | "__name__": "kube_pod_status_reason", 942 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 943 | "job": "kube-state-metrics", 944 | "namespace": "default", 945 | "pod": "cowclicker-97d4s", 946 | "reason": "NodeAffinity", 947 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 948 | }, 949 | "value": [1667666608.16, "0"] 950 | }, 951 | { 952 | "metric": { 953 | "__name__": "kube_pod_status_reason", 954 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 955 | "job": "kube-state-metrics", 956 | "namespace": "default", 957 | "pod": "cowclicker-97d4s", 958 | "reason": "NodeLost", 959 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 960 | }, 961 | "value": [1667666608.16, "0"] 962 | }, 963 | { 964 | "metric": { 965 | "__name__": "kube_pod_status_reason", 966 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 967 | "job": "kube-state-metrics", 968 | "namespace": "default", 969 | "pod": "cowclicker-97d4s", 970 | "reason": "Shutdown", 971 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 972 | }, 973 | "value": [1667666608.16, "0"] 974 | }, 975 | { 976 | "metric": { 977 | "__name__": "kube_pod_status_reason", 978 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 979 | "job": "kube-state-metrics", 980 | "namespace": "default", 981 | "pod": "cowclicker-97d4s", 982 | "reason": "UnexpectedAdmissionError", 983 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 984 | }, 985 | "value": [1667666608.16, "0"] 986 | }, 987 | { 988 | "metric": { 989 | "__name__": "kube_pod_status_reason", 990 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 991 | "job": "kube-state-metrics", 992 | "namespace": "default", 993 | "pod": "cowclicker-k82f7", 994 | "reason": "Evicted", 995 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 996 | }, 997 | "value": [1667666608.16, "0"] 998 | }, 999 | { 1000 | "metric": { 1001 | "__name__": "kube_pod_status_reason", 1002 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1003 | "job": "kube-state-metrics", 1004 | "namespace": "default", 1005 | "pod": "cowclicker-k82f7", 1006 | "reason": "NodeAffinity", 1007 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 1008 | }, 1009 | "value": [1667666608.16, "0"] 1010 | }, 1011 | { 1012 | "metric": { 1013 | "__name__": "kube_pod_status_reason", 1014 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1015 | "job": "kube-state-metrics", 1016 | "namespace": "default", 1017 | "pod": "cowclicker-k82f7", 1018 | "reason": "NodeLost", 1019 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 1020 | }, 1021 | "value": [1667666608.16, "0"] 1022 | }, 1023 | { 1024 | "metric": { 1025 | "__name__": "kube_pod_status_reason", 1026 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1027 | "job": "kube-state-metrics", 1028 | "namespace": "default", 1029 | "pod": "cowclicker-k82f7", 1030 | "reason": "Shutdown", 1031 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 1032 | }, 1033 | "value": [1667666608.16, "0"] 1034 | }, 1035 | { 1036 | "metric": { 1037 | "__name__": "kube_pod_status_reason", 1038 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1039 | "job": "kube-state-metrics", 1040 | "namespace": "default", 1041 | "pod": "cowclicker-k82f7", 1042 | "reason": "UnexpectedAdmissionError", 1043 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 1044 | }, 1045 | "value": [1667666608.16, "0"] 1046 | }, 1047 | { 1048 | "metric": { 1049 | "__name__": "kube_pod_status_reason", 1050 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1051 | "job": "kube-state-metrics", 1052 | "namespace": "default", 1053 | "pod": "cowclicker-xlsmq", 1054 | "reason": "Evicted", 1055 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 1056 | }, 1057 | "value": [1667666608.16, "0"] 1058 | }, 1059 | { 1060 | "metric": { 1061 | "__name__": "kube_pod_status_reason", 1062 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1063 | "job": "kube-state-metrics", 1064 | "namespace": "default", 1065 | "pod": "cowclicker-xlsmq", 1066 | "reason": "NodeAffinity", 1067 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 1068 | }, 1069 | "value": [1667666608.16, "0"] 1070 | }, 1071 | { 1072 | "metric": { 1073 | "__name__": "kube_pod_status_reason", 1074 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1075 | "job": "kube-state-metrics", 1076 | "namespace": "default", 1077 | "pod": "cowclicker-xlsmq", 1078 | "reason": "NodeLost", 1079 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 1080 | }, 1081 | "value": [1667666608.16, "0"] 1082 | }, 1083 | { 1084 | "metric": { 1085 | "__name__": "kube_pod_status_reason", 1086 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1087 | "job": "kube-state-metrics", 1088 | "namespace": "default", 1089 | "pod": "cowclicker-xlsmq", 1090 | "reason": "Shutdown", 1091 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 1092 | }, 1093 | "value": [1667666608.16, "0"] 1094 | }, 1095 | { 1096 | "metric": { 1097 | "__name__": "kube_pod_status_reason", 1098 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1099 | "job": "kube-state-metrics", 1100 | "namespace": "default", 1101 | "pod": "cowclicker-xlsmq", 1102 | "reason": "UnexpectedAdmissionError", 1103 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 1104 | }, 1105 | "value": [1667666608.16, "0"] 1106 | }, 1107 | { 1108 | "metric": { 1109 | "__name__": "kube_pod_status_reason", 1110 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1111 | "job": "kube-state-metrics", 1112 | "namespace": "kube-system", 1113 | "pod": "coredns-565d847f94-g2m7t", 1114 | "reason": "Evicted", 1115 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 1116 | }, 1117 | "value": [1667666608.16, "0"] 1118 | }, 1119 | { 1120 | "metric": { 1121 | "__name__": "kube_pod_status_reason", 1122 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1123 | "job": "kube-state-metrics", 1124 | "namespace": "kube-system", 1125 | "pod": "coredns-565d847f94-g2m7t", 1126 | "reason": "NodeAffinity", 1127 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 1128 | }, 1129 | "value": [1667666608.16, "0"] 1130 | }, 1131 | { 1132 | "metric": { 1133 | "__name__": "kube_pod_status_reason", 1134 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1135 | "job": "kube-state-metrics", 1136 | "namespace": "kube-system", 1137 | "pod": "coredns-565d847f94-g2m7t", 1138 | "reason": "NodeLost", 1139 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 1140 | }, 1141 | "value": [1667666608.16, "0"] 1142 | }, 1143 | { 1144 | "metric": { 1145 | "__name__": "kube_pod_status_reason", 1146 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1147 | "job": "kube-state-metrics", 1148 | "namespace": "kube-system", 1149 | "pod": "coredns-565d847f94-g2m7t", 1150 | "reason": "Shutdown", 1151 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 1152 | }, 1153 | "value": [1667666608.16, "0"] 1154 | }, 1155 | { 1156 | "metric": { 1157 | "__name__": "kube_pod_status_reason", 1158 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1159 | "job": "kube-state-metrics", 1160 | "namespace": "kube-system", 1161 | "pod": "coredns-565d847f94-g2m7t", 1162 | "reason": "UnexpectedAdmissionError", 1163 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 1164 | }, 1165 | "value": [1667666608.16, "0"] 1166 | }, 1167 | { 1168 | "metric": { 1169 | "__name__": "kube_pod_status_reason", 1170 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1171 | "job": "kube-state-metrics", 1172 | "namespace": "kube-system", 1173 | "pod": "etcd-minikube", 1174 | "reason": "Evicted", 1175 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 1176 | }, 1177 | "value": [1667666608.16, "0"] 1178 | }, 1179 | { 1180 | "metric": { 1181 | "__name__": "kube_pod_status_reason", 1182 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1183 | "job": "kube-state-metrics", 1184 | "namespace": "kube-system", 1185 | "pod": "etcd-minikube", 1186 | "reason": "NodeAffinity", 1187 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 1188 | }, 1189 | "value": [1667666608.16, "0"] 1190 | }, 1191 | { 1192 | "metric": { 1193 | "__name__": "kube_pod_status_reason", 1194 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1195 | "job": "kube-state-metrics", 1196 | "namespace": "kube-system", 1197 | "pod": "etcd-minikube", 1198 | "reason": "NodeLost", 1199 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 1200 | }, 1201 | "value": [1667666608.16, "0"] 1202 | }, 1203 | { 1204 | "metric": { 1205 | "__name__": "kube_pod_status_reason", 1206 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1207 | "job": "kube-state-metrics", 1208 | "namespace": "kube-system", 1209 | "pod": "etcd-minikube", 1210 | "reason": "Shutdown", 1211 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 1212 | }, 1213 | "value": [1667666608.16, "0"] 1214 | }, 1215 | { 1216 | "metric": { 1217 | "__name__": "kube_pod_status_reason", 1218 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1219 | "job": "kube-state-metrics", 1220 | "namespace": "kube-system", 1221 | "pod": "etcd-minikube", 1222 | "reason": "UnexpectedAdmissionError", 1223 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 1224 | }, 1225 | "value": [1667666608.16, "0"] 1226 | }, 1227 | { 1228 | "metric": { 1229 | "__name__": "kube_pod_status_reason", 1230 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1231 | "job": "kube-state-metrics", 1232 | "namespace": "kube-system", 1233 | "pod": "kube-apiserver-minikube", 1234 | "reason": "Evicted", 1235 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 1236 | }, 1237 | "value": [1667666608.16, "0"] 1238 | }, 1239 | { 1240 | "metric": { 1241 | "__name__": "kube_pod_status_reason", 1242 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1243 | "job": "kube-state-metrics", 1244 | "namespace": "kube-system", 1245 | "pod": "kube-apiserver-minikube", 1246 | "reason": "NodeAffinity", 1247 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 1248 | }, 1249 | "value": [1667666608.16, "0"] 1250 | }, 1251 | { 1252 | "metric": { 1253 | "__name__": "kube_pod_status_reason", 1254 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1255 | "job": "kube-state-metrics", 1256 | "namespace": "kube-system", 1257 | "pod": "kube-apiserver-minikube", 1258 | "reason": "NodeLost", 1259 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 1260 | }, 1261 | "value": [1667666608.16, "0"] 1262 | }, 1263 | { 1264 | "metric": { 1265 | "__name__": "kube_pod_status_reason", 1266 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1267 | "job": "kube-state-metrics", 1268 | "namespace": "kube-system", 1269 | "pod": "kube-apiserver-minikube", 1270 | "reason": "Shutdown", 1271 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 1272 | }, 1273 | "value": [1667666608.16, "0"] 1274 | }, 1275 | { 1276 | "metric": { 1277 | "__name__": "kube_pod_status_reason", 1278 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1279 | "job": "kube-state-metrics", 1280 | "namespace": "kube-system", 1281 | "pod": "kube-apiserver-minikube", 1282 | "reason": "UnexpectedAdmissionError", 1283 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 1284 | }, 1285 | "value": [1667666608.16, "0"] 1286 | }, 1287 | { 1288 | "metric": { 1289 | "__name__": "kube_pod_status_reason", 1290 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1291 | "job": "kube-state-metrics", 1292 | "namespace": "kube-system", 1293 | "pod": "kube-controller-manager-minikube", 1294 | "reason": "Evicted", 1295 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 1296 | }, 1297 | "value": [1667666608.16, "0"] 1298 | }, 1299 | { 1300 | "metric": { 1301 | "__name__": "kube_pod_status_reason", 1302 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1303 | "job": "kube-state-metrics", 1304 | "namespace": "kube-system", 1305 | "pod": "kube-controller-manager-minikube", 1306 | "reason": "NodeAffinity", 1307 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 1308 | }, 1309 | "value": [1667666608.16, "0"] 1310 | }, 1311 | { 1312 | "metric": { 1313 | "__name__": "kube_pod_status_reason", 1314 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1315 | "job": "kube-state-metrics", 1316 | "namespace": "kube-system", 1317 | "pod": "kube-controller-manager-minikube", 1318 | "reason": "NodeLost", 1319 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 1320 | }, 1321 | "value": [1667666608.16, "0"] 1322 | }, 1323 | { 1324 | "metric": { 1325 | "__name__": "kube_pod_status_reason", 1326 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1327 | "job": "kube-state-metrics", 1328 | "namespace": "kube-system", 1329 | "pod": "kube-controller-manager-minikube", 1330 | "reason": "Shutdown", 1331 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 1332 | }, 1333 | "value": [1667666608.16, "0"] 1334 | }, 1335 | { 1336 | "metric": { 1337 | "__name__": "kube_pod_status_reason", 1338 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1339 | "job": "kube-state-metrics", 1340 | "namespace": "kube-system", 1341 | "pod": "kube-controller-manager-minikube", 1342 | "reason": "UnexpectedAdmissionError", 1343 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 1344 | }, 1345 | "value": [1667666608.16, "0"] 1346 | }, 1347 | { 1348 | "metric": { 1349 | "__name__": "kube_pod_status_reason", 1350 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1351 | "job": "kube-state-metrics", 1352 | "namespace": "kube-system", 1353 | "pod": "kube-proxy-hmwlw", 1354 | "reason": "Evicted", 1355 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 1356 | }, 1357 | "value": [1667666608.16, "0"] 1358 | }, 1359 | { 1360 | "metric": { 1361 | "__name__": "kube_pod_status_reason", 1362 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1363 | "job": "kube-state-metrics", 1364 | "namespace": "kube-system", 1365 | "pod": "kube-proxy-hmwlw", 1366 | "reason": "NodeAffinity", 1367 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 1368 | }, 1369 | "value": [1667666608.16, "0"] 1370 | }, 1371 | { 1372 | "metric": { 1373 | "__name__": "kube_pod_status_reason", 1374 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1375 | "job": "kube-state-metrics", 1376 | "namespace": "kube-system", 1377 | "pod": "kube-proxy-hmwlw", 1378 | "reason": "NodeLost", 1379 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 1380 | }, 1381 | "value": [1667666608.16, "0"] 1382 | }, 1383 | { 1384 | "metric": { 1385 | "__name__": "kube_pod_status_reason", 1386 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1387 | "job": "kube-state-metrics", 1388 | "namespace": "kube-system", 1389 | "pod": "kube-proxy-hmwlw", 1390 | "reason": "Shutdown", 1391 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 1392 | }, 1393 | "value": [1667666608.16, "0"] 1394 | }, 1395 | { 1396 | "metric": { 1397 | "__name__": "kube_pod_status_reason", 1398 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1399 | "job": "kube-state-metrics", 1400 | "namespace": "kube-system", 1401 | "pod": "kube-proxy-hmwlw", 1402 | "reason": "UnexpectedAdmissionError", 1403 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 1404 | }, 1405 | "value": [1667666608.16, "0"] 1406 | }, 1407 | { 1408 | "metric": { 1409 | "__name__": "kube_pod_status_reason", 1410 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1411 | "job": "kube-state-metrics", 1412 | "namespace": "kube-system", 1413 | "pod": "kube-scheduler-minikube", 1414 | "reason": "Evicted", 1415 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 1416 | }, 1417 | "value": [1667666608.16, "0"] 1418 | }, 1419 | { 1420 | "metric": { 1421 | "__name__": "kube_pod_status_reason", 1422 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1423 | "job": "kube-state-metrics", 1424 | "namespace": "kube-system", 1425 | "pod": "kube-scheduler-minikube", 1426 | "reason": "NodeAffinity", 1427 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 1428 | }, 1429 | "value": [1667666608.16, "0"] 1430 | }, 1431 | { 1432 | "metric": { 1433 | "__name__": "kube_pod_status_reason", 1434 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1435 | "job": "kube-state-metrics", 1436 | "namespace": "kube-system", 1437 | "pod": "kube-scheduler-minikube", 1438 | "reason": "NodeLost", 1439 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 1440 | }, 1441 | "value": [1667666608.16, "0"] 1442 | }, 1443 | { 1444 | "metric": { 1445 | "__name__": "kube_pod_status_reason", 1446 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1447 | "job": "kube-state-metrics", 1448 | "namespace": "kube-system", 1449 | "pod": "kube-scheduler-minikube", 1450 | "reason": "Shutdown", 1451 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 1452 | }, 1453 | "value": [1667666608.16, "0"] 1454 | }, 1455 | { 1456 | "metric": { 1457 | "__name__": "kube_pod_status_reason", 1458 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1459 | "job": "kube-state-metrics", 1460 | "namespace": "kube-system", 1461 | "pod": "kube-scheduler-minikube", 1462 | "reason": "UnexpectedAdmissionError", 1463 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 1464 | }, 1465 | "value": [1667666608.16, "0"] 1466 | }, 1467 | { 1468 | "metric": { 1469 | "__name__": "kube_pod_status_reason", 1470 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1471 | "job": "kube-state-metrics", 1472 | "namespace": "kube-system", 1473 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 1474 | "reason": "Evicted", 1475 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 1476 | }, 1477 | "value": [1667666608.16, "0"] 1478 | }, 1479 | { 1480 | "metric": { 1481 | "__name__": "kube_pod_status_reason", 1482 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1483 | "job": "kube-state-metrics", 1484 | "namespace": "kube-system", 1485 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 1486 | "reason": "NodeAffinity", 1487 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 1488 | }, 1489 | "value": [1667666608.16, "0"] 1490 | }, 1491 | { 1492 | "metric": { 1493 | "__name__": "kube_pod_status_reason", 1494 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1495 | "job": "kube-state-metrics", 1496 | "namespace": "kube-system", 1497 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 1498 | "reason": "NodeLost", 1499 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 1500 | }, 1501 | "value": [1667666608.16, "0"] 1502 | }, 1503 | { 1504 | "metric": { 1505 | "__name__": "kube_pod_status_reason", 1506 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1507 | "job": "kube-state-metrics", 1508 | "namespace": "kube-system", 1509 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 1510 | "reason": "Shutdown", 1511 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 1512 | }, 1513 | "value": [1667666608.16, "0"] 1514 | }, 1515 | { 1516 | "metric": { 1517 | "__name__": "kube_pod_status_reason", 1518 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1519 | "job": "kube-state-metrics", 1520 | "namespace": "kube-system", 1521 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 1522 | "reason": "UnexpectedAdmissionError", 1523 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 1524 | }, 1525 | "value": [1667666608.16, "0"] 1526 | }, 1527 | { 1528 | "metric": { 1529 | "__name__": "kube_pod_status_reason", 1530 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1531 | "job": "kube-state-metrics", 1532 | "namespace": "kube-system", 1533 | "pod": "metrics-server-769cd898cd-wchcp", 1534 | "reason": "Evicted", 1535 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 1536 | }, 1537 | "value": [1667666608.16, "0"] 1538 | }, 1539 | { 1540 | "metric": { 1541 | "__name__": "kube_pod_status_reason", 1542 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1543 | "job": "kube-state-metrics", 1544 | "namespace": "kube-system", 1545 | "pod": "metrics-server-769cd898cd-wchcp", 1546 | "reason": "NodeAffinity", 1547 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 1548 | }, 1549 | "value": [1667666608.16, "0"] 1550 | }, 1551 | { 1552 | "metric": { 1553 | "__name__": "kube_pod_status_reason", 1554 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1555 | "job": "kube-state-metrics", 1556 | "namespace": "kube-system", 1557 | "pod": "metrics-server-769cd898cd-wchcp", 1558 | "reason": "NodeLost", 1559 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 1560 | }, 1561 | "value": [1667666608.16, "0"] 1562 | }, 1563 | { 1564 | "metric": { 1565 | "__name__": "kube_pod_status_reason", 1566 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1567 | "job": "kube-state-metrics", 1568 | "namespace": "kube-system", 1569 | "pod": "metrics-server-769cd898cd-wchcp", 1570 | "reason": "Shutdown", 1571 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 1572 | }, 1573 | "value": [1667666608.16, "0"] 1574 | }, 1575 | { 1576 | "metric": { 1577 | "__name__": "kube_pod_status_reason", 1578 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1579 | "job": "kube-state-metrics", 1580 | "namespace": "kube-system", 1581 | "pod": "metrics-server-769cd898cd-wchcp", 1582 | "reason": "UnexpectedAdmissionError", 1583 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 1584 | }, 1585 | "value": [1667666608.16, "0"] 1586 | }, 1587 | { 1588 | "metric": { 1589 | "__name__": "kube_pod_status_reason", 1590 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1591 | "job": "kube-state-metrics", 1592 | "namespace": "kube-system", 1593 | "pod": "storage-provisioner", 1594 | "reason": "Evicted", 1595 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 1596 | }, 1597 | "value": [1667666608.16, "0"] 1598 | }, 1599 | { 1600 | "metric": { 1601 | "__name__": "kube_pod_status_reason", 1602 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1603 | "job": "kube-state-metrics", 1604 | "namespace": "kube-system", 1605 | "pod": "storage-provisioner", 1606 | "reason": "NodeAffinity", 1607 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 1608 | }, 1609 | "value": [1667666608.16, "0"] 1610 | }, 1611 | { 1612 | "metric": { 1613 | "__name__": "kube_pod_status_reason", 1614 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1615 | "job": "kube-state-metrics", 1616 | "namespace": "kube-system", 1617 | "pod": "storage-provisioner", 1618 | "reason": "NodeLost", 1619 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 1620 | }, 1621 | "value": [1667666608.16, "0"] 1622 | }, 1623 | { 1624 | "metric": { 1625 | "__name__": "kube_pod_status_reason", 1626 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1627 | "job": "kube-state-metrics", 1628 | "namespace": "kube-system", 1629 | "pod": "storage-provisioner", 1630 | "reason": "Shutdown", 1631 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 1632 | }, 1633 | "value": [1667666608.16, "0"] 1634 | }, 1635 | { 1636 | "metric": { 1637 | "__name__": "kube_pod_status_reason", 1638 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1639 | "job": "kube-state-metrics", 1640 | "namespace": "kube-system", 1641 | "pod": "storage-provisioner", 1642 | "reason": "UnexpectedAdmissionError", 1643 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 1644 | }, 1645 | "value": [1667666608.16, "0"] 1646 | }, 1647 | { 1648 | "metric": { 1649 | "__name__": "kube_pod_status_reason", 1650 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1651 | "job": "kube-state-metrics", 1652 | "namespace": "kubernetes-dashboard", 1653 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 1654 | "reason": "Evicted", 1655 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 1656 | }, 1657 | "value": [1667666608.16, "0"] 1658 | }, 1659 | { 1660 | "metric": { 1661 | "__name__": "kube_pod_status_reason", 1662 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1663 | "job": "kube-state-metrics", 1664 | "namespace": "kubernetes-dashboard", 1665 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 1666 | "reason": "NodeAffinity", 1667 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 1668 | }, 1669 | "value": [1667666608.16, "0"] 1670 | }, 1671 | { 1672 | "metric": { 1673 | "__name__": "kube_pod_status_reason", 1674 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1675 | "job": "kube-state-metrics", 1676 | "namespace": "kubernetes-dashboard", 1677 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 1678 | "reason": "NodeLost", 1679 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 1680 | }, 1681 | "value": [1667666608.16, "0"] 1682 | }, 1683 | { 1684 | "metric": { 1685 | "__name__": "kube_pod_status_reason", 1686 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1687 | "job": "kube-state-metrics", 1688 | "namespace": "kubernetes-dashboard", 1689 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 1690 | "reason": "Shutdown", 1691 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 1692 | }, 1693 | "value": [1667666608.16, "0"] 1694 | }, 1695 | { 1696 | "metric": { 1697 | "__name__": "kube_pod_status_reason", 1698 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1699 | "job": "kube-state-metrics", 1700 | "namespace": "kubernetes-dashboard", 1701 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 1702 | "reason": "UnexpectedAdmissionError", 1703 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 1704 | }, 1705 | "value": [1667666608.16, "0"] 1706 | }, 1707 | { 1708 | "metric": { 1709 | "__name__": "kube_pod_status_reason", 1710 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1711 | "job": "kube-state-metrics", 1712 | "namespace": "kubernetes-dashboard", 1713 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 1714 | "reason": "Evicted", 1715 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 1716 | }, 1717 | "value": [1667666608.16, "0"] 1718 | }, 1719 | { 1720 | "metric": { 1721 | "__name__": "kube_pod_status_reason", 1722 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1723 | "job": "kube-state-metrics", 1724 | "namespace": "kubernetes-dashboard", 1725 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 1726 | "reason": "NodeAffinity", 1727 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 1728 | }, 1729 | "value": [1667666608.16, "0"] 1730 | }, 1731 | { 1732 | "metric": { 1733 | "__name__": "kube_pod_status_reason", 1734 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1735 | "job": "kube-state-metrics", 1736 | "namespace": "kubernetes-dashboard", 1737 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 1738 | "reason": "NodeLost", 1739 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 1740 | }, 1741 | "value": [1667666608.16, "0"] 1742 | }, 1743 | { 1744 | "metric": { 1745 | "__name__": "kube_pod_status_reason", 1746 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1747 | "job": "kube-state-metrics", 1748 | "namespace": "kubernetes-dashboard", 1749 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 1750 | "reason": "Shutdown", 1751 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 1752 | }, 1753 | "value": [1667666608.16, "0"] 1754 | }, 1755 | { 1756 | "metric": { 1757 | "__name__": "kube_pod_status_reason", 1758 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1759 | "job": "kube-state-metrics", 1760 | "namespace": "kubernetes-dashboard", 1761 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 1762 | "reason": "UnexpectedAdmissionError", 1763 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 1764 | }, 1765 | "value": [1667666608.16, "0"] 1766 | }, 1767 | { 1768 | "metric": { 1769 | "__name__": "kube_pod_status_reason", 1770 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1771 | "job": "kube-state-metrics", 1772 | "namespace": "monitoring", 1773 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 1774 | "reason": "Evicted", 1775 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 1776 | }, 1777 | "value": [1667666608.16, "0"] 1778 | }, 1779 | { 1780 | "metric": { 1781 | "__name__": "kube_pod_status_reason", 1782 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1783 | "job": "kube-state-metrics", 1784 | "namespace": "monitoring", 1785 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 1786 | "reason": "NodeAffinity", 1787 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 1788 | }, 1789 | "value": [1667666608.16, "0"] 1790 | }, 1791 | { 1792 | "metric": { 1793 | "__name__": "kube_pod_status_reason", 1794 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1795 | "job": "kube-state-metrics", 1796 | "namespace": "monitoring", 1797 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 1798 | "reason": "NodeLost", 1799 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 1800 | }, 1801 | "value": [1667666608.16, "0"] 1802 | }, 1803 | { 1804 | "metric": { 1805 | "__name__": "kube_pod_status_reason", 1806 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1807 | "job": "kube-state-metrics", 1808 | "namespace": "monitoring", 1809 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 1810 | "reason": "Shutdown", 1811 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 1812 | }, 1813 | "value": [1667666608.16, "0"] 1814 | }, 1815 | { 1816 | "metric": { 1817 | "__name__": "kube_pod_status_reason", 1818 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1819 | "job": "kube-state-metrics", 1820 | "namespace": "monitoring", 1821 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 1822 | "reason": "UnexpectedAdmissionError", 1823 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 1824 | }, 1825 | "value": [1667666608.16, "0"] 1826 | } 1827 | ] 1828 | } 1829 | }, 1830 | "(sum(kube_pod_container_resource_limits{resource='cpu'}) - sum(kube_node_status_capacity{resource='cpu'}))": { 1831 | "status": "success", 1832 | "data": { 1833 | "resultType": "vector", 1834 | "result": [ 1835 | { 1836 | "metric": {}, 1837 | "value": [1667666812.015, "-7"] 1838 | } 1839 | ] 1840 | } 1841 | }, 1842 | "sum(kube_pod_container_resource_limits{resource='memory'}) - sum(kube_node_status_capacity{resource='memory'})": { 1843 | "status": "success", 1844 | "data": { 1845 | "resultType": "vector", 1846 | "result": [ 1847 | { 1848 | "metric": {}, 1849 | "value": [1667666857.624, "-6989185024"] 1850 | } 1851 | ] 1852 | } 1853 | }, 1854 | "min_over_time(sum by (namespace, pod) (kube_pod_status_phase{phase=~'Pending|Unknown|Failed'})[15m:1m]) > 0": { 1855 | "status": "success", 1856 | "data": { 1857 | "resultType": "vector", 1858 | "result": [ 1859 | { 1860 | "metric": { 1861 | "namespace": "default", 1862 | "pod": "cowclicker-xlsmq" 1863 | }, 1864 | "value": [1667667001.836, "1"] 1865 | }, 1866 | { 1867 | "metric": { 1868 | "namespace": "default", 1869 | "pod": "cowclicker-97d4s" 1870 | }, 1871 | "value": [1667667001.836, "1"] 1872 | }, 1873 | { 1874 | "metric": { 1875 | "namespace": "default", 1876 | "pod": "cowclicker-k82f7" 1877 | }, 1878 | "value": [1667667001.836, "1"] 1879 | } 1880 | ] 1881 | } 1882 | }, 1883 | "(kube_pod_start_time)": { 1884 | "status": "success", 1885 | "data": { 1886 | "resultType": "vector", 1887 | "result": [ 1888 | { 1889 | "metric": { 1890 | "__name__": "kube_pod_start_time", 1891 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1892 | "job": "kube-state-metrics", 1893 | "namespace": "default", 1894 | "pod": "cowclicker-7dbd496458-dmscq", 1895 | "uid": "09269111-81db-462a-bc2f-e42c355b7153" 1896 | }, 1897 | "value": [ 1898 | 1667674455.495, 1899 | "1666651186" 1900 | ] 1901 | }, 1902 | { 1903 | "metric": { 1904 | "__name__": "kube_pod_start_time", 1905 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1906 | "job": "kube-state-metrics", 1907 | "namespace": "default", 1908 | "pod": "cowclicker-7dbd496458-fvq9w", 1909 | "uid": "9d970f48-f193-4b1a-b2b7-e1b584d6604d" 1910 | }, 1911 | "value": [ 1912 | 1667674455.495, 1913 | "1666651181" 1914 | ] 1915 | }, 1916 | { 1917 | "metric": { 1918 | "__name__": "kube_pod_start_time", 1919 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1920 | "job": "kube-state-metrics", 1921 | "namespace": "default", 1922 | "pod": "cowclicker-7dbd496458-rpznx", 1923 | "uid": "01a73c03-993c-4cf1-96e5-e76974ac2ca0" 1924 | }, 1925 | "value": [ 1926 | 1667674455.495, 1927 | "1666651178" 1928 | ] 1929 | }, 1930 | { 1931 | "metric": { 1932 | "__name__": "kube_pod_start_time", 1933 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1934 | "job": "kube-state-metrics", 1935 | "namespace": "default", 1936 | "pod": "cowclicker-97d4s", 1937 | "uid": "db0994e8-f6dd-43ac-a2aa-a0b3e4a71fa8" 1938 | }, 1939 | "value": [ 1940 | 1667674455.495, 1941 | "1667266957" 1942 | ] 1943 | }, 1944 | { 1945 | "metric": { 1946 | "__name__": "kube_pod_start_time", 1947 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1948 | "job": "kube-state-metrics", 1949 | "namespace": "default", 1950 | "pod": "cowclicker-k82f7", 1951 | "uid": "d314f9fc-009b-4bf3-aced-493cce8920ff" 1952 | }, 1953 | "value": [ 1954 | 1667674455.495, 1955 | "1667266957" 1956 | ] 1957 | }, 1958 | { 1959 | "metric": { 1960 | "__name__": "kube_pod_start_time", 1961 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1962 | "job": "kube-state-metrics", 1963 | "namespace": "default", 1964 | "pod": "cowclicker-xlsmq", 1965 | "uid": "84fc4668-591d-4ba0-9c62-8419bfeab5a0" 1966 | }, 1967 | "value": [ 1968 | 1667674455.495, 1969 | "1667266957" 1970 | ] 1971 | }, 1972 | { 1973 | "metric": { 1974 | "__name__": "kube_pod_start_time", 1975 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1976 | "job": "kube-state-metrics", 1977 | "namespace": "kube-system", 1978 | "pod": "coredns-565d847f94-g2m7t", 1979 | "uid": "2907549c-33cd-4a3e-90b6-a16c39547586" 1980 | }, 1981 | "value": [ 1982 | 1667674455.495, 1983 | "1666312099" 1984 | ] 1985 | }, 1986 | { 1987 | "metric": { 1988 | "__name__": "kube_pod_start_time", 1989 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 1990 | "job": "kube-state-metrics", 1991 | "namespace": "kube-system", 1992 | "pod": "etcd-minikube", 1993 | "uid": "cdfeba8a-a60f-4b25-86b9-de5eb1e106ec" 1994 | }, 1995 | "value": [ 1996 | 1667674455.495, 1997 | "1667606098" 1998 | ] 1999 | }, 2000 | { 2001 | "metric": { 2002 | "__name__": "kube_pod_start_time", 2003 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2004 | "job": "kube-state-metrics", 2005 | "namespace": "kube-system", 2006 | "pod": "kube-apiserver-minikube", 2007 | "uid": "106b7ff2-5823-4ca0-a1ed-391e84752486" 2008 | }, 2009 | "value": [ 2010 | 1667674455.495, 2011 | "1667665254" 2012 | ] 2013 | }, 2014 | { 2015 | "metric": { 2016 | "__name__": "kube_pod_start_time", 2017 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2018 | "job": "kube-state-metrics", 2019 | "namespace": "kube-system", 2020 | "pod": "kube-controller-manager-minikube", 2021 | "uid": "1743d56c-880b-47d9-8242-4dd3fca10867" 2022 | }, 2023 | "value": [ 2024 | 1667674455.495, 2025 | "1667665254" 2026 | ] 2027 | }, 2028 | { 2029 | "metric": { 2030 | "__name__": "kube_pod_start_time", 2031 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2032 | "job": "kube-state-metrics", 2033 | "namespace": "kube-system", 2034 | "pod": "kube-proxy-hmwlw", 2035 | "uid": "bd789cec-581e-4f34-90ae-a0fce69fd225" 2036 | }, 2037 | "value": [ 2038 | 1667674455.495, 2039 | "1666312099" 2040 | ] 2041 | }, 2042 | { 2043 | "metric": { 2044 | "__name__": "kube_pod_start_time", 2045 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2046 | "job": "kube-state-metrics", 2047 | "namespace": "kube-system", 2048 | "pod": "kube-scheduler-minikube", 2049 | "uid": "1cf660bc-b784-41a4-af88-5cf7b25a1475" 2050 | }, 2051 | "value": [ 2052 | 1667674455.495, 2053 | "1667604769" 2054 | ] 2055 | }, 2056 | { 2057 | "metric": { 2058 | "__name__": "kube_pod_start_time", 2059 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2060 | "job": "kube-state-metrics", 2061 | "namespace": "kube-system", 2062 | "pod": "kube-state-metrics-5897f6cf77-x98z6", 2063 | "uid": "6ce32cc6-4354-431d-ba53-996f9be4849d" 2064 | }, 2065 | "value": [ 2066 | 1667674455.495, 2067 | "1666636104" 2068 | ] 2069 | }, 2070 | { 2071 | "metric": { 2072 | "__name__": "kube_pod_start_time", 2073 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2074 | "job": "kube-state-metrics", 2075 | "namespace": "kube-system", 2076 | "pod": "metrics-server-769cd898cd-wchcp", 2077 | "uid": "51a8d048-c425-4bf6-9ed3-648c3ece793e" 2078 | }, 2079 | "value": [ 2080 | 1667674455.495, 2081 | "1666480244" 2082 | ] 2083 | }, 2084 | { 2085 | "metric": { 2086 | "__name__": "kube_pod_start_time", 2087 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2088 | "job": "kube-state-metrics", 2089 | "namespace": "kube-system", 2090 | "pod": "storage-provisioner", 2091 | "uid": "1a37b3bd-b946-424c-9219-b764a09ee0b1" 2092 | }, 2093 | "value": [ 2094 | 1667674455.495, 2095 | "1666312098" 2096 | ] 2097 | }, 2098 | { 2099 | "metric": { 2100 | "__name__": "kube_pod_start_time", 2101 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2102 | "job": "kube-state-metrics", 2103 | "namespace": "kubernetes-dashboard", 2104 | "pod": "dashboard-metrics-scraper-b74747df5-x8z7k", 2105 | "uid": "9e28954b-9cba-48f0-90ab-808d52ebbef1" 2106 | }, 2107 | "value": [ 2108 | 1667674455.495, 2109 | "1666312207" 2110 | ] 2111 | }, 2112 | { 2113 | "metric": { 2114 | "__name__": "kube_pod_start_time", 2115 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2116 | "job": "kube-state-metrics", 2117 | "namespace": "kubernetes-dashboard", 2118 | "pod": "kubernetes-dashboard-57bbdc5f89-4hrl7", 2119 | "uid": "54223b8b-c0c7-49b9-98f3-e63789021c6d" 2120 | }, 2121 | "value": [ 2122 | 1667674455.495, 2123 | "1666312207" 2124 | ] 2125 | }, 2126 | { 2127 | "metric": { 2128 | "__name__": "kube_pod_start_time", 2129 | "instance": "kube-state-metrics.kube-system.svc.cluster.local:8080", 2130 | "job": "kube-state-metrics", 2131 | "namespace": "monitoring", 2132 | "pod": "prometheus-deployment-6c8c5bb6cc-rjvg4", 2133 | "uid": "c8804b27-a08e-4dc4-b704-700a58ac671f" 2134 | }, 2135 | "value": [ 2136 | 1667674455.495, 2137 | "1667243217" 2138 | ] 2139 | } 2140 | ] 2141 | } 2142 | } 2143 | } 2144 | --------------------------------------------------------------------------------