Giter Club home page Giter Club logo

octant's Introduction

VMware has ended active development of this project, this repository will no longer be updated.

Logo

Build Status GitHub release License CII Best Practices

A highly extensible platform for developers to better understand the complexity of Kubernetes clusters.

Octant is a tool for developers to understand how applications run on a Kubernetes cluster. It aims to be part of the developer's toolkit for gaining insight and approaching complexity found in Kubernetes. Octant offers a combination of introspective tooling, cluster navigation, and object management along with a plugin system to further extend its capabilities.

Features

  • Resource Viewer

    Graphically visualize relationships between objects in a Kubernetes cluster. The status of individual objects are represented by color to show workload performance.

  • Summary View

    Consolidated status and configuration information in a single page aggregated from output typically found using multiple kubectl commands.

  • Port Forward

    Forward a local port to a running pod with a single button for debugging applications and even port forward multiple pods across namespaces.

  • Log Stream

    View log streams of pod and container activity for troubleshooting or monitoring without holding multiple terminals open.

  • Label Filter

    Organize workloads with label filtering for inspecting clusters with a high volume of objects in a namespace.

  • Cluster Navigation

    Easily change between namespaces or contexts across different clusters. Multiple kubeconfig files are also supported.

  • Plugin System

    Highly extensible plugin system for users to provide additional functionality through gRPC. Plugin authors can add components on top of existing views.

Usage

Octant demo

Installation

Package (Linux only)

  1. Download the .deb or .rpm from the releases page.

  2. Install with either dpkg -i or rpm -i respectively.

Windows

Chocolatey

  1. Install using chocolatey with the following one-liner:

    choco install octant --confirm

Scoop

  1. Add the extras bucket.

    scoop bucket add extras
  2. Install using scoop.

    scoop install octant

macOS

Homebrew

  1. Install using Homebrew with the following one-liner:

    brew install octant

Download a Pre-built Binary (Linux, macOS, Windows)

  1. Open the releases page from a browser and download the latest tarball or zip file.

  2. Extract the tarball or zip where X.Y is the release version:

    $ tar -xzvf ~/Downloads/octant_0.X.Y_Linux-64bit.tar.gz
    octant_0.X.Y_Linux-64bit/README.md
    octant_0.X.Y_Linux-64bit/octant
  3. Verify it runs:

    $ ./octant_0.X.Y_Linux-64bit/octant version

Nightly Builds

Nightly builds of Octant are available for download.

Please note that nightly builds maybe less stable than our tagged releases and are intended to allow early access to preview upcoming features and for plugin authors who want access to the latest plugin APIs.

Browse nightly builds

Getting Started

Before starting Octant, make sure you have access to a healthy cluster. If kubectl is installed, test using kubectl cluster-info.

Start running Octant:

$ octant

Octant should immediately launch your default web browser on 127.0.0.1:7777.

Octant uses the default web browser on the system to act as the UI client. In the future Octant will ship with a UI.

For setting extra configuration such as what kubeconfig or context to use at startup, refer to the documentation.

Supported Versions

Octant versions follow Semantic Versioning where a given version number represents MAJOR.MINOR.PATCH.

Patch releases address bug fixes, regressions, and small enhancements.

Minor releases contain security fixes, API changes, and significant enhancements such as UI changes or new components.

Major releases contain breaking changes that are not guaranteed to be backwards compatible. Octant versions before 1.0 should not be considered stable and API may change between minor releases.

Supported Version Skew

Version of Octant are compiled against a version of client-go.

Octant follows an n±1 policy for versions of Kubernetes similar to kubectl. For example, Octant 0.16.0 uses the Kubernetes 1.19 client. So version 0.16.0 can be used with Kubernetes 1.18, 1.19, and 1.20.

Plugins

Plugins are a core part of Octant in the Kubernetes ecosystem. A plugin can read objects and allows users to add components to Octant's views.

