opencredo / kubefuse Goto Github PK
View Code? Open in Web Editor NEWKubernetes as a FUSE Filesystem
Home Page: https://opencredo.com/blogs/introducing-kubefuse-file-system-kubernetes/
License: Apache License 2.0
Kubernetes as a FUSE Filesystem
Home Page: https://opencredo.com/blogs/introducing-kubefuse-file-system-kubernetes/
License: Apache License 2.0
$ pip install kubefuse
Collecting kubefuse
Downloading kubefuse-0.5.1.tar.gz
Building wheels for collected packages: kubefuse
Running setup.py bdist_wheel for kubefuse ... done
Stored in directory: /home/ben_mathews/.cache/pip/wheels/fd/52/d0/f23760eacb117fe75c496580e699f661df80e229c67ebfb2ad
Successfully built kubefuse
Installing collected packages: kubefuse
Successfully installed kubefuse-0.5.1
$ kubefuse ~/k8s
Traceback (most recent call last):
File "/home/ben_mathews/workspace/Platform/MY_ENV/bin/kubefuse", line 7, in <module>
from kubefuse.kubefuse import main
File "/home/ben_mathews/workspace/Platform/MY_ENV/local/lib/python2.7/site-packages/kubefuse/kubefuse.py", line 7, in <module>
from fuse import FUSE, FuseOSError, Operations, LoggingMixIn
ImportError: No module named fuse
Works after pip install fusepy
.
On Ubuntu 16.04 I tried pip install --user kubefuse
and running it fails with:
~> kubefuse kubefuse
Traceback (most recent call last):
File "/home/salvus/.local/bin/kubefuse", line 7, in <module>
from kubefuse.kubefuse import main
File "/home/salvus/.local/lib/python2.7/site-packages/kubefuse/kubefuse.py", line 7, in <module>
from fuse import FUSE, FuseOSError, Operations, LoggingMixIn
ImportError: cannot import name FUSE
due to the built in system-wide fuse module being older (?).
I then did pip install --user fusepy
and got past the above, then hit a problem with missing yaml. I then did pip install --user yaml
, at which point everything worked fine.
(... and this project really awesome!)
A single container pod's logs seems to work fine, but it looks like you might need to add a deeper hierarchy for containers. (the equiv. of kubectl logs podname -c containername).
But so far very fun work!
Quick and easy way to increase the number of replicas.
e.g.
echo 6 > ~/kubernetes/default/rc/nginx/replicas
The list of entities has expanded in 1.3, would be good to add the missing entities to path.py
Some of these don't support 'describe', it throws tracebacks when kubectl returns "no describe implemented" errors.
* componentstatuses (aka 'cs')
* configmaps
* daemonsets (aka 'ds')
* deployments
* events (aka 'ev')
* endpoints (aka 'ep')
* horizontalpodautoscalers (aka 'hpa')
* ingress (aka 'ing')
* jobs
* limitranges (aka 'limits')
* nodes (aka 'no')
* namespaces (aka 'ns')
* pods (aka 'po')
* persistentvolumes (aka 'pv')
* persistentvolumeclaims (aka 'pvc')
* quota
* resourcequotas (aka 'quota')
* replicasets (aka 'rs')
* replicationcontrollers (aka 'rc')
* secrets
* serviceaccounts (aka 'sa')
* services (aka 'svc')
At the moment all files are listed with a size of 50000
bytes. This is a dirty hack and should be resolved. 0 size files broke a lot of tools on my mac unfortunately and I haven't found a way around that so the only thing I can think of at this point is to actually go and fetch the resources to calculate the size correctly.
This is a bit expensive because it has to run the kubectl
behind the scenes for each file, but we can cache the results for a little while to alleviate this.
I tried to run kubefuse
with Python 3, but ran into "print without parentheses" errors right away. Python 2 works great. The README should mention this requirement.
Show limits, quota and usage?
Modifying a file with sed doesn't work. Either in place or using redirection:
sed -e 's/ replicas: 1/ replicas: 2/g' testmount/default/rc/postgres/yaml > testmount/default/rc/postgres/yaml
I have a feeling that instead of truncating the file and overwriting it sed tries to create a new file and move it in its place. Haven't looked into this though, but it would be nice to get this working.
Should raise a FuseOSError and write to syslog or something. Or journald. Whatever the cool kids do these days.
install looks ok
$ pip3 install kubefuse
Collecting kubefuse
Downloading kubefuse-0.7.3.tar.gz
Requirement already satisfied: fusepy>=2.0.4 in /usr/local/lib/python3.6/site-packages (from kubefuse)
Collecting python-myna==1.2.0 (from kubefuse)
Downloading python-myna-1.2.0.tar.gz
Requirement already satisfied: PyYAML>=3 in /usr/local/lib/python3.6/site-packages (from kubefuse)
Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/site-packages (from kubefuse)
Building wheels for collected packages: kubefuse, python-myna
Running setup.py bdist_wheel for kubefuse ... done
Stored in directory: /Users/my-user/Library/Caches/pip/wheels/92/18/07/49c7dbbc561c8ac4e366befec2af409f53765662ae4d4081bc
Running setup.py bdist_wheel for python-myna ... done
Stored in directory: /Users/my-user/Library/Caches/pip/wheels/d3/f5/6f/fd9f2b7ffc199ec6363b413a4a14e7dca1d4766ea42565b8a3
Successfully built kubefuse python-myna
Installing collected packages: python-myna, kubefuse
Successfully installed kubefuse-0.7.3 python-myna-1.2.0
running it not so
$ kubefuse
Traceback (most recent call last):
File "/usr/local/bin/kubefuse", line 7, in <module>
from kubefuse.kubefuse import main
File "/usr/local/lib/python3.6/site-packages/kubefuse/kubefuse.py", line 13
print "It looks like the Fuse system library is missing."
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(int "It looks like the Fuse system library is missing.")?
So that you can have multiple kubefuses running at the same time (and copy between them even)
Print statements in kubefuse.py
break python3 compatibility
Just in case people want to write to kubefuse concurrently. You never know.
When installing with pip, fusepy etc do not get installed. After manually installing them I was still missing pyyaml.
I'm on os x, just did a clean install of python 2.7 from homebrew. Also update to the latest pip version.
Installed kubefuse-0.7.3 in a python 3 virtualenv. It threw:
print "It looks like the Fuse system library is missing."
Looks like it's using python 2 style prints.
Is this even possible? Branch it up fella!
Steps to reproduce:
kubefuse
filesystemkubefuse
: cat ~/k8s/default/rc/my-controller.yaml
vi ~/k8s/default/rc/my-controller/json
, and save a trivial change such as an annotationkubectl get rc my-controller -o json
and inspect the outputkubefuse
shows the change: cat ~/k8s/default/rc/my-controller.json
cat ~/k8s/default/rc/my-controller.yaml
Caching doesn't seem to be that long-lived, so soon the YAML version will update. But maybe kubefuse should invalidate all the caching at that level after a successful kubectl edit
?
By popular request. This whole project is useless if we can't rm -rf
the whole thing.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.