diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/client.js b/app/assets/javascripts/kubernetes_dashboard/graphql/client.js
index 56d41ef15cbc5dc3e396434edcbebb1261a400c5..e495d84c5ddde4c6dc84451f65967dfcc2c04cbc 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/client.js
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/client.js
@@ -1,6 +1,6 @@
 import VueApollo from 'vue-apollo';
 import createDefaultClient from '~/lib/graphql';
-import typeDefs from '~/environments/graphql/typedefs.graphql';
+import typeDefs from './typedefs.graphql';
 import k8sPodsQuery from './queries/k8s_dashboard_pods.query.graphql';
 import k8sDeploymentsQuery from './queries/k8s_dashboard_deployments.query.graphql';
 import k8sStatefulSetsQuery from './queries/k8s_dashboard_stateful_sets.query.graphql';
@@ -24,105 +24,46 @@ export const apolloProvider = () => {
     labels: null,
     annotations: null,
   };
+  const data = { nodes: { metadata, status: {}, spec: {} } };
 
   cache.writeQuery({
     query: k8sPodsQuery,
-    data: {
-      metadata,
-      spec: {},
-      status: {
-        phase: null,
-      },
-    },
+    data,
   });
 
   cache.writeQuery({
     query: k8sDeploymentsQuery,
-    data: {
-      metadata,
-      status: {
-        conditions: null,
-      },
-    },
+    data,
   });
 
   cache.writeQuery({
     query: k8sStatefulSetsQuery,
-    data: {
-      metadata,
-      status: {
-        readyReplicas: null,
-      },
-      spec: {
-        replicas: null,
-      },
-    },
+    data,
   });
 
   cache.writeQuery({
     query: k8sReplicaSetsQuery,
-    data: {
-      metadata,
-      status: {
-        readyReplicas: null,
-      },
-      spec: {
-        replicas: null,
-      },
-    },
+    data,
   });
 
   cache.writeQuery({
     query: k8sDaemonSetsQuery,
-    data: {
-      metadata,
-      status: {
-        numberMisscheduled: null,
-        numberReady: null,
-        desiredNumberScheduled: null,
-      },
-    },
+    data,
   });
 
   cache.writeQuery({
     query: k8sJobsQuery,
-    data: {
-      metadata,
-      status: {
-        failed: null,
-        succeeded: null,
-      },
-      spec: {
-        completions: null,
-      },
-    },
+    data,
   });
 
   cache.writeQuery({
     query: k8sCronJobsQuery,
-    data: {
-      metadata,
-      status: {
-        active: null,
-        lastScheduleTime: null,
-      },
-      spec: {
-        suspend: null,
-      },
-    },
+    data,
   });
 
   cache.writeQuery({
     query: k8sServicesQuery,
-    data: {
-      metadata,
-      spec: {
-        type: null,
-        clusterIP: null,
-        externalIP: null,
-        ports: null,
-      },
-    },
+    data,
   });
 
   return new VueApollo({
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js b/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js
index d70edec1e97e0684e506f368f08588bed3fe6068..b44bac3cd7d5bcaaccd9d4eee631c6e04c23e169 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js
@@ -14,89 +14,14 @@ export const buildWatchPath = ({ resource, api = 'api/v1', namespace = '' }) =>
 };
 
 export const mapWorkloadItem = (item) => {
-  if (item.metadata) {
-    const metadata = {
-      ...item.metadata,
-      annotations: item.metadata?.annotations || {},
-      labels: item.metadata?.labels || {},
-    };
-    return { status: item.status, spec: item.spec, metadata };
-  }
-  return { status: item.status, spec: item.spec };
-};
-
-export const mapSetItem = (item) => {
-  const status = {
-    ...item.status,
-    readyReplicas: item.status?.readyReplicas || null,
-  };
-
-  const metadata =
-    {
-      ...item.metadata,
-      annotations: item.metadata?.annotations || {},
-      labels: item.metadata?.labels || {},
-    } || null;
-
-  const spec = item.spec || null;
-
-  return { status, metadata, spec };
-};
-
-export const mapJobItem = (item) => {
+  const status = item.status || {};
+  const spec = item.spec || {};
   const metadata = {
     ...item.metadata,
     annotations: item.metadata?.annotations || {},
     labels: item.metadata?.labels || {},
   };
-
-  const status = {
-    failed: item.status?.failed || 0,
-    succeeded: item.status?.succeeded || 0,
-  };
-
-  return {
-    status,
-    metadata,
-    spec: item.spec,
-  };
-};
-
-export const mapServicesItems = (item) => {
-  const { type, clusterIP, externalIP, ports } = item.spec;
-
-  return {
-    metadata: {
-      ...item.metadata,
-      annotations: item.metadata?.annotations || {},
-      labels: item.metadata?.labels || {},
-    },
-    spec: {
-      type,
-      clusterIP: clusterIP || '-',
-      externalIP: externalIP || '-',
-      ports,
-    },
-  };
-};
-
-export const mapCronJobItem = (item) => {
-  const metadata = {
-    ...item.metadata,
-    annotations: item.metadata?.annotations || {},
-    labels: item.metadata?.labels || {},
-  };
-
-  const status = {
-    active: item.status?.active || 0,
-    lastScheduleTime: item.status?.lastScheduleTime || null,
-  };
-
-  return {
-    status,
-    metadata,
-    spec: item.spec,
-  };
+  return { status, spec, metadata, __typename: 'LocalWorkloadItem' };
 };
 
 export const watchWorkloadItems = ({
@@ -106,7 +31,6 @@ export const watchWorkloadItems = ({
   namespace,
   watchPath,
   queryField,
-  mapFn = mapWorkloadItem,
 }) => {
   const config = new Configuration(configuration);
   const watcherApi = new WatchApi(config);
@@ -117,7 +41,7 @@ export const watchWorkloadItems = ({
       let result = [];
 
       watcher.on(EVENT_DATA, (data) => {
-        result = data.map(mapFn);
+        result = data.map(mapWorkloadItem);
 
         client.writeQuery({
           query,
@@ -138,6 +62,7 @@ export const getK8sPods = ({
   namespace = '',
   enableWatch = false,
   mapFn = mapWorkloadItem,
+  queryField = 'k8sPods',
 }) => {
   const config = new Configuration(configuration);
 
@@ -156,7 +81,7 @@ export const getK8sPods = ({
           configuration,
           namespace,
           watchPath,
-          queryField: 'k8sPods',
+          queryField,
         });
       }
 
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql
index fe20cd2e70ebd2c62aa72541e4e19b4444eb2678..47011375bca85dc60a42f0485c436780421fde90 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql
@@ -1,18 +1,7 @@
-query getK8sDashboardCronJobs($configuration: LocalConfiguration) {
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardCronJobs($configuration: K8sDashboardConfig) {
   k8sCronJobs(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    status {
-      active
-      lastScheduleTime
-    }
-    spec {
-      suspend
-    }
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql
index 4469c7a161aca25d18e0778639816cc6e690332d..5b73bee105e03cb520abe422000b5fa4c79388c8 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql
@@ -1,16 +1,7 @@
-query getK8sDashboardDaemonSets($configuration: LocalConfiguration) {
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardDaemonSets($configuration: K8sDashboardConfig) {
   k8sDaemonSets(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    status {
-      numberMisscheduled
-      numberReady
-      desiredNumberScheduled
-    }
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql
index 21172bbbeb09c30f73ba76365eb95805b4878d44..7b7fa26d8a8df0c898160725d1b7d3fef260e4aa 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql
@@ -1,14 +1,7 @@
-query getK8sDashboardDeployments($configuration: LocalConfiguration) {
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardDeployments($configuration: K8sDashboardConfig) {
   k8sDeployments(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    status {
-      conditions
-    }
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql
index 86afb47f2f9a25e4dbcda80a50d5afb113eff067..4752371b246313700b612868829144c47228e3d3 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql
@@ -1,18 +1,7 @@
-query getK8sDashboardJobs($configuration: LocalConfiguration) {
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardJobs($configuration: K8sDashboardConfig) {
   k8sJobs(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    status {
-      failed
-      succeeded
-    }
-    spec {
-      completions
-    }
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql
index 942737c062a46d7d33f15dea14232f520085f459..b8baff4216c2ac35c11bb32a691b6f5a90064d99 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql
@@ -1,13 +1,7 @@
-query getK8sDashboardPods($configuration: LocalConfiguration) {
-  k8sPods(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    status
-    spec
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardPods($configuration: K8sDashboardConfig) {
+  k8sDashboardPods(configuration: $configuration) @client {
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql
index 38aaa79853c5844afa757e40f5e998ef31182381..3e54909f66248264a572e4c80b2e5022b0fdeb9e 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql
@@ -1,17 +1,7 @@
-query getK8sDashboardReplicaSets($configuration: LocalConfiguration) {
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardReplicaSets($configuration: K8sDashboardConfig) {
   k8sReplicaSets(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    status {
-      readyReplicas
-    }
-    spec {
-      replicas
-    }
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql
index 7d42d66183efa5a7592fec1a2e5c73663112e0a1..b00c9e60c35a5dd115a483746e078ae74da6f746 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql
@@ -1,17 +1,7 @@
-query getK8sDashboardServices($configuration: LocalConfiguration) {
-  k8sServices(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    spec {
-      type
-      clusterIP
-      externalIP
-      ports
-    }
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardServices($configuration: K8sDashboardConfig) {
+  k8sDashboardServices(configuration: $configuration) @client {
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql
index ab1b9e1e472faf98323f4eece97b3c7679a7f130..6e2e4778052d2a34c825d65573b460a9a3c7ca09 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql
@@ -1,17 +1,7 @@
-query getK8sDashboardStatefulSets($configuration: LocalConfiguration) {
+#import "./workload_item.fragment.graphql"
+
+query getK8sDashboardStatefulSets($configuration: K8sDashboardConfig) {
   k8sStatefulSets(configuration: $configuration) @client {
-    metadata {
-      name
-      namespace
-      creationTimestamp
-      labels
-      annotations
-    }
-    status {
-      readyReplicas
-    }
-    spec {
-      replicas
-    }
+    ...WorkloadItem
   }
 }
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/workload_item.fragment.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/workload_item.fragment.graphql
new file mode 100644
index 0000000000000000000000000000000000000000..da476a7562e5f877618833d67d69b625c69e27ad
--- /dev/null
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/workload_item.fragment.graphql
@@ -0,0 +1,11 @@
+fragment WorkloadItem on LocalWorkloadItem {
+  metadata {
+    name
+    namespace
+    creationTimestamp
+    labels
+    annotations
+  }
+  status
+  spec
+}
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js b/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js
index 75285ad2ccabbf6a5874b3e71fb8e6db9b41d67e..a0037e3b13c7c6af09b38ba16b91d0d4ab94d90b 100644
--- a/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js
@@ -4,12 +4,8 @@ import {
   getK8sPods,
   handleClusterError,
   mapWorkloadItem,
-  mapSetItem,
   buildWatchPath,
   watchWorkloadItems,
-  mapJobItem,
-  mapCronJobItem,
-  mapServicesItems,
 } from '../helpers/resolver_helpers';
 import k8sDashboardPodsQuery from '../queries/k8s_dashboard_pods.query.graphql';
 import k8sDashboardDeploymentsQuery from '../queries/k8s_dashboard_deployments.query.graphql';
@@ -21,10 +17,11 @@ import k8sCronJobsQuery from '../queries/k8s_dashboard_cron_jobs.query.graphql';
 import k8sServicesQuery from '../queries/k8s_dashboard_services.query.graphql';
 
 export default {
-  k8sPods(_, { configuration }, { client }) {
+  k8sDashboardPods(_, { configuration }, { client }) {
     const query = k8sDashboardPodsQuery;
     const enableWatch = true;
-    return getK8sPods({ client, query, configuration, enableWatch });
+    const queryField = 'k8sDashboardPods';
+    return getK8sPods({ client, query, configuration, enableWatch, queryField });
   },
 
   k8sDeployments(_, { configuration, namespace = '' }, { client }) {
@@ -84,12 +81,11 @@ export default {
           namespace,
           watchPath,
           queryField: 'k8sStatefulSets',
-          mapFn: mapSetItem,
         });
 
         const data = res?.items || [];
 
-        return data.map(mapSetItem);
+        return data.map(mapWorkloadItem);
       })
       .catch(async (err) => {
         try {
@@ -121,12 +117,11 @@ export default {
           namespace,
           watchPath,
           queryField: 'k8sReplicaSets',
-          mapFn: mapSetItem,
         });
 
         const data = res?.items || [];
 
-        return data.map(mapSetItem);
+        return data.map(mapWorkloadItem);
       })
       .catch(async (err) => {
         try {
@@ -194,12 +189,11 @@ export default {
           namespace,
           watchPath,
           queryField: 'k8sJobs',
-          mapFn: mapJobItem,
         });
 
         const data = res?.items || [];
 
-        return data.map(mapJobItem);
+        return data.map(mapWorkloadItem);
       })
       .catch(async (err) => {
         try {
@@ -231,12 +225,11 @@ export default {
           namespace,
           watchPath,
           queryField: 'k8sCronJobs',
-          mapFn: mapCronJobItem,
         });
 
         const data = res?.items || [];
 
-        return data.map(mapCronJobItem);
+        return data.map(mapWorkloadItem);
       })
       .catch(async (err) => {
         try {
@@ -247,7 +240,7 @@ export default {
       });
   },
 
-  k8sServices(_, { configuration, namespace = '' }, { client }) {
+  k8sDashboardServices(_, { configuration, namespace = '' }, { client }) {
     const config = new Configuration(configuration);
 
     const coreV1Api = new CoreV1Api(config);
@@ -266,13 +259,12 @@ export default {
           configuration,
           namespace,
           watchPath,
-          queryField: 'k8sServices',
-          mapFn: mapServicesItems,
+          queryField: 'k8sDashboardServices',
         });
 
         const data = res?.items || [];
 
-        return data.map(mapServicesItems);
+        return data.map(mapWorkloadItem);
       })
       .catch(async (err) => {
         try {
diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/typedefs.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/typedefs.graphql
new file mode 100644
index 0000000000000000000000000000000000000000..aeee24248cee1feb83fce356afb4694f82a3e9ff
--- /dev/null
+++ b/app/assets/javascripts/kubernetes_dashboard/graphql/typedefs.graphql
@@ -0,0 +1,29 @@
+type LocalWorkloadMetadata {
+  name: String
+  namespace: String
+  creationTimestamp: String
+  labels: JSON
+  annotations: JSON
+}
+
+type LocalWorkloadItem {
+  metadata: LocalWorkloadMetadata
+  status: JSON
+  spec: JSON
+}
+
+input K8sDashboardConfig {
+  basePath: String
+  baseOptions: JSON
+}
+
+extend type Query {
+  k8sCronJobs(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+  k8sDaemonSets(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+  k8sDeployments(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+  k8sJobs(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+  k8sDashboardPods(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+  k8sReplicaSets(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+  k8sDashboardServices(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+  k8sStatefulSets(configuration: K8sDashboardConfig): [LocalWorkloadItem]
+}
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue
index 2d57bfdc9fcc96b31a707c4f7345d2dc189921fe..9967ce303a3c560b3ec8ba9c8e851578420344a0 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue
@@ -22,13 +22,15 @@ export default {
         return (
           data?.k8sCronJobs?.map((job) => {
             return {
-              name: job.metadata?.name,
-              namespace: job.metadata?.namespace,
+              name: job.metadata.name,
+              namespace: job.metadata.namespace,
               status: calculateCronJobStatus(job),
-              age: getAge(job.metadata?.creationTimestamp),
-              labels: job.metadata?.labels,
-              annotations: job.metadata?.annotations,
+              age: getAge(job.metadata.creationTimestamp),
+              labels: job.metadata.labels,
+              annotations: job.metadata.annotations,
               kind: s__('KubernetesDashboard|CronJob'),
+              spec: job.spec,
+              fullStatus: job.status,
             };
           }) || []
         );
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue
index bdde4e89f342a1459535d9cf8824e052bea78a73..9ad5d4d696f71535c8524b2087f745efdca88ce2 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue
@@ -22,13 +22,15 @@ export default {
         return (
           data?.k8sDaemonSets?.map((daemonSet) => {
             return {
-              name: daemonSet.metadata?.name,
-              namespace: daemonSet.metadata?.namespace,
+              name: daemonSet.metadata.name,
+              namespace: daemonSet.metadata.namespace,
               status: calculateDaemonSetStatus(daemonSet),
-              age: getAge(daemonSet.metadata?.creationTimestamp),
-              labels: daemonSet.metadata?.labels,
-              annotations: daemonSet.metadata?.annotations,
+              age: getAge(daemonSet.metadata.creationTimestamp),
+              labels: daemonSet.metadata.labels,
+              annotations: daemonSet.metadata.annotations,
               kind: s__('KubernetesDashboard|DaemonSet'),
+              spec: daemonSet.spec,
+              fullStatus: daemonSet.status,
             };
           }) || []
         );
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue
index c547296653972c36d4f2ad31417787aaf1b964b4..a56db69c8930cb8064bd4c6f2dc9f4af7e0226be 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue
@@ -22,13 +22,15 @@ export default {
         return (
           data?.k8sDeployments?.map((deployment) => {
             return {
-              name: deployment.metadata?.name,
-              namespace: deployment.metadata?.namespace,
+              name: deployment.metadata.name,
+              namespace: deployment.metadata.namespace,
               status: calculateDeploymentStatus(deployment),
-              age: getAge(deployment.metadata?.creationTimestamp),
-              labels: deployment.metadata?.labels,
-              annotations: deployment.metadata?.annotations,
+              age: getAge(deployment.metadata.creationTimestamp),
+              labels: deployment.metadata.labels,
+              annotations: deployment.metadata.annotations,
               kind: s__('KubernetesDashboard|Deployment'),
+              spec: deployment.spec,
+              fullStatus: deployment.status,
             };
           }) || []
         );
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue
index f9dbb53e8b45f019240e53214524a32202142bde..1d7286ac727379b552680474686477f35d49561f 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue
@@ -22,13 +22,15 @@ export default {
         return (
           data?.k8sJobs?.map((job) => {
             return {
-              name: job.metadata?.name,
-              namespace: job.metadata?.namespace,
+              name: job.metadata.name,
+              namespace: job.metadata.namespace,
               status: calculateJobStatus(job),
-              age: getAge(job.metadata?.creationTimestamp),
-              labels: job.metadata?.labels,
-              annotations: job.metadata?.annotations,
+              age: getAge(job.metadata.creationTimestamp),
+              labels: job.metadata.labels,
+              annotations: job.metadata.annotations,
               kind: s__('KubernetesDashboard|Job'),
+              spec: job.spec,
+              fullStatus: job.status,
             };
           }) || []
         );
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue
index ba124d908b3d7559cae9f150a77460789a89dc6f..05eb86541447551520259a55547aefb62d6a4e65 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue
@@ -26,14 +26,14 @@ export default {
       },
       update(data) {
         return (
-          data?.k8sPods?.map((pod) => {
+          data?.k8sDashboardPods?.map((pod) => {
             return {
-              name: pod.metadata?.name,
-              namespace: pod.metadata?.namespace,
+              name: pod.metadata.name,
+              namespace: pod.metadata.namespace,
               status: pod.status.phase,
-              age: getAge(pod.metadata?.creationTimestamp),
-              labels: pod.metadata?.labels,
-              annotations: pod.metadata?.annotations,
+              age: getAge(pod.metadata.creationTimestamp),
+              labels: pod.metadata.labels,
+              annotations: pod.metadata.annotations,
               kind: s__('KubernetesDashboard|Pod'),
               spec: pod.spec,
               fullStatus: pod.status,
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue
index 212cc0dbaf73ef0eb7633c4e51ef5d68f92f37ed..ec59c6e63f05068a15c8e5a28948e79eab4f1191 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue
@@ -22,13 +22,15 @@ export default {
         return (
           data?.k8sReplicaSets?.map((replicaSet) => {
             return {
-              name: replicaSet.metadata?.name,
-              namespace: replicaSet.metadata?.namespace,
+              name: replicaSet.metadata.name,
+              namespace: replicaSet.metadata.namespace,
               status: calculateStatefulSetStatus(replicaSet),
-              age: getAge(replicaSet.metadata?.creationTimestamp),
-              labels: replicaSet.metadata?.labels,
-              annotations: replicaSet.metadata?.annotations,
+              age: getAge(replicaSet.metadata.creationTimestamp),
+              labels: replicaSet.metadata.labels,
+              annotations: replicaSet.metadata.annotations,
               kind: s__('KubernetesDashboard|ReplicaSet'),
+              spec: replicaSet.spec,
+              fullStatus: replicaSet.status,
             };
           }) || []
         );
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue
index 4dc8fb6b6c0317061e6305806b5513cbcd15f4a5..6be195175386c4505200460ffd3ae7b120864b3c 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue
@@ -20,18 +20,20 @@ export default {
       },
       update(data) {
         return (
-          data?.k8sServices?.map((service) => {
+          data?.k8sDashboardServices?.map((service) => {
             return {
-              name: service.metadata?.name,
-              namespace: service.metadata?.namespace,
-              type: service.spec?.type,
-              clusterIP: service.spec?.clusterIP,
-              externalIP: service.spec?.externalIP,
-              ports: generateServicePortsString(service?.spec?.ports),
-              age: getAge(service.metadata?.creationTimestamp),
-              labels: service.metadata?.labels,
-              annotations: service.metadata?.annotations,
+              name: service.metadata.name,
+              namespace: service.metadata.namespace,
+              type: service.spec.type,
+              clusterIP: service.spec.clusterIP || '-',
+              externalIP: service.spec.externalIP || '-',
+              ports: generateServicePortsString(service.spec.ports),
+              age: getAge(service.metadata.creationTimestamp),
+              labels: service.metadata.labels,
+              annotations: service.metadata.annotations,
               kind: s__('KubernetesDashboard|Service'),
+              spec: service.spec,
+              fullStatus: service.status,
             };
           }) || []
         );
diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue
index bcdce41b4338e4acc6bc0f289a9c0222e5ba2ace..e6c72c66c5d629b316ae1b8f07d57f2fbc776fb0 100644
--- a/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue
@@ -22,13 +22,15 @@ export default {
         return (
           data?.k8sStatefulSets?.map((statefulSet) => {
             return {
-              name: statefulSet.metadata?.name,
-              namespace: statefulSet.metadata?.namespace,
+              name: statefulSet.metadata.name,
+              namespace: statefulSet.metadata.namespace,
               status: calculateStatefulSetStatus(statefulSet),
-              age: getAge(statefulSet.metadata?.creationTimestamp),
-              labels: statefulSet.metadata?.labels,
-              annotations: statefulSet.metadata?.annotations,
+              age: getAge(statefulSet.metadata.creationTimestamp),
+              labels: statefulSet.metadata.labels,
+              annotations: statefulSet.metadata.annotations,
               kind: s__('KubernetesDashboard|StatefulSet'),
+              spec: statefulSet.spec,
+              fullStatus: statefulSet.status,
             };
           }) || []
         );
diff --git a/spec/frontend/kubernetes_dashboard/graphql/mock_data.js b/spec/frontend/kubernetes_dashboard/graphql/mock_data.js
index ce6a2defc1b75637948e499570d639df82087cc2..75c722498d07638aafc5b834658d19c27a4e7202 100644
--- a/spec/frontend/kubernetes_dashboard/graphql/mock_data.js
+++ b/spec/frontend/kubernetes_dashboard/graphql/mock_data.js
@@ -8,6 +8,7 @@ const runningPod = {
     annotations: { annotation: 'text', another: 'text' },
   },
   spec: { restartPolicy: 'Never', terminationGracePeriodSeconds: 30 },
+  __typename: 'LocalWorkloadItem',
 };
 const pendingPod = {
   status: { phase: 'Pending' },
@@ -19,6 +20,7 @@ const pendingPod = {
     annotations: { annotation: 'text', another: 'text' },
   },
   spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 const succeededPod = {
   status: { phase: 'Succeeded' },
@@ -30,6 +32,7 @@ const succeededPod = {
     annotations: {},
   },
   spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 const failedPod = {
   status: { phase: 'Failed' },
@@ -41,6 +44,7 @@ const failedPod = {
     annotations: {},
   },
   spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 
 export const k8sPodsMock = [runningPod, runningPod, pendingPod, succeededPod, failedPod, failedPod];
@@ -143,6 +147,8 @@ const pendingDeployment = {
     labels: {},
     annotations: {},
   },
+  spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 const readyDeployment = {
   status: {
@@ -158,6 +164,8 @@ const readyDeployment = {
     labels: {},
     annotations: {},
   },
+  spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 const failedDeployment = {
   status: {
@@ -173,6 +181,8 @@ const failedDeployment = {
     labels: {},
     annotations: {},
   },
+  spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 
 export const k8sDeploymentsMock = [
@@ -246,6 +256,7 @@ const readyStatefulSet = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 const failedStatefulSet = {
   status: { readyReplicas: 1 },
@@ -257,6 +268,7 @@ const failedStatefulSet = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 
 export const k8sStatefulSetsMock = [readyStatefulSet, readyStatefulSet, failedStatefulSet];
@@ -317,6 +329,8 @@ const readyDaemonSet = {
     labels: {},
     annotations: {},
   },
+  spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 
 const failedDaemonSet = {
@@ -328,6 +342,8 @@ const failedDaemonSet = {
     labels: {},
     annotations: {},
   },
+  spec: {},
+  __typename: 'LocalWorkloadItem',
 };
 
 export const mockDaemonSetsStats = [
@@ -374,6 +390,7 @@ const completedJob = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 
 const failedJob = {
@@ -386,6 +403,7 @@ const failedJob = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 
 const anotherFailedJob = {
@@ -398,6 +416,7 @@ const anotherFailedJob = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 
 export const mockJobsStats = [
@@ -453,6 +472,7 @@ const readyCronJob = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 
 const suspendedCronJob = {
@@ -465,6 +485,7 @@ const suspendedCronJob = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 
 const failedCronJob = {
@@ -477,6 +498,7 @@ const failedCronJob = {
     labels: {},
     annotations: {},
   },
+  __typename: 'LocalWorkloadItem',
 };
 
 export const mockCronJobsStats = [
@@ -548,6 +570,8 @@ export const k8sServicesMock = [
       externalIP: '-',
       type: 'ClusterIP',
     },
+    status: {},
+    __typename: 'LocalWorkloadItem',
   },
   {
     metadata: {
@@ -580,6 +604,8 @@ export const k8sServicesMock = [
       externalIP: '-',
       type: 'NodePort',
     },
+    status: {},
+    __typename: 'LocalWorkloadItem',
   },
 ];
 
diff --git a/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js b/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js
index 01e2c3d2716eaa558fd8e7016fc99920c04f4508..d1a51a7f91af863a363e50e4bc7dd017919c5b7f 100644
--- a/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js
+++ b/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js
@@ -33,7 +33,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
     mockResolvers = resolvers;
   });
 
-  describe('k8sPods', () => {
+  describe('k8sDashboardPods', () => {
     const client = { writeQuery: jest.fn() };
 
     const mockWatcher = WatchApi.prototype;
@@ -65,7 +65,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
       });
 
       it('should request all pods from the cluster_client library and watch the events', async () => {
-        const pods = await mockResolvers.Query.k8sPods(
+        const pods = await mockResolvers.Query.k8sDashboardPods(
           null,
           {
             configuration,
@@ -80,12 +80,16 @@ describe('~/frontend/environments/graphql/resolvers', () => {
       });
 
       it('should update cache with the new data when received from the library', async () => {
-        await mockResolvers.Query.k8sPods(null, { configuration, namespace: '' }, { client });
+        await mockResolvers.Query.k8sDashboardPods(
+          null,
+          { configuration, namespace: '' },
+          { client },
+        );
 
         expect(client.writeQuery).toHaveBeenCalledWith({
           query: k8sDashboardPodsQuery,
           variables: { configuration, namespace: '' },
-          data: { k8sPods: [] },
+          data: { k8sDashboardPods: [] },
         });
       });
     });
@@ -99,7 +103,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
         }),
       );
 
-      await mockResolvers.Query.k8sPods(null, { configuration }, { client });
+      await mockResolvers.Query.k8sDashboardPods(null, { configuration }, { client });
 
       expect(mockPodsListWatcherFn).not.toHaveBeenCalled();
     });
@@ -110,7 +114,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
         .mockRejectedValue(new Error('API error'));
 
       await expect(
-        mockResolvers.Query.k8sPods(null, { configuration }, { client }),
+        mockResolvers.Query.k8sDashboardPods(null, { configuration }, { client }),
       ).rejects.toThrow('API error');
     });
   });
@@ -627,7 +631,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
     });
   });
 
-  describe('k8sServices', () => {
+  describe('k8sDashboardServices', () => {
     const client = { writeQuery: jest.fn() };
 
     const mockWatcher = WatchApi.prototype;
@@ -659,7 +663,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
       });
 
       it('should request all Services from the cluster_client library and watch the events', async () => {
-        const Services = await mockResolvers.Query.k8sServices(
+        const Services = await mockResolvers.Query.k8sDashboardServices(
           null,
           {
             configuration,
@@ -674,12 +678,16 @@ describe('~/frontend/environments/graphql/resolvers', () => {
       });
 
       it('should update cache with the new data when received from the library', async () => {
-        await mockResolvers.Query.k8sServices(null, { configuration, namespace: '' }, { client });
+        await mockResolvers.Query.k8sDashboardServices(
+          null,
+          { configuration, namespace: '' },
+          { client },
+        );
 
         expect(client.writeQuery).toHaveBeenCalledWith({
           query: k8sDashboardServicesQuery,
           variables: { configuration, namespace: '' },
-          data: { k8sServices: [] },
+          data: { k8sDashboardServices: [] },
         });
       });
     });
@@ -693,7 +701,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
         }),
       );
 
-      await mockResolvers.Query.k8sServices(null, { configuration }, { client });
+      await mockResolvers.Query.k8sDashboardServices(null, { configuration }, { client });
 
       expect(mockServicesListWatcherFn).not.toHaveBeenCalled();
     });
@@ -704,7 +712,7 @@ describe('~/frontend/environments/graphql/resolvers', () => {
         .mockRejectedValue(new Error('API error'));
 
       await expect(
-        mockResolvers.Query.k8sServices(null, { configuration }, { client }),
+        mockResolvers.Query.k8sDashboardServices(null, { configuration }, { client }),
       ).rejects.toThrow('API error');
     });
   });
diff --git a/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js b/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js
index 28a98bad211726aa095a13b01501293b8741b1ab..6f461743c124a08a69f3586124338d9800bfc6ef 100644
--- a/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js
+++ b/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js
@@ -25,7 +25,7 @@ describe('Kubernetes dashboard pods page', () => {
   const createApolloProvider = () => {
     const mockResolvers = {
       Query: {
-        k8sPods: jest.fn().mockReturnValue(k8sPodsMock),
+        k8sDashboardPods: jest.fn().mockReturnValue(k8sPodsMock),
       },
     };
 
@@ -83,7 +83,7 @@ describe('Kubernetes dashboard pods page', () => {
     const createErroredApolloProvider = () => {
       const mockResolvers = {
         Query: {
-          k8sPods: jest.fn().mockRejectedValueOnce(error),
+          k8sDashboardPods: jest.fn().mockRejectedValueOnce(error),
         },
       };
 
diff --git a/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js b/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js
index c76f4330cd60980b545ef7ac1ade404fba505870..e0746af7e5d429cc549afc65a68eea0abd72eb3c 100644
--- a/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js
+++ b/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js
@@ -26,7 +26,7 @@ describe('Kubernetes dashboard services page', () => {
   const createApolloProvider = () => {
     const mockResolvers = {
       Query: {
-        k8sServices: jest.fn().mockReturnValue(k8sServicesMock),
+        k8sDashboardServices: jest.fn().mockReturnValue(k8sServicesMock),
       },
     };
 
@@ -85,7 +85,7 @@ describe('Kubernetes dashboard services page', () => {
     const createErroredApolloProvider = () => {
       const mockResolvers = {
         Query: {
-          k8sServices: jest.fn().mockRejectedValueOnce(error),
+          k8sDashboardServices: jest.fn().mockRejectedValueOnce(error),
         },
       };