An example plugin can be found in cmd/octant-sample-plugin and installed to the default plugin path with go run build.go install-test-plugin.

Some plugins can be found on GitHub in the #octant-plugin topic (tag).

Documentation for plugin components can be found in the Plugins section of the documentation.

Discussion

Feature requests, bug reports, and enhancements are welcome. Contributors, maintainers, and users are encouraged to collaborate through these communication channels:

Contributing

Contributors will need to sign a DCO (Developer Certificate of Origin) with all changes. We also ask that a changelog entry is included with your pull request. Details are described in our contributing documentation.

See our hacking guide for getting your development environment setup.

See our roadmap for tentative features in a 1.0 release.

License

Octant is available under the Apache License, Version 2.0

octant's People

Contributors

alexbrand avatar bryanl avatar ccbayer avatar danielhelfand avatar davidmirror-ops avatar dependabot[bot] avatar dotnomad avatar ftovaro avatar garysmith avatar guesswhosamfoo avatar jonasrosland avatar k8k avatar kaitoii11 avatar lenriquez avatar liamrathke avatar mdaverde avatar michaelstergianis avatar mikeroysoft avatar mklanjsek avatar mstergianis avatar nfarruggiagl avatar nodece avatar scothis avatar sdbrett avatar sensay-nelson avatar sergiupantiru avatar shomron avatar wwitzel3 avatar xtreme-jon-ji avatar zparnold avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

octant's Issues

Resource viewer loads forever for sidecar containers

Example config:

apiVersion: apps/v1
kind: Deployment 
metadata:
  name: sidecar
spec:
  selector:
    matchLabels:
      app: sidecar
  replicas: 2
  template:
    metadata:
      labels:
        app: sidecar
    spec:
      volumes:
      - name: shared-logs 
        emptyDir: {}
    
      containers:
      - name: app-container
        image: alpine
        command: ["/bin/sh"]
        args: ["-c", "while true; do date >> /var/log/app.txt; sleep 5;done"]
    
        volumeMounts:
        - name: shared-logs
          mountPath: /var/log
    
      - name: sidecar-container
        image: nginx:1.16.0
        ports:
          - containerPort: 80
    
        volumeMounts:
        - name: shared-logs
          mountPath: /usr/share/nginx/html

Investigate converting octant to kubectl plugin

@bryanl commented on Fri Apr 19 2019

When sugarloaf is released, enable it to be run as a kubectl plugin.

  • investigate running dash as a plugin (should only require a binary name kubectl-sugarloaf
  • figure out how krew works and create a plan for managing octant with krew
  • Update documentation for install octant with krew and running with kubectl

Linking to unsupported objects

There is a cohort of objects that Octant doesn't support (e.g. apps/v1 ControllerRevision). If they show up in the resource viewer, there is no way to link to them since there is no dashboard view for them. There needs to be a way to handle this case. There are a few options in this case.

  1. Add these objects to the dashboard. Then they can be linked. The issue here is they might not be useful on their own. DaemonSet and ReplicaSet use ControllerRevision internally.
  2. Don't visit these objects.

/cc @wwitzel3

Provide viewers for well known annotations

@bryanl commented on Tue Mar 26 2019

Provide viewers for well known annotations. This could make viewing annotations more friendly to the user

Potential annotations:

  • kubectl.kubernetes.io/last-applied-configuration: This will always be JSON. The frontend will have a highlighter, so there could be a hint to display this as formatted JSON. Also, the backend could send this text formatted with indenting and line breaks.

@mdaverde commented on Thu Apr 18 2019

Should the backend send a new component for each annotation type (i.e. JSON)?


@bryanl commented on Thu Apr 18 2019

Ultimately, the backend would send a component. What that component is is TBD. First you have to gather list of common annotations that could exist, then you would need to determine if our current set of components could be combined to build a better view. I'd assume we'd probably get some new components out of this, but would default to using existing components first.

Handle timeouts when contacting master

@bryanl commented on Mon May 27 2019

A slow control plane can result in timeouts. Currently we log a message to the console, but don't do anything else. The solution should inform notifying the user that the control plane is timing out. Also, the dashboard should be able to provide a better experience when these timeouts are occuring and respond in a faster manner.


@wwitzel3 commented on Tue Jun 11 2019

Here is what happens now ...

2019-06-11T10:58:05.705-0400    ERROR   objectstore/watch.go:124        check access failed: client resource: unable to retrieve rest mapping: Get https://internal.kubernetes.dev-usw2.hq.7infra.com:6443/api?timeout=32s: dial tcp 10.11.81.85:6443: i/o timeout
github.com/heptio/developer-dash/internal/objectstore.(*Watch).List
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/objectstore/watch.go:124
github.com/heptio/developer-dash/internal/describer.LoadObjects
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/describer/describer.go:71
github.com/heptio/developer-dash/internal/describer.(*ObjectLoaderFactory).LoadObjects
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/describer/describer.go:41
github.com/heptio/developer-dash/internal/describer.(*List).Describe
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/describer/list.go:54
github.com/heptio/developer-dash/internal/describer.(*Resource).Describe
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/describer/resource.go:42
github.com/heptio/developer-dash/internal/describer.(*Section).Describe
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/describer/section.go:30
github.com/heptio/developer-dash/internal/describer.(*Section).Describe
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/describer/section.go:30
github.com/heptio/developer-dash/internal/modules/overview.(*realGenerator).Generate
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/modules/overview/generator.go:90
github.com/heptio/developer-dash/internal/modules/overview.(*Overview).Content
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/modules/overview/overview.go:184
github.com/heptio/developer-dash/internal/api.(*contentEventGenerator).Generate
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/api/stream.go:97
github.com/heptio/developer-dash/internal/api.(*contentStreamer).content.func2
        /home/wwitzel3/go/src/github.com/heptio/developer-dash/internal/api/stream.go:240

Consolidate object printers

@bryanl commented on Fri Mar 22 2019

Since printers are starting to form a shape, it should be possible to refactor all the printers
and reduce them to a configuration.

There are two types of printers:

  • list of objects
  • objects

list of objects

List of objects comprises of a table with column and rows. This may be able to stay the same as
there isn't much overlap in the different list printers

objects

Previously, the object printer was introduced. You can supply config, summary, item sections,
and enable events, pod template, or job template. It feels like you should be able to describe
printing an object with a struct and then have a single printer.

Repo handling of generated fakes

There are several places tracking directories from mockgen (.gitignore, .dockerignore, Makefile). Makefile should be able to get a list of them and have documentation on places that needs to update if those paths change.

Switching Namespace

Feature Request

Didn't see this listed anywhere and probably a nit on my part. When switching namespaces while looking at a specific resource I would expect to stay on that resource but change the namespace or have the option to configure that somewhere.

What Happened

With octant running and accessing Service Accounts in the default namespace changed namespaces to kube-system and was brought to the kube-system namespace overview

What I expected

With octant running and accessing Service Accounts in the default namespace change namespaces to kube-system and be brought to Service Accounts in the kube-system namespace

CRDs disappear

@mdaverde commented:

There's a long list of CRDs on initial load of the dashboard, but then a significant amount of them disappear after a few seconds. This is happening to me consistently when I start Octant.

Investigate dropping polling

@bryanl commented on Mon May 27 2019

Polling is hard due to pile ups. Instead of polling, the frontend should register its current context (e.g. viewing a list of lists, viewing a list, viewing an object), and send changes only when there is an update.

This would require additional changes:

  • timestamps should autoincrement in the front end
  • possibly would need to be able to stop the current context. i.e. tell the backend to stop sending updates

@bryanl commented on Wed Jun 05 2019

Instead of polling, why not send updates when things change rather than always.

Octant Status View

Surface the status of Octant, starting with logging information to the user in the UI.

UI Guided App Creation with YAML export for repeatability

@xstevens commented on Mon May 13 2019

This morning I had shared some thoughts in Slack and we wanted to document those here.

It would be nice from a developer's standpoint to be able to easily craft all the resources needed for an app with the UI's assistance. In this regard it might have similar goals as AWS console.

The killer feature though would be to then export the YAML configuration for the designed resources, so it could be repeatable using infrastructure-as-code processes.

This could really apply to anything, but one example might be to assist designing network policies of what services/pods need to talk to each other. Then the users could start from a highly locked down start state and easily convey what their intentions are using a drag-n-drop UI between nodes. This has been done in tools like Visio going a long way back but again was never exportable into any useful repeatable form outside of the tool itself.


@xstevens commented on Fri May 17 2019

Saw this gif demo on Konstellate's repo. This is pretty much what I was thinking of for exporting.

Improve plugin module navigation

Create helpers that ease the creation of navigation for plugins that are also modules. Plugin authors should not have to care about the internal details of our routing to enable navigation in their module plugin.

Catch "server is current unable to handle the request" errors and print something nicer

@bryanl commented on Tue Apr 16 2019

Error message looks like:

2019-04-16T08:12:55.021-0400    ERROR   api/stream.go:255       event generator error: adding tab: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
github.com/heptio/developer-dash/internal/api.(*contentStreamer).content.func2
        /Users/bryan/go/src/github.com/heptio/developer-dash/internal/api/stream.go:255

It should be possible to handle this error in a more graceful fashion


@wwitzel3 commented on Wed Jun 05 2019

in the code that checks if a tab has an error, instead of skipping, add a component.Error to the tab.


@wwitzel3 commented on Wed Jun 05 2019

related #794


@wwitzel3 commented on Wed Jun 05 2019

maybe have a list of errors in Config with a unread counter

improve CRD error handling

When an error is encountered listing and reading CRDs we can check the status of the CRD and surface the conditions along side the error message in the status view.

related #72

Namespace on start might not always be default

@GuessWhoSamFoo commented on Fri Jun 28 2019

When running octant against a namespace on a DECC cluster, there is a case where the user does not have access to the default namespace. This results in a lengthy error output for each group.

2019-06-28T10:45:49.937-0700    ERROR   objectstore/watch.go:176        check access failed: denied {Namespace:default Group:rbac.authorization.k8s.io Resource:rolebindings Verb:list}
github.com/vmware/octant/internal/objectstore.(*Watch).List
        /home/sfoo/go/src/github.com/vmware/octant/internal/objectstore/watch.go:176
github.com/vmware/octant/internal/describer.LoadObjects
        /home/sfoo/go/src/github.com/vmware/octant/internal/describer/describer.go:75
github.com/vmware/octant/internal/describer.(*ObjectLoaderFactory).LoadObjects
        /home/sfoo/go/src/github.com/vmware/octant/internal/describer/describer.go:45
github.com/vmware/octant/internal/describer.(*List).Describe
        /home/sfoo/go/src/github.com/vmware/octant/internal/describer/list.go:74
github.com/vmware/octant/internal/describer.(*Resource).Describe
        /home/sfoo/go/src/github.com/vmware/octant/internal/describer/resource.go:50
github.com/vmware/octant/internal/describer.(*Section).Describe
        /home/sfoo/go/src/github.com/vmware/octant/internal/describer/section.go:35
github.com/vmware/octant/internal/describer.(*Section).Describe
        /home/sfoo/go/src/github.com/vmware/octant/internal/describer/section.go:35
github.com/vmware/octant/internal/modules/overview.(*realGenerator).Generate
        /home/sfoo/go/src/github.com/vmware/octant/internal/modules/overview/generator.go:95
github.com/vmware/octant/internal/modules/overview.(*Overview).Content
        /home/sfoo/go/src/github.com/vmware/octant/internal/modules/overview/overview.go:220
github.com/vmware/octant/internal/event.(*ContentGenerator).Event
        /home/sfoo/go/src/github.com/vmware/octant/internal/event/content_generator.go:50
github.com/vmware/octant/internal/event.runGenerator
        /home/sfoo/go/src/github.com/vmware/octant/internal/event/generator.go:86
github.com/vmware/octant/internal/event.Stream.func1
        /home/sfoo/go/src/github.com/vmware/octant/internal/event/generator.go:54

After switching namespace on UI, octant updates and removes default from dropdown.

image

Octant may need to check for available namespaces before checking access with object store

Infinite loading (only header shown), error "crd conversion failed: cannot convert int64 to float64"

Octant 0.4 does not load for me:

Screenshot_2019-07-23_17-55-58

Console is full of these errors:


2019-07-23T17:54:24.950+0200	ERROR	event/generator.go:103	event generator error	{"err": "get CRD from object store: cannot convert int64 to float64", "errVerbose": "cannot convert int64 to float64\nget CRD from object store\ngithub.com/vmware/octant/internal/describer.CustomResourceDefinition\n\t/go/src/github.com/vmware/octant/internal/describer/customresource.go:61\ngithub.com/vmware/octant/internal/describer.(*crdList).Describe\n\t/go/src/github.com/vmware/octant/internal/describer/crd_list.go:57\ngithub.com/vmware/octant/internal/describer.(*CRDSection).Describe\n\t/go/src/github.com/vmware/octant/internal/describer/crd_section.go:62\ngithub.com/vmware/octant/internal/describer.(*Section).Describe\n\t/go/src/github.com/vmware/octant/internal/describer/section.go:35\ngithub.com/vmware/octant/internal/modules/overview.(*realGenerator).Generate\n\t/go/src/github.com/vmware/octant/internal/modules/overview/generator.go:95\ngithub.com/vmware/octant/internal/modules/overview.(*Overview).Content\n\t/go/src/github.com/vmware/octant/internal/modules/overview/overview.go:225\ngithub.com/vmware/octant/internal/event.(*ContentGenerator).generateContent\n\t/go/src/github.com/vmware/octant/internal/event/content_generator.go:75\ngithub.com/vmware/octant/internal/event.(*ContentGenerator).Event\n\t/go/src/github.com/vmware/octant/internal/event/content_generator.go:71\ngithub.com/vmware/octant/internal/event.runGenerator\n\t/go/src/github.com/vmware/octant/internal/event/generator.go:89\ngithub.com/vmware/octant/internal/event.Stream.func1\n\t/go/src/github.com/vmware/octant/internal/event/generator.go:54\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1337"}
github.com/vmware/octant/internal/event.runGenerator
	/go/src/github.com/vmware/octant/internal/event/generator.go:103
github.com/vmware/octant/internal/event.Stream.func1
	/go/src/github.com/vmware/octant/internal/event/generator.go:54
2019-07-23T17:54:27.792+0200	ERROR	event/generator.go:103	event generator error	{"err": "generate entries for Custom Resources: retrieving CRD names: crd conversion failed: cannot convert int64 to float64", "errVerbose": "cannot convert int64 to float64\ncrd conversion failed\ngithub.com/vmware/octant/pkg/navigation.CustomResourceDefinitionNames\n\t/go/src/github.com/vmware/octant/pkg/navigation/navigation.go:126\ngithub.com/vmware/octant/pkg/navigation.CRDEntries\n\t/go/src/github.com/vmware/octant/pkg/navigation/navigation.go:73\ngithub.com/vmware/octant/internal/octant.(*NavigationFactory).genNode\n\t/go/src/github.com/vmware/octant/internal/octant/factory.go:115\ngithub.com/vmware/octant/internal/octant.(*NavigationFactory).Generate.func1\n\t/go/src/github.com/vmware/octant/internal/octant/factory.go:83\ngithub.com/vmware/octant/vendor/golang.org/x/sync/errgroup.(*Group).Go.func1\n\t/go/src/github.com/vmware/octant/vendor/golang.org/x/sync/errgroup/errgroup.go:57\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1337\nretrieving CRD names\ngithub.com/vmware/octant/pkg/navigation.CRDEntries\n\t/go/src/github.com/vmware/octant/pkg/navigation/navigation.go:75\ngithub.com/vmware/octant/internal/octant.(*NavigationFactory).genNode\n\t/go/src/github.com/vmware/octant/internal/octant/factory.go:115\ngithub.com/vmware/octant/internal/octant.(*NavigationFactory).Generate.func1\n\t/go/src/github.com/vmware/octant/internal/octant/factory.go:83\ngithub.com/vmware/octant/vendor/golang.org/x/sync/errgroup.(*Group).Go.func1\n\t/go/src/github.com/vmware/octant/vendor/golang.org/x/sync/errgroup/errgroup.go:57\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1337\ngenerate entries for Custom Resources\ngithub.com/vmware/octant/internal/octant.(*NavigationFactory).Generate.func1\n\t/go/src/github.com/vmware/octant/internal/octant/factory.go:85\ngithub.com/vmware/octant/vendor/golang.org/x/sync/errgroup.(*Group).Go.func1\n\t/go/src/github.com/vmware/octant/vendor/golang.org/x/sync/errgroup/errgroup.go:57\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1337"}
github.com/vmware/octant/internal/event.runGenerator
	/go/src/github.com/vmware/octant/internal/event/generator.go:103
github.com/vmware/octant/internal/event.Stream.func1

Write up UI e2e smoke test

@mdaverde commented on Mon May 13 2019

The unit tests and integration tests are fulfilling the role of testing the internal logic of the Octant application.

The plan for this issue is to write up an E2E test that can smoke test the major features of Octant. Passing this in our CI/CD process tells us that we can standup the application and a user can at least use top level functionality.

Improve plugin module content / routing

Create an http handler compatible interface that allows for registering routes and content handlers for a module plugin.

Currently you must parse the content path and do all of your own dispatching inside of your Content handler method.

Maybe able to do at the same time as #23

Handle invalid kubeconfig files

@bryanl commented on Wed Nov 21 2018

Handling invalid kubeconfig files:

  • don't panic/exit on invalid kubeconfig files
  • ensure log message generated includes the fact that there is an issue with the kubeconfig file
  • send invalid kubeconfig status to frontend

Show load on control plane

@bryanl commented on Mon May 27 2019

To aid with debugging, it would be helpful to show the load the dashboard is creating on the backend. It should be possible to show watches, what's being watched, and informer status.

Plugins registered with same GVK is duplicated

@GuessWhoSamFoo commented on Tue May 14 2019

Current behavior:

After duplicating the plugin stub with different text, it registers twice to show two identical tabs.

multiple-plugin

Expected behavior:

Installing a new plugin should not result in duplicates of existing plugins.


@bryanl commented on Wed Jun 05 2019

One way to disambiguate is to watch for this in the plugin manager. If you see duplicated tabs, preface them with the plugin name.


@bryanl commented on Wed Jun 19 2019

Also, removing the big label for this. It isn't a big since it is working as intended. Tab names should be more descriptive than the demo’s plugin.


@bryanl commented on Wed Jun 19 2019

There is another way to approach this as well. Use a tooltip to specify which plugin the ran came from. Keep in mind that tabs use vertical space.

CRDs loading error

@mdaverde commented on Thu Jul 11 2019

When I click on a my CRD from the CRD list view, I see this in the terminal console:

E0711 16:11:23.428224   89205 reflector.go:134] github.com/vmware/octant/third_party/k8s.io/client-go/dynamic/dynamicinformer/informer.go:89: Failed to list *unstructured.Unstructured: Stream error http2.StreamError{StreamID:0x4e1, Code:0x2, Cause:error(nil)} when reading response body, may be caused by closed connection. Please retry.
E0711 16:11:28.471659   89205 reflector.go:134] github.com/vmware/octant/third_party/k8s.io/client-go/dynamic/dynamicinformer/informer.go:89: Failed to list *unstructured.Unstructured: Stream error http2.StreamError{StreamID:0x539, Code:0x2, Cause:error(nil)} when reading response body, may be caused by closed connection. Please retry.
E0711 16:12:35.546751   89205 reflector.go:134] github.com/vmware/octant/third_party/k8s.io/client-go/dynamic/dynamicinformer/informer.go:89: Failed to list *unstructured.Unstructured: Stream error http2.StreamError{StreamID:0x605, Code:0x2, Cause:error(nil)} when reading response body, may be caused by closed connection. Please retry.

Nothing in the UI console. This error causes the UI to hang, never going to the specific detail CRD page.


@bryanl commented on Mon Jul 22 2019

This isn't a CRD issue. It's a cluster connectivity issue. Notice the log is from klog. Octant will retry a few times, but will quit after five times.


@mdaverde commented on Mon Jul 15 2019

The Failed to list *unstructured.Unstructured: Stream error http2.StreamError{StreamID:0x4e1, Code:0x2, Cause:error(nil)} part makes it seem it's an internal issue. The messaging here should change.


@bryanl commented on Mon Jul 15 2019

This is a client go reported error. All we could potentially do is turn down the logging verbosity.


@mdaverde commented on Mon Jul 15 2019

If this error is a cluster connectivity error, then I wouldn't propagate this client-go error to the Octant user and instead say something that means "This is a cluster connectivity error. Here are the action steps to debug/verify/fix..."


@bryanl commented on Mon Jul 22 2019

Yes, this is true. My original comment was that this isn't a CRD issue. I'll remove that label.


@mdaverde commented on Mon Jul 22 2019

I'm not sure this is a cluster connectivity issue, given that I can run kubectl describe crd/{{crd name}} with a quick response time in comparison to the UI.

To emphasize: the UI never resolves.


@mdaverde commented on Mon Jul 22 2019

Observation: looks to be each CRD detail view results in theses errors being shown:

E0718 15:11:41.729079   78466 reflector.go:134] github.com/vmware/octant/third_party/k8s.io/client-go/dynamic/dynamicinformer/informer.go:89: Failed to list *unstructured.Unstructured: Stream error http2.StreamError{StreamID:0x4db, Code:0x2, Cause:error(nil)} when reading response body, may be caused by closed connection. Please retry.
E0718 15:12:26.813312   78466 reflector.go:134] github.com/vmware/octant/third_party/k8s.io/client-go/dynamic/dynamicinformer/informer.go:89: Failed to list *unstructured.Unstructured: Stream error http2.StreamError{StreamID:0x461, Code:0x2, Cause:error(nil)} when reading response body, may be caused by closed connection. Please retry.
E0718 15:12:29.497056   78466 reflector.go:134] github.com/vmware/octant/third_party/k8s.io/client-go/dynamic/dynamicinformer/informer.go:89: Failed to list *unstructured.Unstructured: Stream error http2.StreamError{StreamID:0x4d3, Code:0x2, Cause:error(nil)} when reading response body, may be caused by closed connection. Please retry.

Remove the Watch store.

Remove the Watch store and only have ObjectStore. This will help improve overall performance and memory usage.

objectNotFound should be objectDeleted

@mdaverde commented on Thu May 02 2019

This is in reference to the events coming in from the EventSource stream:

objectDeleted fits the warning we give to the user: Kubernetes object was deleted from the cluster.

It also seems like the server sends a redirect path. We should consider just bumping the user up to a valid parent navigational item.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.